Assm avec gcc sous mac

lebesgue Messages postés 13 Statut Membre -  
kilian Messages postés 8854 Statut Modérateur -
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.
A voir également:

14 réponses

kilian Messages postés 8854 Statut Modérateur 1 526
 
Salut,

Tu pourrais nous passer le code source?
0
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
kilian Messages postés 8854 Statut Modérateur 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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kilian Messages postés 8854 Statut Modérateur 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
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
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
kilian Messages postés 8854 Statut Modérateur 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
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
kilian Messages postés 8854 Statut Modérateur 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
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
kilian Messages postés 8854 Statut Modérateur 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
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
kilian Messages postés 8854 Statut Modérateur 1 526
 
De rien, à bientôt j'espère! (aime bien les soucis d'asm ^_^ )
0