Bonjour a tous !
Je suis sous linux et j'utilise gcc. Je regarde l'assembleur produit par gcc pour essayer de le modifier. Malheureusement tous les bouquins d'assembleurs qu'il y a à la bibliothèque traitent de la syntaxe Intel ...
Donc il faut que je traduise l'assembleur produit par gcc en syntaxe Intel pour pouvoir m'exercer. En ce moment j'essaye d'afficher à l'écran "hello : 545454". Voici la version AT&T qui fonctionne :
$ gcc hello.s ; ./a.out
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 .att_syntax noprefix chaine: .string "hello" format: .string "%s : %d\n" .global main main: sub $12, esp movl $format, (esp) movl $chaine, 4(esp) movl $545454, 8(esp) call printf add $12, esp
hello : 545454
Et voici ma version Intel qui foire :
$ gcc hello.s
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 .intel_syntax noprefix chaine: .string "hello" format: .string "%d : %s\n" .global main main: sub esp, 12 mov [esp], dword ptr format mov [esp + 4], dword ptr 5454 mov [esp + 8], dword ptr chaine call printf add esp, 12
hello.s: Assembler messages:
hello.s:8: Error: too many memory references for 'mov'
hello.s:10: Error: too many memory references for 'mov'
Et la j'ai cette erreur qui me dit que j'utilise mov pour un déplacement mémoire - mémoire.
Si c'est le cas, pourquoi ça a marché le premier coup ?
Je pense que la réponse doit se trouver dans la faq (ou ici en anglais) mais c'est vraiment confus et je m'embrouille avec les deux syntaxes :S
Partager