windows汇编之max

该代码段展示了一个用C语言编写的函数`max`,它接收两个整数指针作为参数,如果第一个数小于第二个数,则将第二个数的值赋给第一个数。在`main`函数中,`max`被用来找到并更新变量`a`和`b`中的最大值,然后打印结果。汇编代码部分展示了函数调用和参数传递的底层过程。
摘要由CSDN通过智能技术生成

#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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值