Следующая страница в 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.Это ошибка ???Как получить пример кода, необходимого для возникновения этой ошибки?