Assm avec gcc sous mac

lebesgue Messages postés 13 Statut Membre -  
kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
j'essaie de compiler un programme en assembleur avec gcc, j'y arrive parfaitement d'un terminal unix, cela dit dès que j'essaie de compiler sur mon mac (toujours avec gcc), cela ne marche plus, voici l'erreur :
Unknown pseudo-op: .string
et
Unknown pseudo-op: .global.
Merci de m'aider si vous savez.
Configuration: Mac OS X
Safari 525.13

14 réponses

  1. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    Salut,

    Tu pourrais nous passer le code source?
    0
  2. lebesgue Messages postés 13 Statut Membre
     
    .data

    nomprog:
    .string "Vivien et Benjamin \n"

    question:
    .string "Entrez un nombre : \n"

    reponse:
    .string "%s"

    entier:
    .string "x = %d"

    reponse2:
    .string "decimal = %s \n"

    reponse3:
    .string "hexadecimal = %s \n"

    valcalc:
    .string "valeur finale =%d \n"

    convert:
    .string "0123456789abcdef"

    chaine:
    .skip 100
    chaine2:
    .string " "
    chainehex:
    .string " "
    x:
    .skip 4

    .text
    .global main

    main:
    pushl $nomprog
    call printf
    add $4, %esp

    pushl $question
    call printf
    add $4, %esp

    pushl $chaine
    pushl $reponse
    call scanf
    add $8, %esp

    movl $chaine, %ebx
    movl $0, %eax

    boucle:
    movl $0, %ecx
    movb (%ebx), %cl
    movl $0, %edx
    cmpl %ecx, %edx
    je todec
    movl $48, %edx
    cmpl %edx, %ecx
    jl main
    movl $57,%edx
    cmpl %ecx, %edx
    jl main
    sub $48, %ecx
    imul $10, %eax
    addl %ecx, %eax
    inc %ebx
    jmp boucle

    todec:
    movl %eax,x
    pushl %eax
    pushl $valcalc
    call printf
    add $8, %esp
    movl $chaine2, %ebx
    addl $9, %ebx
    movl x, %eax
    movl $10, %ecx

    boucle2:
    movl $0, %edx
    divl %ecx
    addl $48, %edx
    movb %dl, (%ebx)
    dec %ebx
    cmp $0, %eax
    jne boucle2

    pushl $chaine2
    pushl $reponse2
    call printf
    add $8, %esp

    movl $chainehex, %ebx
    addl $9, %ebx
    movl x, %eax
    movl $16, %ecx

    boucle3:
    movl $0, %edx
    divl %ecx

    movb convert(%edx), %dl
    movb %dl, (%ebx)
    dec %ebx
    cmp $0, %eax
    jne boucle3

    pushl $chainehex
    pushl $reponse3
    call printf
    add $8, %esp

    # leave
    ret
    0
  3. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    Ok, et en remplaçant tous les .string en .ascii et le .global en .globl
    Ca donne quoi?

    Au fait, question probablement très bête mais tu es sûr que ton mac est bien un intel?
    0
  4. lebesgue Messages postés 13 Statut Membre
     
    Oui mon mac est bien un intel. j'ai remplacé les .string par .ascii, et le .global par .globl, maintenant il y a un pb avec .skip.
    Sinon, j'ai pensé que je n'ai pas les mêmes librairies sur mon mac et sur ma session unix, pense tu que mon problème pourrait venir de là? (je n'ai pas de fichier asm ds le dossier /usr/include).
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    T'inquiète pour les librairies ya aucun soucis dès le moment ou tu t'en tiens à des fonctions standards comme printf ou scanf. Le problème c'est que le gcc utilisé sous Mac semble être un peu retro....

    Concernant le .ascii
    Il remplace le .string mais pour .ascii il faut penser à rajouter le caractère de fin de chaine à la fin d'une chaine.
    Par exemple
    .string "truc"


    devient
    .ascii "truc\0"


    Pour le .skip, ça se remplace. Si tu avait fait un
    x:
    .skip 4


    Tu peux le remplacer par un .word:
    x:
    .word


    Par contre tu as un skip de 100. Donc un tableau pour une chaine vide. J'aimerais bien trouver un equivalent mais là il faut vraiment que j'aille me coucher, ça fait longtemps que je devrais être au lit.

    Mais je trouverai demain, à moins que tu trouves avant moi :-)
    http://sourceware.org/binutils/docs-2.18/as/index.html
    0
  7. lebesgue Messages postés 13 Statut Membre
     
    C'est sympa de ta part. Par contre j'aimerais vraiment savoir pourquoi .string, .skip et .global ne fonctionne pas. Au passage c'est la version 4 de gcc sur mac. Bonne nuit.
    0
  8. lebesgue Messages postés 13 Statut Membre
     
    en fait le scanf et printf ne marchent pas :

    Compilation started at Wed Apr 2 00:30:36

    make -k
    gcc -g conversions.s -o pgm
    Undefined symbols:
    "_main", referenced from:
    start in crt1.10.5.o
    "printf", referenced from:
    main in cc8203Mh.o
    main in cc8203Mh.o
    todec in cc8203Mh.o
    boucle2 in cc8203Mh.o
    boucle3 in cc8203Mh.o
    "scanf", referenced from:
    main in cc8203Mh.o
    ld: symbol(s) not found
    collect2: ld returned 1 exit status
    make: *** [pgm] Error 1
    make: Target `all' not remade because of errors.

    Compilation exited abnormally with code 2 at Wed Apr 2 00:30:36

    Donc c'est peut être bien un problème de librairies?
    0
  9. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    Et si tu fais ça?
    gcc -g conversions.s -o pgm -lc


    Il ya deux étapes avec gcc:
    _ D'abord la compilation
    _ Puis la mise en lien

    Avant d'avoir des problèmes de mise en lien, il faut d'abord que ta syntaxe soit bonne. Donc maintenant ta syntaxe est bonne. Tu n'as plus de problèmes avec skip?
    0
  10. lebesgue Messages postés 13 Statut Membre
     
    non je n'ai plus de pb ac skip comme je l'ai remplacé par .word, mais en tapant la ligne de commande que tu m'as donné j'ai toujours les mêmes erreurs...

    MacBook-de-Vivien:LOGBASE begotvivien$ gcc -g conversions.s -o pgm -lc
    Undefined symbols:
    "_main", referenced from:
    start in crt1.10.5.o
    "printf", referenced from:
    main in ccCif709.o
    main in ccCif709.o
    todec in ccCif709.o
    boucle2 in ccCif709.o
    boucle3 in ccCif709.o
    "scanf", referenced from:
    main in ccCif709.o
    ld: symbol(s) not found
    collect2: ld returned 1 exit status
    0
  11. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    Rah c'est embêtant...j'ai pas de mac pour tester.
    Dis moi si tu essaies de compiler un simple fichier C avec un main qui appelle un printf, ça marche?
    0
  12. lebesgue Messages postés 13 Statut Membre
     
    ca marche trés bien le fichier C. Bon je vais arreter de te saouler il me semble que tu voulais te coucher. On en reparle demain.
    0
  13. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    Hello!

    Bon si tu es encore dans le coin. Pourrais tu, sous MAC, compiler un programme en C qui fait un printf. Ensuite sur l'executable généré, pourrais-tu taper cette commande:
    ldd ./nom_executable

    En espérant que la commande ldd existe sous MAC, mais il me semble que oui...
    0
  14. lebesgue Messages postés 13 Statut Membre
     
    c'est bon je vais laisser tomber je pense, apparemment c'est simplement un problème de version (ce que m'as dit un pote qui a eu le même probleme), et puis au pire je peut tjs me connecter à ma session unix en ssh, et utiliser le gcc qui marche. Merci bcp d'avoir essayé de m'aider.
    0
  15. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    De rien, à bientôt j'espère! (aime bien les soucis d'asm ^_^ )
    0