Assm avec gcc sous mac
lebesgue
Messages postés
13
Statut
Membre
-
kilian Messages postés 8854 Statut Modérateur -
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.
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:
- Assm avec gcc sous mac
- Adresse mac - Guide
- @ Sur mac - Guide
- Temperature mac - Guide
- Nettoyer son mac - Guide
- Mac os 15 - Accueil - MacOS
14 réponses
.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
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
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?
Ca donne quoi?
Au fait, question probablement très bête mais tu es sûr que ton mac est bien un intel?
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).
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).
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
devient
Pour le .skip, ça se remplace. Si tu avait fait un
Tu peux le remplacer par un .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
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
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.
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?
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?
Et si tu fais ça?
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?
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?
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
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
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?
Dis moi si tu essaies de compiler un simple fichier C avec un main qui appelle un printf, ça marche?
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.
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:
En espérant que la commande ldd existe sous MAC, mais il me semble que oui...
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...