xiaohaituan 发表于 2017-11-22 13:42:26

指令

mov sp,10h
mov ax,0123h
mov ds:,ax
call word ptr ds:
执行后为何ip为0123,什么时候赋值ip的?执行call指令的时候不是先push lp吗,那说明应该在执行call指令前就应该赋值ip了啊,

兰陵月 发表于 2017-11-22 19:47:31

IP是指示下一条程序地址的。

看你提问情况,你是不是把IP误认为是SP了?

IP和CS配合。调用CALL指令的时候,先压栈,然后把ds:的值给IP,程序跳转到CS:IP处执行。

DS:的值是0123H,所以IP当然是0123H了。

兰陵月 发表于 2017-11-22 19:51:31

执行call指令的时候不是先push lp吗?

没有任何指令可以在后面加IP寄存器,要改变IP寄存器的值,也就是说IP寄存器是不会出现在你编写的源程序里面的。

只有那些隐式指令才可以,比如类似jmp之类的强制或者条件跳转指令、比如CALL,比如ret,iret等等。

xiaohaituan 发表于 2017-11-22 21:43:14

兰陵月 发表于 2017-11-22 19:47
IP是指示下一条程序地址的。

看你提问情况,你是不是把IP误认为是SP了?


是否可以理解为压入的是下一条指令的ip,而值为0123,所以ip为0123?也就是jmp cs,

兰陵月 发表于 2017-11-22 22:48:40

兄弟,你说的完全不是一个方向啊,你仔细看下书上说的咯

压入的是call指令下一条指令的IP地址。要不过程返回时,往哪里去呢,肯定是call的下一条指令。

0123是要跳转去的地方的IP值。
页: [1]
查看完整版本: 指令