|
|
书中关于JMP指令优化的描述,通常适用于未显式指定跳转类型的隐式跳转。当您明确使用 NEAR PTR 或 FAR PTR 时,编译器会尊重您的选择,不进行优化。
具体来说:
- JMP START ; 隐式跳转,位移在[-128,127]内,优化为短跳转:EB FE
- JMP SHORT START ; 显式短跳转,直接编译为:EB FC
- JMP NEAR PTR START ; 显式近跳转,编译为近跳转格式:E9 F9 FF
- JMP FAR PTR START ; 显式远跳转,编译为远跳转格式:EA 00 00 06 A0
复制代码
短跳转格式为 EB disp(2字节,disp为8位有符号位移)。
近跳转格式为 E9 disp16(3字节,disp16为16位有符号位移)。
远跳转格式为 EA offset segment(5字节,包含完整段地址和偏移量)。
在您的例子中,所有跳转目标都是同一地址,位移计算后确实在短跳转范围内。但显式指定 NEAR PTR 时,编译器会严格按照近跳转格式生成机器码,因此与 EB disp 格式不同。书中说法主要针对隐式跳转的优化场景,实际编程中显式指定跳转类型会覆盖优化行为。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|