Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 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
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Возьмём для простоты число в один байт. -4==
11111100

дополнительный код очень облегчает операции с отрицательными числами. К примеру рассмотрим такую арифм. Операцию -4+2=-2

Сложим это дело логическим побитовым OR
11111100 (-4)
00000010 (2)
----------
11111110 (-2)
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 02.05.2009, 23:08   #3
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Цитата:
Сообщение от Ulex Посмотреть сообщение
Сложим это дело логическим побитовым OR
11111100 (-4)
00000010 (2)
----------
11111110 (-2)
Только всё-таки, наверное, не ORом складываются они, а сложением с переносом единичек.
Somebody вне форума Ответить с цитированием
Старый 02.05.2009, 23:13   #4
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Цитата:
ORом складываются они, а сложением с переносом единичек.
Ну извиняйте, действительно ляпнул сгоряча. Конечно с переносом.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 02.05.2009, 23:25   #5
|{ot
Форумчанин
 
Аватар для |{ot
 
Регистрация: 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.
|{ot вне форума Ответить с цитированием
Старый 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
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Цитата:
Но, если только программист знает какое это число, то как же компьютер понимает потом и на экран выводит положительное или отрицательное число. Как он понимает нужно взять знаковое число или беззнаковое?
А для этого тоже нужен програмист
Просто перед тем, как вывести число на экран нужно сначала его преобразовать в строку символов.
Напр. число "252" это строка 0x32 0x35 0x32
А "-4" это 0x2d 0x34
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4

Последний раз редактировалось Goodwin98; 03.05.2009 в 01:58.
Goodwin98 вне форума Ответить с цитированием
Старый 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
Парсифаль вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ассемблер - сумму элементов массива однобайтных знаковых чисел 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