tiying 发表于 2013-7-3 07:15:00

为什么call能实现近转移书上却说不能短转移?

近转移的范围不是包含了短转移的范围吗?为什么call能实现近转移书上却说不能短转移?
例题中的call指令实现的不都是短转移吗?

Dardy 发表于 2013-7-6 23:24:32

但它们能操作的寄存器是不同的。

tiying 发表于 2013-7-7 01:03:34

Dardy 发表于 2013-7-6 23:24 static/image/common/back.gif
但它们能操作的寄存器是不同的。

call 指令操作寄存器?   只是将cs:ip 压栈吧   涉及什么寄存器了?

Dardy 发表于 2013-7-7 01:52:10

不好意思。
估计是这样的。call 后面的'操作数'只能是16位,而不能是8位,虽然8位所能表示的值,16位也能表示。

tiying 发表于 2013-7-8 04:40:00

Dardy 发表于 2013-7-7 01:52 static/image/common/back.gif
不好意思。
估计是这样的。call 后面的'操作数'只能是16位,而不能是8位,虽然8位所能表示的值,16位也能表 ...

哪条call 指令用到8位内存地址 或者寄存器了?朋友回帖是好习惯 但是还请保留点责任心额也许会给别人误导的 孔子曰 知之为知之 不知为不知 是知也

az4121 发表于 2013-7-8 15:59:27

jmp s=jmp 01
call s   =call 0001
多一个字节
call 后面的'操作数'只能是16位
00应该是编译器自动加的

Dardy 发表于 2013-7-8 16:05:47

tiying 发表于 2013-7-8 04:40 static/image/common/back.gif
哪条call 指令用到8位内存地址 或者寄存器了?朋友回帖是好习惯 但是还请保留点责任心额也许会给别人 ...

我是说不可以用8位的啊。咱也没深仇大恨啊。
短转移的指令编码中,位移量占8位,而近转移中位移量占16位。call的指令编码中位移量的值即便很小,其中的位移量也会被编码成16位。据说指令编码越短,执行速度越快。有错的地方还望不吝指正共同进步。

qiusuo 发表于 2013-7-8 16:35:57

好深奥啊{:1_1:}
页: [1]
查看完整版本: 为什么call能实现近转移书上却说不能短转移?