![]() |
|
![]() ![]() ![]() |
|
Frekenbok |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 29.10.2006 Репутация: нет Всего: 1 |
Привет!
У меня такая проблема. Везде замечательно описано, как вывести двоичное число на экран (перевод в ASCII-коды, деление на 10, вывод по одной цифре и пр.). А как вывести отрицательное число??? Вот мой план: Очевидно, знак минус придется выводить "ручками". Но для того, чтобы определить, отрицательное это число или нет, нужно сканировать знаковый бит? А еще что-нибудь нужно учитывать (например, флаг OF или др.)? С помощью какой команды? Единственное, что приходит на ум - bt AX, 15 Затем если число отрицательное, найти его модуль (NEG) и вывести знак '-' и положительное число (это я умею). Теперь обратное действие - ввод отриц. числа с клавиатуры. Если есть знак '-', то получаем из ASCII-числа обычное двоичное и делаем NEG. Ввод выглядит проще, чем вывод. Просто страшно становится от такого длинного алгоритма для такой простой цели. Нельзя ли проще? Прокомментируйте, плиз, мои рассуждения. З.Ы. Код не нужен, нужны идеи ![]() З.Ы. 2 . С Новым Годом! |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 1 Всего: 454 |
Да уж куда проще-то? все более чем элементарно...
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Frekenbok |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 29.10.2006 Репутация: нет Всего: 1 |
||||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 1 Всего: 121 |
> (2^n-1)/2 - отрицательное; < - положительное.
Где n - показатель разрядности системы под которую ты пишешь. В памяти ведь никакого деления на отрицательные и положительные нет, оно лишь условно. PS http://hunger.ru/articles/num -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
Frekenbok |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 29.10.2006 Репутация: нет Всего: 1 |
W4FhLF, спасибо за ссылку, ты опередил мой вопрос про вещественные числа. Но вычислять такую формулу в асме гораздо длиннее, чем просто отсканировать знаковый бит и отсюда плясать...
![]() |
|||
|
||||
W4FhLF |
|
||||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 1 Всего: 121 |
Да ты не смотри на формулу, я для универсальности её привёл. Суть в том, что если число > 7FFFFFFF(для 32х разрядных систем) и > 7FFFF для 16ти разрядных, значит оно отрицательное в знакомо представлении.
Допустим надо тебе найти знаковое представление значения B345DFA4h. Твои действия:
Теперь в eax знаковое значение числа B345DFA4h Можно проще:
Это сообщение отредактировал(а) W4FhLF - 29.12.2006, 20:04 -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
||||
|
|||||
Frekenbok |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 29.10.2006 Репутация: нет Всего: 1 |
W4FhLF, похоже, ты мне просто предлагаешь поменять знак числа. А мне нужно вот что. В результате вычислений у меня в регистре АХ получилось какое-то число. Заранее известно, что я оперирую знаковыми числами. Нужно определить, какое это число - положительное или отрицательное.
Если пользоваться твоим утверждением, что ...
тогда код скорее всего будет похож на это:
Кстати, по-моему, 7FFFh, а не 7FFFFh. Или нет? ![]() |
||||
|
|||||
10110111 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 28.8.2006 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
Самое простое - это test reg,reg => js Negative, где reg - любой регистр
|
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 1 Всего: 121 |
Frekenbok, ну я просто не знал твоей задачи изначально, тогда так, как ты показал и делай.
Угу, очепятка ![]() -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: нет Всего: 207 |
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
Frekenbok |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 29.10.2006 Репутация: нет Всего: 1 |
10110111, спасибо!
Вот это хорошая идея! Действительно, очень просто, даже проще, чем использовать bt. А про переход js вообще не знала, как-то не приходилось пользоваться, их столько - этих переходов! ![]() |
|||
|
||||
10110111 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 28.8.2006 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
Да, именно так |
|||
|
||||
Frekenbok |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 29.10.2006 Репутация: нет Всего: 1 |
Спасибо всем.
![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Asm для Windows/DOS" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm для Windows/Dos | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |