Объясните, почему происходит ошибка на переходе
Потому что JMP - это абсолютный прыжок, а JE - относительный (relative jump)... А "дальность" относительного прыжка ограничена 127 байтами вперед и 128 байтами назад.
Значит, до метки return больше 128 байт (на 13h, то есть метка - на расстоянии 147 байт от места вызова JE)...
Как исправить?
Может есть какие-то директивы?
Жалко, что нету что-то вроде CASE
Все гениальное - просто. Как я сам не дотумкал?
Я так делал
cmp ...
je return1
...
return1:
jmp return
но твой способ, несомненно, лучше
В начале программы напиши
Dosseg
.jumps
и может прыгать хоть куда ошибки не будет