|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
02.05.2009, 22:35 | #1 |
Форумчанин
Регистрация: 28.04.2009
Сообщений: 186
|
Распознование знаковых чисел
Начал изучать сей прекрасный язык.
Только, мне кажется некоторые вещи в книге как-то косно описаны. К примеру, как задаются отрицательные числа. Допустим, у нас есть байт. Сначала в книге сказано, что для того чтобы дать понять, что число знаковое надо обратить внимание на старший бит. Если 0 - то положительное, 1 - то отрицательное. Однако, сразу в следующем абзаце говорится, что все-таки отрицательное число записывается в некоем дополниетельном коде к соответсвующему положительному методом инвертирования единиц и нулей и прибавления 1. Так все-таки остается непонятным, каким образом в памяти хранится число -4. П.С. распознАвание...
Ruft ihm es zu durch alle Land', Der durch dies Wunder Gnade fand!
Hoch uber aller Welt ist Gott, Und Sein Erbarmen ist kein Spott |
02.05.2009, 23:03 | #2 |
Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,405
|
Возьмём для простоты число в один байт. -4==
11111100 дополнительный код очень облегчает операции с отрицательными числами. К примеру рассмотрим такую арифм. Операцию -4+2=-2 Сложим это дело логическим побитовым OR 11111100 (-4) 00000010 (2) ---------- 11111110 (-2)
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------ Страничка с моими программками http://ulex-masm.ru |
02.05.2009, 23:08 | #3 |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
|
02.05.2009, 23:13 | #4 | |
Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,405
|
Цитата:
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------ Страничка с моими программками http://ulex-masm.ru |
|
02.05.2009, 23:25 | #5 |
Форумчанин
Регистрация: 09.03.2008
Сообщений: 127
|
Число -4 будет выглядеть так: 1111 1100 это в дополнительном коде.
Как было сказано все отрицательные числа хранятся в дополнительном коде, а положительные в прямом. Дополительным он называется потому что дополняет до полного числа в соответствии с размерностью, тоесть: 4 в прямом коде (размерностью байт) - 0000 0100 1 байт = 1111 1111 теперь -4 в дополнительном: в одном байте можно закодировать 256 значений, и из этого следует, что до 4 нужно добавить 252 тогда -4 = 252 = 1111 1100 или же по правилу перевода в допКод(как уже было сказано): 4 = 0000 0100 инвертируем и прибавляем 1: 1111 1011+1 = 1111 1100 распознать какое число: за знак числа отвечает флаг SF (signal flag) SF=1 отрицательное SF=0 положительное Програмно же можно узнать так: допустим в al некое число cmp al,0 js otrecatelnoe ;сюда перейдет если число положительно otrecatelnoe: ;сюда перейдет если число отрецательно Команда cmp отнимает от первого операнда второй результат не сохраняется, а только влияет на регистр флагов eflags где SF шестой бит тоесть: если al=-4 -4-0=-4 поднимается флаг SF так как результат отрицателен а команда js передает управление на метку если SF=1 или передает управление на следующую строку после js если SF=0 А вообще только программист знает какое это число, поскольку 1111 1100 = -4 = 252 Последний раз редактировалось |{ot; 02.05.2009 в 23:41. |
03.05.2009, 01:40 | #6 |
Форумчанин
Регистрация: 28.04.2009
Сообщений: 186
|
Громадное спасибо. Хотя про cmp я, конечно, не понял потому что пока еще не дошел до команд.
Но, если только программист знает какое это число, то как же компьютер понимает потом и на экран выводит положительное или отрицательное число. Как он понимает нужно взять знаковое число или беззнаковое?
Ruft ihm es zu durch alle Land', Der durch dies Wunder Gnade fand!
Hoch uber aller Welt ist Gott, Und Sein Erbarmen ist kein Spott |
03.05.2009, 01:52 | #7 | |
equ asm
Участник клуба
Регистрация: 02.05.2009
Сообщений: 1,605
|
Цитата:
Просто перед тем, как вывести число на экран нужно сначала его преобразовать в строку символов. Напр. число "252" это строка 0x32 0x35 0x32 А "-4" это 0x2d 0x34
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4 Последний раз редактировалось Goodwin98; 03.05.2009 в 01:58. |
|
03.05.2009, 02:26 | #8 |
Форумчанин
Регистрация: 28.04.2009
Сообщений: 186
|
Я и не думал, что такие смышленные люди создавали компьютеры. Спасибо. Теперь все встало на свои места.
Ruft ihm es zu durch alle Land', Der durch dies Wunder Gnade fand!
Hoch uber aller Welt ist Gott, Und Sein Erbarmen ist kein Spott |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ассемблер - сумму элементов массива однобайтных знаковых чисел | bum90 | Помощь студентам | 2 | 28.04.2009 19:13 |
Распознование пятен | Yusya | Помощь студентам | 1 | 04.03.2009 16:27 |
Распознование текста! | Рустам | Общие вопросы Delphi | 3 | 21.11.2007 18:10 |
распознование фрагментов изображения | AlexandrL | Помощь студентам | 6 | 17.04.2007 08:44 |