chenjingyes 发表于 2013-7-22 11:06:08

关于JMP SHORT 和jimp的区别

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

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

谢谢!!!

Dardy 发表于 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 .






az4121 发表于 2013-7-24 08:04:36

你没有用short/near/far,直接用jmp s ,则由编译器根把S:的位置尽量选用最短的一种。

az4121 发表于 2013-7-24 08:05:28

所以个人写码,最好不用
页: [1]
查看完整版本: 关于JMP SHORT 和jimp的区别