汇编JE指令相对跳转超出范围报错求助(Apple1.ASM)
解决汇编JE跳转超出范围的编译错误
问题原因
你的je endgame报错是因为短条件跳转指令的范围限制:je属于x86的短跳转指令,只能跳转到当前指令前后127字节范围内的标签,而endgame标签距离该指令有021Ah字节(约538字节),超出了短跳转的有效范围。
修复方案(通用兼容版)
把原代码中的条件短跳转改成「反向短跳转+无条件长跳转」的组合,避开范围限制:
proc escpressed mov ah,1h int 16h cmp al,27 jne .skip_endgame ; 反向跳转到邻近标签,短跳转范围足够 jmp endgame ; 无条件长跳转,支持跨大距离跳转 .skip_endgame: ret endp escpressed
备选方案(汇编器支持时)
如果你的汇编器(如MASM)支持指定跳转长度,可以直接用近条件跳转指令,替换je endgame为:
je near ptr endgame
这种方式更简洁,但兼容性不如第一种方案,不同汇编器的语法可能略有差异(比如NASM中直接用je endgame会自动识别为近跳转,若范围超出短跳转的话)。
内容的提问来源于stack exchange,提问作者steven FM
相关产品推荐
相关产品推荐

