绝世公子 发表于 2013-9-15 21:17:19

“call word ptr 内存单元地址”问题

本帖最后由 绝世公子 于 2013-9-15 21:18 编辑

如图,哪位大神能解释一下这个程序(主要解释一下:call word ptr ds:)求ax的值?麻烦详细点,谢谢

tsembrace 发表于 2013-9-15 23:02:20

ds设为栈的对应段地址,call word ptr ds:等同于下面两句
push ip                              ;此时ip为call下一句,即inc ax的入口地址,入栈即将其存入ss:
jmp word ptr ds:         ;(ip)=ds:=ss:
所以执行完call后CPU还是指向call的下一句即inc ax
执行完毕(ax)=3

绝世公子 发表于 2013-9-16 08:53:16

tsembrace 发表于 2013-9-15 23:02 static/image/common/back.gif
ds设为栈的对应段地址,call word ptr ds:等同于下面两句
push ip                              ;此 ...
call下一句的ip不是17H么:loveliness:

tsembrace 发表于 2013-9-16 08:57:09

绝世公子 发表于 2013-9-16 08:53 static/image/common/back.gif
call下一句的ip不是17H么

跟ip具体值是多少没关系,不管是多少,都指向call下一句

绝世公子 发表于 2013-9-16 11:59:41

tsembrace 发表于 2013-9-16 08:57 static/image/common/back.gif
跟ip具体值是多少没关系,不管是多少,都指向call下一句

我的意思是,执行call后,(ip)=ds:=ss:,,但是,ss:的地址是哪句?也就是说执行call后,cs:ip指向哪了?

tsembrace 发表于 2013-9-16 12:53:11

绝世公子 发表于 2013-9-16 11:59 static/image/common/back.gif
我的意思是,执行call后,(ip)=ds:=ss:,,但是,ss:的地址是哪句?也就是说执行call后, ...

指向call后面的inc ax啊
我2楼说得那么清楚,你不看的么
还是我没看懂你的问题??

绝世公子 发表于 2013-9-16 18:15:22

tsembrace 发表于 2013-9-16 12:53 static/image/common/back.gif
指向call后面的inc ax啊
我2楼说得那么清楚,你不看的么
还是我没看懂你的问题??

看了,我在3楼不是也说了么、、call下一句的ip不是17H么????我就是不能理解为什么inc ax的ip是ss:

tsembrace 发表于 2013-9-16 22:27:32

绝世公子 发表于 2013-9-16 18:15 static/image/common/back.gif
看了,我在3楼不是也说了么、、call下一句的ip不是17H么????我就是不能理解为什么inc ax的ip是ss:

我只能说到2楼这么明白了,你还不明白,只能建议看书,了解下call word ptr的含义
为什么inc ax的ip是ss:?
只因为call的时候先把inc ax的ip压入栈,即存放到ss:中了

青玄 发表于 2013-9-30 22:58:20


如图所示,AX里面是栈段的内容,MOV DS,AX是把栈段地址放到DS里面,call word ptr ds:是这样的,首先000E=0E07,也就是说在这个指令没执行之前DS:000E这个位置的数据是0E07,而在这个指令执行之后0E07这个数据就跑到DS:000C这个位置去了,而这时DS:000E这个位置的数据就变了,我想这个指令时把DS:000E的数据向前移了一个字的单位。

青玄 发表于 2013-9-30 23:21:18

哦,我知道了,这个指令也就是执行了两步操作,也就是把IP的地址入栈到SP=000E处,再把IP的地址放到DS:000E处
页: [1]
查看完整版本: “call word ptr 内存单元地址”问题