首页 > 解决方案 > MASM 可以自动跳转扩展错误?

问题描述

masm 中的后续页面指出:如果源文件 8086-80286 程序包含超出 -128 到 +127 字节范围的条件跳转,则汇编器发出 3 级警告并生成 2 条指令(包括无条件跳转)相当于所需的指令。可以通过OPTION LJMPOPTION NOLJMP指令启用和禁用此行为 。

以下代码不执行上述操作:

.8086
OPTION LJMP
.model tiny
.data
mydata db ?
.code
Label1: xor ax,ax
inc ax
db 128 dup (?)
jz Label1
jmp Label1
end

创建的代码如下:

                .8086
                OPTION LJMP
                .model tiny
 0000           .data
                ;Dseg segment byte public
 0000 00            mydata db ?
                ;Dseg ends
                ;assume ds:Dseg
                ;Cseg segment byte public
 0000               .code
 0000  33 C0    Label1:  xor ax,ax
 0002  40                inc ax
 0003  0080 [            dw 128 dup(?)
        0000
       ]
 0103  75 03 E9 FEF8     jz  label1
 0108  E9 FEF5           jmp Label1
                ;Cseg ends
                end

不会产生错误。我预计会出现错误,因为我专门为汇编代码选择了 .8086。请注意,条件跳转的 .386 形式已创建。如果使用 .8086 到 .286,它会创建完全相同的代码。因此,我相信不会产生错误。如果 SHORT 不在指令中,我无法让汇编器为条件跳转生成任何错误消息。这是bug???如何获取发生此错误所需的代码示例?

标签: assemblyx86masmx86-16

解决方案


推荐阅读