Я вызываю простую функцию, написанную на C из программы AS Gnu:
C файл:
long foo(int a, int b){
return a*b;
}
Как файл:
.data
TEXT: .ascii "Result: %ld\n\0"
.text
.globl main
main:
pushl $100000
pushl $100000
call foo
addl $8, %esp
pushl %eax
pushl $TEXT
call printf
addl $8, %esp
pushl $0
call exit
В результате в регистре% eax я получаю: 1410065408, что явно неверно.
При умножении в AS результат помещается в EDX: EAX. Но как это работает в этом случае?
При компиляции с опцией -S
в gcc
я получаю:
.globl foo
.type foo, @function
foo:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %eax
imull 12(%ebp), %eax
popl %ebp
ret
Означает ли это, что верхняя половина результата из регистра% edx потеряна?