0%

4.3.3-循环语句的机器表示

💡 TIP

相关链接|

使用Jmp

image-20241231161918825

使用 loop

image-20241231162036130

只有ecx具有循环计数器功能,故这里只能使用ecx

理论上,能使用loop指令实现的功能一定能用条件转移指令实现

使用loop指令可能会使代码更清晰简洁

image-20241231162526857

image-20241231170053438

如何切换帧

image-20241231170649856

就是先存一下上一个函数的栈帧基地址,然后当前函数栈帧就是存放上个函数栈帧基地址的位置的下一个地址。

在还原上一层函数栈帧时,只需要取出先前存放的上一层函数基址就可以完成,栈底就是存放基址地址位置的上一位

image-20241231171457007

image-20241231171618596

image-20241231171709522

如何传递参数和返回值

image-20241231172530587

[ebp+8] 是第一个传入参数

[ebp+12]是第二个传入参数

image-20241231172701158

image-20241231172929100

这里箭头位置使用了两行代码

为什么不直接写:

mov [esp+4] , [esp-8] ?

因为x86 指令系统中,指令中的数据不允许两个都同时来自内存,会影响执行效率

💡 TIP

函数调用的返回值,一般都存放在eax寄存器中

image-20241231173826575

image-20241231173646905

总结

image-20241231173847377


(完)