+ -
当前位置:首页 → 问答吧 → 短转移指令

短转移指令

时间:2011-03-04

来源:互联网

短转移指令(比如:jmp short 标号)他们编译处理结果 在机器指令中都成了8位偏移;
ip的改变是靠着那8位的偏移;
但ip寄存器是16位,机器指令中的偏移是8位,他们怎么相加的?他们位数不匹配啊

作者: yxinxin1989   发布时间: 2011-03-04

有符号扩展至16位再加,很多指令都有类似情况

作者: Lactoferrin   发布时间: 2011-03-04

所谓短转移,就是从起点到目标点之间字节不许超过128,也即40+指令吧。这范围当然在ip所辖之内。

作者: masmaster   发布时间: 2011-03-04

40+指令是啥

作者: Lactoferrin   发布时间: 2011-03-04

引用 3 楼 lactoferrin 的回复:
40+指令是啥

平均一条指令是3字节

作者: masmaster   发布时间: 2011-03-04

40+是指操作码?

作者: Lactoferrin   发布时间: 2011-03-04

引用楼主 yxinxin1989 的回复:
短转移指令(比如:jmp short 标号)他们编译处理结果 在机器指令中都成了8位偏移;
ip的改变是靠着那8位的偏移;
但ip寄存器是16位,机器指令中的偏移是8位,他们怎么相加的?他们位数不匹配啊

可以说的详细点吗?jmp short 标号这样的指令,2个字节,高字节是偏移,ip要加那8位就一定的先扩展才对啊

作者: yxinxin1989   发布时间: 2011-03-04

是要先扩展

作者: Lactoferrin   发布时间: 2011-03-04

引用 1 楼 lactoferrin 的回复:
有符号扩展至16位再加,很多指令都有类似情况

可以说的详细点吗?jmp short 标号这样的指令,2个字节,高字节是偏移,ip要加那8位就一定的先扩展才对啊

作者: yxinxin1989   发布时间: 2011-03-04

那它扩展到哪呢,偏移已经当成了立即数存在了指令中了啊

作者: yxinxin1989   发布时间: 2011-03-04

cpu读取偏移,然后有符号扩展再和IP相加
比如机器码eb 05
偏移量是8位的05,它就扩展成0005
比如机器码eb F5
偏移量是8位的F5,它就扩展成FFF5

作者: Lactoferrin   发布时间: 2011-03-04

扩展 是在指令缓冲寄存器 进行对吧?

我以前以为,系统处理jmp short 标号,jmp near 标号以及jmp far 标号 以不同的处理方式 有两种目的:一是便于程序的移动,定位;二是减少生成代码的冗余;

现在看来不竟然
cup在对偏移扩展 它就会多用掉一指令周期吧
为什么系统不把jmp short 标号 处理方式统一jmp near 标号的处理方式呢?这样不就不用扩展了?
少花费那一个周期呢

作者: yxinxin1989   发布时间: 2011-03-04