鱼C论坛

 找回密码
 立即注册
查看: 2557|回复: 3

关于JMP SHORT 和jimp的区别

[复制链接]
发表于 2013-7-22 11:06:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请教 各位大侠   JMP SHORT 004023F4   和  jmp 004023F4  这两句的区别是什么

还有把  JMP SHORT 004023F4的指令 直接改成  JMP 004023F4  会有什么影响??

谢谢!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-7-22 21:14:16 | 显示全部楼层
写了写,发觉全说一遍,相当于把书抄一遍,删除已写的,下面仅简单说一下,需要你自己去看书。
你给出的两个写法都报错的。
S: nop
...
jmp S

S一般由编译器算出一个值填充上去,而不是自己在代码中给出。
你用了short/near/far ,后面就只能用标号,像JMP SHORT 004023F4 就是错的。

short/near/far 这3种跳转方式生成的机器指令长度(格式)是不一样的。

你没有用short/near/far,直接用jmp s ,则由编译器根把S:的位置尽量选用最短的一种。
你使用了short/near/far,则指定了编译器生成哪一种格式的机器机令。
对于前者有可能会产生几条无用指令,而后者可以生成最精简的指令(如果自己根据S:的位置,选用最佳的一种方式则最精简,选用的不是最佳的也不会是最精简的,而选用错了,则报错)。

short/near/far 这些是伪指令,由编译器处理。
JMP 004023F4 像这种后面直接跟一个具体值,在我的模拟器里,这个值只能是偏移量,而这004023F4h超出了偏移量的范围,不报错,但被强制转换为00h再编译。

jmp 后面的操作数不一定是偏移量,详见 far .






想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-24 08:04:36 | 显示全部楼层
你没有用short/near/far,直接用jmp s ,则由编译器根把S:的位置尽量选用最短的一种。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-24 08:05:28 | 显示全部楼层
所以个人写码,最好不用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 16:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表