C assembleur
coindreauc
-
jisisv Messages postés 3678 Statut Modérateur -
jisisv Messages postés 3678 Statut Modérateur -
Bonjour
Je fais mes premiers pas en assembleur. Mon problème est que je ne sais pas comment faire le passage de paramètres.
J'ai une fonction main qui appelle une fonction plus, et le passage en paramètre ne fonctionne pas tel que je l'ai fait ici : il n'y a pas les bonnes valeurs dans 8(%ebp) et 12(%ebp). Quelqu'un voit le problème ?
Merci !
---------------------------------------------------------------------------------
---------------------------------------------------------------------------------
Je fais mes premiers pas en assembleur. Mon problème est que je ne sais pas comment faire le passage de paramètres.
J'ai une fonction main qui appelle une fonction plus, et le passage en paramètre ne fonctionne pas tel que je l'ai fait ici : il n'y a pas les bonnes valeurs dans 8(%ebp) et 12(%ebp). Quelqu'un voit le problème ?
Merci !
---------------------------------------------------------------------------------
.globl main main: enter $8, $0 movl $5, -4(%ebp) movl $7, -8(%ebp) pushl -4(%ebp) pushl -8(%ebp) call plus addl $8, %esp leave ret
---------------------------------------------------------------------------------
.globl plus plus: movl 8(%ebp), %eax addl 12(%ebp), %eax leave ret
A voir également:
- C assembleur
- Logiciel assembleur - Télécharger - Édition & Programmation
- Assembleur pdf - Guide
- Assembleur pc gamer ✓ - Forum Études / Formation High-Tech
- Assembleur 8086 - Forum Programmation
- Assembleur d'ordinateur - Forum Études / Formation High-Tech
2 réponses
Es-tu certain que ton stack frame est initialisé correct dans la fonction plus
J'ai essayé ceci:
mais cela coince visiblement.
Regarde ici:
http://www.unixwiz.net/techtips/win32-callconv-asm.html
A bientôt.
Johan
J'ai essayé ceci:
johand@osiris:~/src/asm$ cat plus.s .globl plus plus: enter 0, 0 movl 8(%ebp), %eax addl 12(%ebp), %eax leave ret johand@osiris:~/src/asm$ as -g -o plus.o plus.s plus.s: Assembler messages: plus.s:3: Error: too many memory references for 'enter'
mais cela coince visiblement.
Regarde ici:
http://www.unixwiz.net/techtips/win32-callconv-asm.html
A bientôt.
Johan
Tu as raison . J'ai fait de l'assembleur Borland il y a belle lurette.
enter $0, $0 s'assemble correctement avec l'assembleur Gnu.
Après linkage et passage sous gdb:
5+7 vaut 12 comme chacun le sait.
Je ne sai pas par contre, comment redonner la main au système dans main()
Johan
Gates gave ^H sold you the windows.
GNU gave us the whole house.(Alexandrin)
enter $0, $0 s'assemble correctement avec l'assembleur Gnu.
Après linkage et passage sous gdb:
ohand@osiris:~/src/asm$ as -g -o main.o main.s johand@osiris:~/src/asm$ as -g -o plus.o plus.s johand@osiris:~/src/asm$ ld -g -o main main.o plus.o ld: warning: cannot find entry symbol _start; defaulting to 0000000008048054 johand@osiris:~/src/asm$ gdb main <cut /> (gdb) break 11 Breakpoint 1 at 0x804806c: file main.s, line 11. (gdb) run Starting program: /home/johand/src/asm/main Breakpoint 1, main () at main.s:11 11 call plus (gdb) s plus () at plus.s:3 3 enter $0, $0 (gdb) s 4 movl 8(%ebp), %eax (gdb) s 5 addl 12(%ebp), %eax (gdb) s 7 leave (gdb) info r eax 0xc 12 ecx 0x0 0 edx 0x0 0 ebx 0x0 0 esp 0xbffff294 0xbffff294 ebp 0xbffff294 0xbffff294 esi 0x0 0 edi 0x0 0 eip 0x8048082 0x8048082 <plus+10> eflags 0x206 [ PF IF ] cs 0x73 115 ss 0x7b 123 ds 0x7b 123 es 0x7b 123 fs 0x0 0 gs 0x0 0
5+7 vaut 12 comme chacun le sait.
Je ne sai pas par contre, comment redonner la main au système dans main()
Johan
Gates gave ^H sold you the windows.
GNU gave us the whole house.(Alexandrin)
sinon, en lisant, j'ai l'impression d'avoir bien fait les choses.