Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Попадение числа в диапазон -32728 - +32727, Трудности в реализации 
V
    Опции темы
Ground
Дата 5.6.2010, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 321
Регистрация: 27.2.2006
Где: Комсомольск

Репутация: нет
Всего: 1



Добрый день! Подскажите как отследить попадание числа в диапазон -32728 - +32727? В bx число, записанное в естественной форме. В sign - знак для этого числа. Если sign=1, то число проверяется до 32768, если sign=0, то до 32767.
Код

check_overflow:
    cmp sign, 1 ;1 - отрицательное, 0 - положительное
    je enter_number_check_neg
    jne enter_number_check_pos
enter_number_check_neg:
    cmp bx, 32768
    jg overflow
    jmp exit
enter_number_check_pos:
    cmp bx, 32767
    jg overflow
    jmp exit

Но не работает. Аналогично пробовал через SF, но безрезультатно. Такое впечатление, что cmp сравнивает без старшего бита.

Это сообщение отредактировал(а) Ground - 5.6.2010, 11:18
PM MAIL ICQ   Вверх
iff
Дата 5.6.2010, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 5
Всего: 16



Код

check_overflow:
    cmp sign, 1 ;1 - отрицательное, 0 - положительное
    je enter_number_check_neg
    jne enter_number_check_pos
enter_number_check_neg:
    cmp bx, 32768
    ja overflow
    jmp exit
enter_number_check_pos:
    cmp bx, 32767
    ja overflow
    jmp exit



--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
Mikl_
Дата 7.6.2010, 03:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: 6
Всего: 14



Ground, 
можно и проще, чтобы отследить попадание числа в диапазон -32728 - +32727 добавьте к числу 32728 и сравните с числом 65455 если ja то вне диаппазона smile 
Код
mov ax,bx; чтобы не портить число в BX
add ax,32728
cmp ax,65455
ja overflow; сюда попадут и те что меньше -32728 и те что больше +32727

PM MAIL   Вверх
iff
Дата 7.6.2010, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 5
Всего: 16



Код

cmp bx, 32727
ja overflow

Вот и всё.

Это сообщение отредактировал(а) iff - 7.6.2010, 11:08


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
Mikl_
Дата 7.6.2010, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: 6
Всего: 14



iff, 
Вы не правы cmp bx, 32727/ja overflow сюда попадут и просто отрицательные числа, а по условию диаппазон -32728 - +32727 smile 
PM MAIL   Вверх
iff
Дата 7.6.2010, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 5
Всего: 16



Я так понял само число беззнаковое, а его знак хранится в некой переменной sign:
Цитата(Ground @  5.6.2010,  11:18 Найти цитируемый пост)
записанное в естественной форме. В sign - знак для этого числа.

Если бы число в bx было знаковым, то тгда работал бы код, данный в самом первом посте.
Когда автор для условного перехода использовал инструкцию jg (которая работает со знаковыми числами), то сказал:
Цитата(Ground @  5.6.2010,  11:18 Найти цитируемый пост)
Такое впечатление, что cmp сравнивает без старшего бита.

Это говорит о том что в bx беззнаковое число.


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
Mikl_
Дата 8.6.2010, 02:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: 6
Всего: 14



iff, 
извините, я не внимательно прочитал условие
Цитата(Ground)
В bx число, записанное в естественной форме. В sign - знак для этого числа.

не в дополнительном коде, а в естественной форме, т.е. знак отдельно, а модуль числа отдельно, 

Это сообщение отредактировал(а) Mikl_ - 8.6.2010, 02:51
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0531 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.