Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

jmp слетае прога, а jz выдает ошибку

34K
05 февраля 2008 года
AsmBeginer
8 / / 28.01.2008
Я написал программку, которая должна двигать квадрат по экрану, но почему-то не рабтает. Когда ловлю символ от клавиатуры, чтоб перейти по условию, при написании jmp, прога слетает, при написании jz, выдается ошибка "Relative jump out of range by 003Fh bytes"
Код:
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

Почему так? Я пишу в WinAsm 2.0, может по этому?
1.6K
05 февраля 2008 года
Vov4ick
476 / / 01.02.2007
Ассемблер - не си, от транслятора поведение программ не зависит.
Если бы ты перевёл сообщение на русский, получилось бы "превышение максимальной длины относительного перехода". Процессоры 8086-80286 знают только относительные условные переходы. Относительные переходы могут прыгать на +-127 байт. Есть два варианта автоматического выхода из ситуации. Первый - использование директивы JUMPS. В этом случае ассемблер будет автоматически генерить конструкции такого вида
 
Код:
...
         J<условие, обратному заданному>         label
         JMP (near, far)                         <заданная метка>
label:
         ...

Второй вариант - использование инструкций процессора 386, среди которых появились ближние условные переходы.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог