Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ассемблер _ Условный переход

Автор: CMOS 21.05.2006 18:42

Объясните, почему происходит ошибка на переходе

Код
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 21.05.2006 19:13

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

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

smile.gif

Автор: CMOS 22.05.2006 0:41

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

Жалко, что нету что-то вроде CASE

Автор: Malice 22.05.2006 1:43

Цитата(CMOS @ 21.05.2006 21:41) *

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

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

используй
Код
Jne @1
jmp Return
@1: ..

Автор: CMOS 27.05.2006 0:10

Все гениальное - просто. Как я сам не дотумкал?
Я так делал
cmp ...
je return1
...


return1:
jmp return

но твой способ, несомненно, лучше

Автор: Гость 20.10.2006 15:09

В начале программы напиши
Dosseg
.jumps
и может прыгать хоть куда ошибки не будет