key:
mov ah,7
int 21h
cmp al,27
jz quit
test al,al
jz key
int 21h
cmp al,50h
jz key_down
cmp al,48h
jz key_up
jle key
jmp слетае прога, а jz выдает ошибку
Я написал программку, которая должна двигать квадрат по экрану, но почему-то не рабтает. Когда ловлю символ от клавиатуры, чтоб перейти по условию, при написании jmp, прога слетает, при написании jz, выдается ошибка "Relative jump out of range by 003Fh bytes"
Если бы ты перевёл сообщение на русский, получилось бы "превышение максимальной длины относительного перехода". Процессоры 8086-80286 знают только относительные условные переходы. Относительные переходы могут прыгать на +-127 байт. Есть два варианта автоматического выхода из ситуации. Первый - использование директивы JUMPS. В этом случае ассемблер будет автоматически генерить конструкции такого вида
Код:
...
J<условие, обратному заданному> label
JMP (near, far) <заданная метка>
label:
...
J<условие, обратному заданному> label
JMP (near, far) <заданная метка>
label:
...
Второй вариант - использование инструкций процессора 386, среди которых появились ближние условные переходы.