Push 发表于 2012-1-25 22:40:27

call far ptr问题

本帖最后由 Push 于 2012-1-25 22:42 编辑

为什么ax会是1010?不是1006??求详细解答
难道call far ptr不是执行了push cs,push ip,jmp far ptr???
那如果这么指行的话call far ptr s的cs:1000,ip:3
把cs先扔进栈,后扔ip,那么到了s:pop ax这个时候应该是ip先出来,所以ax=3,接着执行add ax,ax=6接着pop bx,现在
bx=1000,然后执行add ax,bx那么不就是ax=1006???????
求大神解答...在线等答案
内存地址    机器码                         汇编指令
1000:0      b8 00 00                      mov ax,0
1000:3      9a 09 00 00 10            call far ptr s
1000:8      40                              inc ax
1000:9      58                           s:pop ax
                                                   add ax,ax
                                                   pop bx
                                                   add ax,bx

rainymay 发表于 2012-1-25 22:40:28

本帖最后由 rainymay 于 2012-1-27 04:20 编辑

因为执行指令先要读入到指令缓冲区中,读进去以后IP已经指向下一条指令了。所以为8,add ax,ax 就是10H了

独立日 发表于 2012-1-27 11:36:33

楼上正解,入栈IP=8.不是3,IP指的是CALL完后的下一条指令。还有这个帖子貌似和以前的一个一样

雨过天晴 发表于 2012-1-27 12:25:02

楼上正解:loveliness:

bafengao 发表于 2012-1-27 14:15:57

谢谢了 学习

e马先森 发表于 2017-2-17 18:40:50

学习啦哈哈哈
页: [1]
查看完整版本: call far ptr问题