永发信息网

汇编的跳转指令

答案:1  悬赏:80  手机版
解决时间 2021-04-02 11:29
汇编的跳转指令
最佳答案
简单点说,call指令在跳转前保存当前指令地址,而jmp一类的指令不保存当前指令的地址。

详细点说:
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 s
push bx
ret

这样就相当于:

jmp s

所以说不要只是记一个指令怎么用,而是要理解一个指令到底是什么原理。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
狮山镇的邮政编码是多少?
怎样区分铜和合金铜
为什么犯过的错误会再犯?求正解。
外籍人员个人税怎么算 外籍人员个人所得税计
基督教歌曲我愿任凭主把我来安排
梦见自己在狂风暴雨中
育儿网里面的妈咪钱包,有知道的吗,我感觉它
梦见有野兽追自己,但是被赶跑了
在主梁与次梁交接时,次梁会有附加箍筋,在广
红米1S电信版支持哪几种运营商的卡,谢谢
群控系统到底该如何选择?
如何正确的教宝宝侧卧
短chu的chu是哪个chu (一声) 1,出 2,初
温差变化大,应该食用的清淡点吗
有哪位了解40cr圆钢的材质的吗?还有卖40cr圆
推荐资讯
求《季鸾文存》pdf
5sing音乐网出道的歌手有没有从来都没有制作
一个人在外租房子,买了一袋10斤大米,不到一
粘结砂浆和抹面胶浆是一种东西吗?
无印良品,星巴克,costa咖啡我要选哪一个兼
佳木斯火车站让带冷湾304弹弓吗我把皮筋拿下
陌陌红包被禁用怎么办?
征途里楚国为什么总是那么强大··
医生护士是不是比一般人活的长?
从丁丁里流出来的透明液体怎么去丁丁流出的透
附近有房子出租吗?推荐一个
水稻翻耕整地多少钱一亩
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?