ZKX's LAB

请问大家 汇编语言中 子程序调用指令和跳转指令有什么区别?谢谢 汇编子程序调用返回原理

2021-04-08知识10

在ARM汇编语言编程中如何进行子程序调用及其返回?请分情况举例解释 在 ARM 汇编语言程序中,子程序的调用一般是通过 BL 指令来实现的。在程序中,使用指令:BL 子程序名 。

汇编题:如何用一条语句实现从子程序返回调用程序 子程序返回调用程序,用(RET)指令完成。

请问大家 汇编语言中 子程序调用指令和跳转指令有什么区别?谢谢 简单点说,call指令在跳转前保存2113当5261前指令地址,而jmp一类的指令不保存当前指4102令的地址。1653详细点说:call指令在跳转前会在栈中保存当前的程序计数器(IP)的值(有必要的话还要保存CS),保存完IP的值后,再去执行跳转指令。即相当于:push CS(没有这种指令,有没有这一句还要看调用的类型:far/near)push IP(没有这种指令)jmp[word ptr/dword ptr].这样,程序在执行ret/retf指令时就能从栈中取出IP的值,即相当于:pop IP(没有这种指令)pop CS(没有这种指令,有没有这一句也要看调用的类型)来继续执行call指令后的其他指令,当然你也可以选择不执行ret,而把call当做jmp来用。这样也没有问题(没人这么干),只不过栈里多了点东西罢了,记得处理就好。而形如jmp一类的指令只是简单的执行跳转(修改IP的值),并不保存IP的值。当然跳转后程序也就不知道原来是从哪里跳转到这里来的,自然就无法返回。当然,这个时候ret指令还是可以用的,因为ret指令只是简单的从栈顶取出一个word然后赋给IP,所以也可以用ret指令来实现jmp的功能(也没人这么干)。如:mov bx,offset spush bxret这样就相当于:jmp s所以说不要只是记一个指令怎么。

#汇编子程序调用返回原理#汇编返回地址

随机阅读

qrcode
访问手机版