#include <stdio.h>
void max(int *a, int *b);
void main()
{
int a = 5, b = 6;
max(&a, &b);
printf("max = %d\n", a);
}
void max(int *a, int *b)
{
if (*a < *b)
*a = *b;
}
asm:
sub esp, 00000008 ; 为局部变量分配内存
lea eax, dword ptr [esp+04] ; eax指向变量
lea ecx, dword ptr [esp] ; ecx指向变量
push eax ; 指向参数b的字符指针入栈
push ecx ; 指向参数a的字符指针入栈
mov [esp+08], 00000005 ; 将参数a的值放入
mov [esp+0C], 00000006 ; 将参数b的值放入
call 00401040 ; max(&a, &b)
mov edx, [esp+08] ; 利用变量[esp+08]返回函数值
push edx
push 00407030
call 00401060 ; printf
xor eax, eax
add esp, 18
retn
; 00401040:max(&a, &b)
mov eax, dword ptr [esp+08] ; 执行后,eax就是指向参数b的指针
mov ecx, dword ptr [esp+04] ; 执行后,ecx就是指向参数a的指针
mov eax, dword ptr [eax] ; 将参数b的值加载到eax中
mov edx, dword ptr [ecx] ; 将参数a的值加载到edx中
cmp edx, eax ; 比较参数a和b的大小
jge 00401052 ; 若a<b,则不跳转
mov dword ptr [ecx], eax ; 将较大的值放到参数a所指的数据区中
ret