指令
mov sp,10hmov ax,0123h
mov ds:,ax
call word ptr ds:
执行后为何ip为0123,什么时候赋值ip的?执行call指令的时候不是先push lp吗,那说明应该在执行call指令前就应该赋值ip了啊, IP是指示下一条程序地址的。
看你提问情况,你是不是把IP误认为是SP了?
IP和CS配合。调用CALL指令的时候,先压栈,然后把ds:的值给IP,程序跳转到CS:IP处执行。
DS:的值是0123H,所以IP当然是0123H了。 执行call指令的时候不是先push lp吗?
没有任何指令可以在后面加IP寄存器,要改变IP寄存器的值,也就是说IP寄存器是不会出现在你编写的源程序里面的。
只有那些隐式指令才可以,比如类似jmp之类的强制或者条件跳转指令、比如CALL,比如ret,iret等等。 兰陵月 发表于 2017-11-22 19:47
IP是指示下一条程序地址的。
看你提问情况,你是不是把IP误认为是SP了?
是否可以理解为压入的是下一条指令的ip,而值为0123,所以ip为0123?也就是jmp cs, 兄弟,你说的完全不是一个方向啊,你仔细看下书上说的咯
压入的是call指令下一条指令的IP地址。要不过程返回时,往哪里去呢,肯定是call的下一条指令。
0123是要跳转去的地方的IP值。
页:
[1]