IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

> Условный переход, В чем ошибка?
CMOS
сообщение 21.05.2006 14:42
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 57
Пол: Мужской

Репутация: -  0  +


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

Код
mov ax, 3
int 33h

push bx
cmp    bx, but
je return

Relative jump out fo range by 0013h bytes

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

Код
...
int 10h
jmp return
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 5)
volvo
сообщение 21.05.2006 15:13
Сообщение #2


Гость






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

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

smile.gif
 К началу страницы 
+ Ответить 
CMOS
сообщение 21.05.2006 20:41
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 57
Пол: Мужской

Репутация: -  0  +


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

Жалко, что нету что-то вроде CASE
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Malice
сообщение 21.05.2006 21:43
Сообщение #4


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


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

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

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

используй
Код
Jne @1
jmp Return
@1: ..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
CMOS
сообщение 26.05.2006 20:10
Сообщение #5


Пионер
**

Группа: Пользователи
Сообщений: 57
Пол: Мужской

Репутация: -  0  +


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


return1:
jmp return

но твой способ, несомненно, лучше
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 20.10.2006 11:09
Сообщение #6


Гость






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

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 19.06.2025 10:59
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"