| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm для Windows/Dos > как вывести на экран отриц. число??? |
| Автор: Frekenbok 28.12.2006, 15:27 |
| Привет! У меня такая проблема. Везде замечательно описано, как вывести двоичное число на экран (перевод в ASCII-коды, деление на 10, вывод по одной цифре и пр.). А как вывести отрицательное число??? Вот мой план: Очевидно, знак минус придется выводить "ручками". Но для того, чтобы определить, отрицательное это число или нет, нужно сканировать знаковый бит? А еще что-нибудь нужно учитывать (например, флаг OF или др.)? С помощью какой команды? Единственное, что приходит на ум - bt AX, 15 Затем если число отрицательное, найти его модуль (NEG) и вывести знак '-' и положительное число (это я умею). Теперь обратное действие - ввод отриц. числа с клавиатуры. Если есть знак '-', то получаем из ASCII-числа обычное двоичное и делаем NEG. Ввод выглядит проще, чем вывод. Просто страшно становится от такого длинного алгоритма для такой простой цели. Нельзя ли проще? Прокомментируйте, плиз, мои рассуждения. З.Ы. Код не нужен, нужны идеи З.Ы. 2 . С Новым Годом! |
| Автор: Akina 28.12.2006, 23:36 | ||
Да уж куда проще-то? все более чем элементарно...
|
| Автор: Frekenbok 29.12.2006, 05:34 |
Элементарно, это да. Хотелось покороче алгоритм, но, видимо, с асмом не получится короче Так что, мой план единственно верный? Других идей больше нет? |
| Автор: W4FhLF 29.12.2006, 08:59 |
| > (2^n-1)/2 - отрицательное; < - положительное. Где n - показатель разрядности системы под которую ты пишешь. В памяти ведь никакого деления на отрицательные и положительные нет, оно лишь условно. PS http://hunger.ru/articles/num |
| Автор: Frekenbok 29.12.2006, 16:46 |
| W4FhLF, спасибо за ссылку, ты опередил мой вопрос про вещественные числа. Но вычислять такую формулу в асме гораздо длиннее, чем просто отсканировать знаковый бит и отсюда плясать... |
| Автор: W4FhLF 29.12.2006, 19:52 | ||||
| Да ты не смотри на формулу, я для универсальности её привёл. Суть в том, что если число > 7FFFFFFF(для 32х разрядных систем) и > 7FFFF для 16ти разрядных, значит оно отрицательное в знакомо представлении. Допустим надо тебе найти знаковое представление значения B345DFA4h. Твои действия:
Теперь в eax знаковое значение числа B345DFA4h Можно проще:
|
| Автор: 10110111 6.1.2007, 19:58 |
| Самое простое - это test reg,reg => js Negative, где reg - любой регистр |
| Автор: W4FhLF 7.1.2007, 10:19 |
| Frekenbok, ну я просто не знал твоей задачи изначально, тогда так, как ты показал и делай. Угу, очепятка |
| Автор: MAKCim 7.1.2007, 10:32 | ||
|
| Автор: Frekenbok 7.1.2007, 10:37 | ||
10110111, спасибо!
Вот это хорошая идея! Действительно, очень просто, даже проще, чем использовать bt. А про переход js вообще не знала, как-то не приходилось пользоваться, их столько - этих переходов! |
| Автор: 10110111 19.1.2007, 23:13 | ||
Да, именно так |
| Автор: Frekenbok 21.1.2007, 09:10 |
| Спасибо всем. |