MASM может автоматизировать расширение прыжка с ошибками? - PullRequest
0 голосов
/ 19 февраля 2019

Следующая страница в masm гласит следующее: Если исходный файл программы 8086-80286 содержит условный переход за пределы диапазона от -128 до +127 байт, ассемблер генерирует предупреждение уровня 3 и генерирует 2 инструкции (включая безусловнуюпрыжок), которые являются эквивалентом желаемой инструкции.Это поведение может быть включено и отключено директивами OPTION LJMP и OPTION 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.Это ошибка ???Как получить пример кода, необходимого для возникновения этой ошибки?

...