Помощь - Поиск - Пользователи - Календарь
Полная версия: Условный переход
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ассемблер
CMOS
Объясните, почему происходит ошибка на переходе

Код
mov ax, 3
int 33h

push bx
cmp    bx, but
je return

Relative jump out fo range by 0013h bytes

На любую другую метку переходит нормально
В других местах программы переход на эту метку тоже проходит

Код
...
int 10h
jmp return
volvo
Потому что JMP - это абсолютный прыжок, а JE - относительный (relative jump)... А "дальность" относительного прыжка ограничена 127 байтами вперед и 128 байтами назад.

Значит, до метки return больше 128 байт (на 13h, то есть метка - на расстоянии 147 байт от места вызова JE)...

smile.gif
CMOS
Как исправить?
Может есть какие-то директивы?

Жалко, что нету что-то вроде CASE
Malice
Цитата(CMOS @ 21.05.2006 21:41) *

Как исправить?

вместо конструкции
Код
Je return

используй
Код
Jne @1
jmp Return
@1: ..
CMOS
Все гениальное - просто. Как я сам не дотумкал?
Я так делал
cmp ...
je return1
...


return1:
jmp return

но твой способ, несомненно, лучше
Гость
В начале программы напиши
Dosseg
.jumps
и может прыгать хоть куда ошибки не будет
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.