Умножение в дополнительном коде

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Аватара пользователя
Chip115
Сверлит текстолит когтями
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск
Контактная информация:

Умножение в дополнительном коде

Сообщение Chip115 »

Всем привет! Не могу разобраться как умножить два отрицательных числа в дополнительном коде. Можете объяснить как это делается на каком нить простом примере? А то пытаюсь юзать команду IMUL , но не могу проверить правильный ли результат....
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Реклама
Аватара пользователя
МитяРа
Модератор
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Re: Умножение в дополнительном коде

Сообщение МитяРа »

А что за команда IMUL ?
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Реклама
Аватара пользователя
Chip115
Сверлит текстолит когтями
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск
Контактная информация:

Re: Умножение в дополнительном коде

Сообщение Chip115 »

Это для 386 и новее. Не знаю как для остальных процев.
Умножение с учетом знака.
Делает,есстественно, все в дополнительном коде.
Умножаю два числа FF4С и FF80 . Тот грит, мол результат 1Е00 .
Я стал проверять и не могу понять, как так получилось.
Даже инет не помог.
Сложение чисел я знаю как делать... Но вот умножение как то не приходилось делать :( Вот и наступил на грабли.
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Аватара пользователя
МитяРа
Модератор
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Re: Умножение в дополнительном коде

Сообщение МитяРа »

Напиши, Сергею http://radiokot.ru/forum/memberlist.php ... ile&u=8574 в ЛС сЦылку на тему..
Как зайдёт на форум - ответит, он у нас по Интелловым процам большой спец..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Chip115
Сверлит текстолит когтями
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск
Контактная информация:

Re: Умножение в дополнительном коде

Сообщение Chip115 »

Спасибо! )
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Реклама
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: Умножение в дополнительном коде

Сообщение ChipKiller »

Chip115 писал(а):но не могу проверить правильный ли результат....
... в Windows есть Calculator - вполне хватит
Реклама
Аватара пользователя
Chip115
Сверлит текстолит когтями
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск
Контактная информация:

Re: Умножение в дополнительном коде

Сообщение Chip115 »

Вот именно что не хватает. Он выдает аще не то.
Но это не показатель что процессор не правильно насчитал.
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Аватара пользователя
МитяРа
Модератор
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Re: Умножение в дополнительном коде

Сообщение МитяРа »

ChipKiller писал(а):в Windows есть Calculator
А он чё, в дополнительном коде тоже могёт?
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: Умножение в дополнительном коде

Сообщение ChipKiller »

МитяРа писал(а):А он чё, в дополнительном коде тоже могёт?
... могет, если руки оттуда растут :)
Аватара пользователя
Chip115
Сверлит текстолит когтями
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск
Контактная информация:

Re: Умножение в дополнительном коде

Сообщение Chip115 »

МитяРа писал(а):
ChipKiller писал(а):в Windows есть Calculator
А он чё, в дополнительном коде тоже могёт?
Ну он что сделал.
Перевел число в прямой и перемножил. Получил FECC5А00 . Это я сразу проделал и в ручную без калка.
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Аватара пользователя
Chip115
Сверлит текстолит когтями
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск
Контактная информация:

Re: Умножение в дополнительном коде

Сообщение Chip115 »

ChipKiller писал(а):
МитяРа писал(а):А он чё, в дополнительном коде тоже могёт?
... могет, если руки оттуда растут :)
У меня не от туда. Как он может в дополнительном считать?
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: Умножение в дополнительном коде

Сообщение ChipKiller »

Chip115 писал(а):Как он может в дополнительном считать?
... а правила математики кто отменил? в чем проблема-то конкретно...?
Аватара пользователя
Chip115
Сверлит текстолит когтями
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск
Контактная информация:

Re: Умножение в дополнительном коде

Сообщение Chip115 »

ChipKiller писал(а):
Chip115 писал(а):Как он может в дополнительном считать?
... а правила математики кто отменил? в чем проблема-то конкретно...?
Что значит правило математики? Неужели сложение в доп. коде делается исключительно по правилам без учета всяких хитростей вроде переполнения?
В том , что не понятно как получилось 1E00 При умножении FF80 * FF4C.
1Е меньше чем FF
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: Умножение в дополнительном коде

Сообщение ChipKiller »

Код: Выделить всё

0xFF80=-128
0xFF4C=-180
(-180)*(-128)=23040=0x5A00
приведите кусок кода, а не "жалобы", что все плохо....
Аватара пользователя
Chip115
Сверлит текстолит когтями
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск
Контактная информация:

Re: Умножение в дополнительном коде

Сообщение Chip115 »

и что? 5А00 далеко не 1Е00
Все это я и сам проделал. Потому и возникли вопросы
FFA6 если не ошибаюсь это 5А00 в доп.
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: Умножение в дополнительном коде

Сообщение ChipKiller »

Chip115 писал(а):и что?
...а то, что если не получается у Вас и работает неправильно, не одно и то же..... приведите кусок кода
Аватара пользователя
Chip115
Сверлит текстолит когтями
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск
Контактная информация:

Re: Умножение в дополнительном коде

Сообщение Chip115 »

ChipKiller писал(а):
Chip115 писал(а):и что?
...а то, что если не получается у Вас и работает неправильно, не одно и то же..... приведите кусок кода
Вот код. (упростил что бы проверить)

Код: Выделить всё

mov ax, FF4C
mov bx, FF80
IMUL bx
По идее он должен в ax записать 5А00? Или не то число?
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: Умножение в дополнительном коде

Сообщение ChipKiller »

Chip115 писал(а):По идее он должен в ax записать 5А00? Или не то число?
... по идее результат содержится в регистровой паре, в ax - только младшая часть

PS. проверил

Код: Выделить всё

   mov eax,-128
   mov ebx,-180
   imul ebx
результат eax=00005A00 edx=00000000
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6315
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Умножение в дополнительном коде

Сообщение Jack_A »

Я проделал это вручную ( потому как 100 лет не работал в Intel`овском отладчике ) и получил тот же результат. Алгоритм простой.
1. Перемножаем знаки сомножителей и запоминаем знак произведения.
2. Для каждого из сомножителей, если он отрицательный, берем его модуль путем вычитания его из 0, а если положительный, то оставляем как есть.
3. Перемножаем модули. Если в знаковом бите '1', имеем переполнение.
4. Если нет, то : если знак произведения - минус , полученный результат вычитаем из 0 ( получаем дополнительный код ) , в противном случае оставляем как есть.

В данном примере :
( -) * ( -) = (+)
FF4C -> 00B4
FF80 -> 0080
00B4 * 0080 = 5A00 т.е. 23040
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»