Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как вывести на экран отриц. число??? сканировать знаковый бит? 
V
    Опции темы
Frekenbok
Дата 28.12.2006, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Привет!
У меня такая проблема. Везде замечательно описано, как вывести двоичное число на экран (перевод в ASCII-коды, деление на 10, вывод по одной цифре и пр.). А как вывести отрицательное число???
Вот мой план:
Очевидно, знак минус придется выводить "ручками".
Но для того, чтобы определить, отрицательное это число или нет, нужно сканировать знаковый бит? А еще что-нибудь нужно учитывать (например, флаг OF или др.)? С помощью какой команды? Единственное, что приходит на ум - bt AX, 15
Затем если число отрицательное, найти его модуль (NEG) и вывести знак '-' и положительное число (это я умею).
Теперь обратное действие - ввод отриц. числа с клавиатуры.
Если есть знак '-', то получаем из ASCII-числа обычное двоичное и делаем NEG. Ввод выглядит проще, чем вывод.
Просто страшно становится от такого длинного алгоритма для такой простой цели. Нельзя ли проще? Прокомментируйте, плиз, мои рассуждения. 
З.Ы. Код не нужен, нужны идеи  smile 
З.Ы. 2 . С Новым Годом!
PM MAIL   Вверх
Akina
Дата 28.12.2006, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Цитата(Frekenbok @  28.12.2006,  16:27 Найти цитируемый пост)
Нельзя ли проще?

Да уж куда проще-то? все более чем элементарно...

Цитата(Frekenbok @  28.12.2006,  16:27 Найти цитируемый пост)
Единственное, что приходит на ум 

Код

test ax, 8000h



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Frekenbok
Дата 29.12.2006, 05:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Akina @  28.12.2006,  23:36 Найти цитируемый пост)
Да уж куда проще-то? все более чем элементарно...

Элементарно, это да. Хотелось покороче алгоритм, но, видимо, с асмом не получится короче  smile 
Так что, мой план единственно верный? Других идей больше нет?
PM MAIL   Вверх
W4FhLF
Дата 29.12.2006, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


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

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



> (2^n-1)/2 - отрицательное; < - положительное. 
Где n - показатель разрядности системы под которую ты пишешь. 
В памяти ведь никакого деления на отрицательные и положительные нет, оно лишь условно. 


PS http://hunger.ru/articles/num


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Frekenbok
Дата 29.12.2006, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



W4FhLF, спасибо за ссылку, ты опередил мой вопрос про вещественные числа. Но вычислять такую формулу в асме гораздо длиннее, чем просто отсканировать знаковый бит и отсюда плясать...  smile 
PM MAIL   Вверх
W4FhLF
Дата 29.12.2006, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


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

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



Да ты не смотри на формулу, я для универсальности её привёл. Суть в том, что если число > 7FFFFFFF(для 32х разрядных систем) и > 7FFFF для 16ти разрядных, значит оно отрицательное в знакомо представлении.

Допустим надо тебе найти знаковое представление значения B345DFA4h. Твои действия:

Код

    mov eax,0FFFFFFFFh
    sub eax, 0B345DFA4h
    inc eax


Теперь в eax знаковое значение числа B345DFA4h

Можно проще:

Код

    mov eax, 0B345DFA4h
    neg eax




Это сообщение отредактировал(а) W4FhLF - 29.12.2006, 20:04


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Frekenbok
Дата 6.1.2007, 07:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



W4FhLF, похоже, ты мне просто предлагаешь поменять знак числа. А мне нужно вот что. В результате вычислений у меня в регистре АХ получилось какое-то число. Заранее известно, что я оперирую знаковыми числами. Нужно определить, какое это число - положительное или отрицательное.
Если пользоваться твоим утверждением, что ...
Цитата(W4FhLF @  29.12.2006,  19:52 Найти цитируемый пост)
если число > 7FFFFFFF(для 32х разрядных систем) и > 7FFFF для 16ти разрядных, значит оно отрицательное в знакомо представлении

тогда код скорее всего будет похож на это:
Код

cmp ax, 7FFFh
ja minus ; переход, если АХ>7FFFh
; действия с положит. числом
...
jmp exit
minus:
; действия с отриц. числом
...
exit:
...

Кстати, по-моему, 7FFFh, а не 7FFFFh. Или нет?  smile 
PM MAIL   Вверх
10110111
Дата 6.1.2007, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Самое простое - это test reg,reg => js Negative, где reg - любой регистр
PM MAIL   Вверх
W4FhLF
Дата 7.1.2007, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


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

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



Frekenbok, ну я просто не знал твоей задачи изначально, тогда так, как ты показал и делай.


Цитата(Frekenbok @  6.1.2007,  07:05 Найти цитируемый пост)
Кстати, по-моему, 7FFFh, а не 7FFFFh. Или нет? 



Угу, очепяткаsmile


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
MAKCim
Дата 7.1.2007, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Код

...
    bt AX, 15
    jc @@L1
; число положительное
@@L1:
; число отрицательное



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Frekenbok
Дата 7.1.2007, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



10110111, спасибо!
Цитата(10110111 @  6.1.2007,  19:58 Найти цитируемый пост)
Самое простое - это test reg,reg => js Negative, где reg - любой регистр 

Вот это хорошая идея! Действительно, очень просто, даже проще, чем использовать bt. А про переход js вообще не знала, как-то не приходилось пользоваться, их столько - этих переходов!  smile Но это как раз то, что нужно, а я тут голову ломаю. Кстати, правильно я понимаю: reg один и тот же? Т.е., например, число лежит в АХ, тогда test AX, AX?
PM MAIL   Вверх
10110111
Дата 19.1.2007, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

Кстати, правильно я понимаю: reg один и тот же? Т.е., например, число лежит в АХ, тогда test AX, AX? 

Да, именно так
PM MAIL   Вверх
Frekenbok
Дата 21.1.2007, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо всем.  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для Windows/DOS"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

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


 




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


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

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