如何入门网络安全? 从高中时候开始简单入门,写写辅助,搞搞注入,到现在鹅厂当安全工程师,差不多在安全行业成长了9年,发…
如何学习编译原理? 最近想在工作之余学习编译原理,因为感觉编译器的编写很提高综合技能。大牛们能否给些建议?这样不至于自…
请问大家 汇编语言中 子程序调用指令和跳转指令有什么区别?谢谢 简单点说,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所以说不要只是记一个指令怎么。