реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Отрицательные чила в ассемблере., Лехкий вопрос для знающего........
Potter
сообщение Feb 15 2007, 12:53
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 151
Регистрация: 27-05-06
Из: Харьков
Пользователь №: 17 508



Старший бит в байте определяет знак числа... А в одном байте может хранится значение от -127 до 127. Так вот допустим есть восьми битное число представленное в двоичном коде: 1000 0001. Вопрос - в нашем понимании это будет 1 или -1?
Go to the top of the page
 
+Quote Post
NVade
сообщение Feb 15 2007, 13:02
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 71
Регистрация: 7-07-06
Из: Новосибирск
Пользователь №: 18 652



Не знаю что значит "в нашем понимании", а обычное представление
-1 это 11111111, а 10000001 - это -127. Это позволяет просто складывать с отрицательными числами (на переполнение забивается).
Go to the top of the page
 
+Quote Post
_Bill
сообщение Feb 15 2007, 13:12
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(Potter @ Feb 15 2007, 12:53) *
Старший бит в байте определяет знак числа... А в одном байте может хранится значение от -127 до 127. Так вот допустим есть восьми битное число представленное в двоичном коде: 1000 0001. Вопрос - в нашем понимании это будет 1 или -1?

Ни то, ни другое. Точнее, можно сказать, что все зависит от способа кодирования отрцательных чисел. Данный код можно читать кодом -1 при условии представления чисел в формате "модуль+знак", который практически нигде не используется. Кроме того, данный код можно считать кодом числа -126, в случае представления числа в обратном коде. Но этот код сейчас также нигде не использутся и, по-моему, зря. В дополнительном же коде, который сейчас везде используется, это будет код числа -127.
А вообще, это обычная машинная арифметика. Читайте книги. "Они сеют разумное, доброе, вечное".
Go to the top of the page
 
+Quote Post
Potter
сообщение Feb 15 2007, 13:12
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 151
Регистрация: 27-05-06
Из: Харьков
Пользователь №: 17 508



Цитата(NVade @ Feb 15 2007, 14:02) *
Не знаю что значит "в нашем понимании", а обычное представление
-1 это 11111111, а 10000001 - это -127. Это позволяет просто складывать с отрицательными числами (на переполнение забивается).


Ага... 1111 1000 это -8, 1111 0110 это -10, вопрос тогда в следующем... подскаите пожалуйста... как сложить два числа в асемблере, если за ранее не известен знак чисел? Это я так понимаю надо знать как преобразовать отрецательное число в положительное?
Go to the top of the page
 
+Quote Post
mse
сообщение Feb 15 2007, 13:25
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693



Цитата(Potter @ Feb 15 2007, 13:12) *
Ага... 1111 1000 это -8, 1111 0110 это -10, вопрос тогда в следующем... подскаите пожалуйста... как сложить два числа в асемблере, если за ранее не известен знак чисел? Это я так понимаю надо знать как преобразовать отрецательное число в положительное?

Складывать как обычно, командой АДД 0хff+0xff=0xfe(-1+(-1)=-2) 0xff+1=0 (-1+1=0)...
Go to the top of the page
 
+Quote Post
_Bill
сообщение Feb 15 2007, 13:41
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(Potter @ Feb 15 2007, 13:12) *
Цитата(NVade @ Feb 15 2007, 14:02) *

Не знаю что значит "в нашем понимании", а обычное представление
-1 это 11111111, а 10000001 - это -127. Это позволяет просто складывать с отрицательными числами (на переполнение забивается).


Ага... 1111 1000 это -8, 1111 0110 это -10, вопрос тогда в следующем... подскаите пожалуйста... как сложить два числа в асемблере, если за ранее не известен знак чисел? Это я так понимаю надо знать как преобразовать отрецательное число в положительное?

Ничего не надо преобразовывать. Сложение выполняется независимо от способа кодирования чисел, процессор "не знает" какими являются числа, без знака или с ним. Все определяется интерпретацией результата. У меня был небольшой опус на эту тему:
Об арифметике
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Feb 15 2007, 13:43
Сообщение #7


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(Potter @ Feb 15 2007, 12:12) *
Ага... 1111 1000 это -8, 1111 0110 это -10, вопрос тогда в следующем... подскаите пожалуйста... как сложить два числа в асемблере, если за ранее не известен знак чисел? Это я так понимаю надо знать как преобразовать отрецательное число в положительное?

Преобразовывать ничего специально не нужно.
Здесь всё на уровне подразумевания. Т. е. если операнды (обязательно оба) подразумевались знаковыми, то и результат следует считать знаковым.
Аналогично с беззнаковыми числами.
Все результаты будут верными при условии отсутствия переполнения.
Go to the top of the page
 
+Quote Post
Potter
сообщение Feb 15 2007, 13:51
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 151
Регистрация: 27-05-06
Из: Харьков
Пользователь №: 17 508



Всем огрмнешее спасибо... Все понятно.... Все получилось, все работае.......
Go to the top of the page
 
+Quote Post
SpyBot
сообщение Feb 15 2007, 15:38
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 285
Регистрация: 5-11-05
Пользователь №: 10 491



На всякий случай - стандартный виндосовский калькулятор может работать в том числе и с двоичными числами.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 12:13
Рейтинг@Mail.ru


Страница сгенерированна за 0.01546 секунд с 7
ELECTRONIX ©2004-2016