#include <stdio.h> int add(int a, int b) { return a + b; } int asm_compare_one(int a) { _asm { mov edx, a cmp edx, 1 je val1 xor eax,eax jmp val0 val1: mov eax, 1 val0: } //eax中存放返回值 } int main() { int a, b; scanf("%d %d", &a, &b); printf("%d\n", add(a, b)); printf("%d\n", add(a + b, b)); printf("%d\n", asm_compare_one(a)); return 0; }
用IDA反汇编如下;
看到了吧,调用printf函数前,是push eax,所以C语言的函数返回值,存放在eax中。环境是32位的。
如果是64位,那么就是存放在eax和edx中了,高位在edx,低位在eax。