问题
I'm trying to call a function from within ASM. I know how to call it, but i'm having trouble finding how to get the return value of this function. An example follows:
C code:
int dummy() {
return 5;
}
(N)ASM code:
dummyFunction:
call dummy
;grab return into eax
inc eax ; eax should be 6 now
ret
Any ideas?
回答1:
The return value is in eax
. If you've called a C function from asm, you can read the return value from eax
. If you're trying to return from an asm function to C, store the intended return value in eax
.
Things get a little bit more complicated for returning floating point values, long long
values, or structures, so ask if you need that and someone (maybe me) will help you.
回答2:
Although the answers are sufficient to answer the OP's question, here's an extract covering most cases from DJPP's manpage for completeness:
Return Value
- Integers (of any size up to 32 bits) and pointers are returned in the
%eax
register.- Floating point values are returned in the 387 top-of-stack register,
st(0)
.- Return values of type
long long int
are returned in%edx:%eax
(the most significant word in%edx
and the least significant in%eax
).- Returning a structure is complicated and rarely useful; try to avoid it. (Note that this is different from returning a pointer to a structure.)
If your function returns
void
(e.g. no value), the contents of these registers are not used.
回答3:
It depends on the platform and the calling convention, but usually, the return value should already be returned in eax
if it's a primitive type or pointer and in the floating point register st(0)
if it's a floating point type, I think.
来源:https://stackoverflow.com/questions/6171172/return-value-of-a-c-function-to-asm