标号:
mov bp,sp mov ax,[bp +2] mov bx,[bp +4] add ax,bx
ret
我们压入了两个参数,一个Ax,一个Bx,在Call的时候,...,相当于在函数内部就平栈了,这样外部就不用写
add sp,4了,不用自己平栈了
2.由Call 变为函数一步一步来
现在基于上面的原理我们知道如何平衡一个栈了,但是你有没有发现,为什么我们一开始要把...,这个时候栈不光会保存返回地址,还会保存当前CS段寄存器的地址
这样返回的时候 CS:IP返回,但是现在有一个问题,就是我们自己根本就平不了栈,我们把IP拿出来了,给IP,CS段寄存器根本没办法改,这样我们必须同时修改...CS:IP的值才能回到以前的地方,但是现在没办法了,因为你改IP回跳,改CS会跳,必须同时改,弄不了,所以弄一个retf的指令去帮我们去做
注意retf 你也需要平栈,比如我们压入了两个参数,就要 retf...4, retf会默认把栈顶4个字节的数据取出来分别给 ip和CS段寄存器,但是剩下4个字节都是我们的参数,比如自己去释放,让SP的加4到栈底才可以
二丶中断指令
1.什么是中断指令
中断,是有一种改变程序执行顺序的方法