[学习笔记]用汇编语言编写一个函数 实现两个数相加

C函数:

int add(int nNumA, int nNumB)
{
	return nNumA + nNumB;
}

int _tmain(int argc, _TCHAR* argv[])
{
	
	add(3, 4);

	system("pause");
	return 0;
}

汇编语言实现:


执行过程:

执行前栈状态:

首先执行 push 0x4

push 0x3

执行后栈中内容

再执行 call 00415FD7 (调用函数,并将返回地址入栈)

执行后栈中内容

其中 00415FFA为返回地址

再执行 push ebp (将ebp入栈,保存其内容)

执行后栈中内容

再执行 mov     ebp,esp

sub     esp,0xC (esp减12,开辟栈空间(大小按需))

执行后栈中内容

再执行 xor     eax,eax

add     eax,dword ptr ss:[ebp+0x8]

add     eax,dword ptr ss:[ebp+0xC]

此时运算结束,结果7保存在eax中

再执行 mov     esp,ebp (释放掉之前开辟的空间)

执行后栈中内容

再执行 pop     ebp (恢复ebp)

执行后栈中内容

再执行 retn    0x8 (按照栈中的返回地址返回,并将esp加8)

执行后栈中内容

至此,运算完成,运算结果7保存在eax中,同时EIP指向之前保存的返回地址(00415FFA

执行后栈状态:

并且栈、ebp、esp都已恢复到运算前的状态,保持了栈的平衡





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值