Умножение в дополнительном коде
- Chip115
- Сверлит текстолит когтями
- Сообщения: 1132
- Зарегистрирован: Пт фев 16, 2007 14:18:20
- Откуда: Новосибирск
- Контактная информация:
Умножение в дополнительном коде
Всем привет! Не могу разобраться как умножить два отрицательных числа в дополнительном коде. Можете объяснить как это делается на каком нить простом примере? А то пытаюсь юзать команду IMUL , но не могу проверить правильный ли результат....
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
© Альберт Эйнштейн
- Реклама
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: Умножение в дополнительном коде
Это для 386 и новее. Не знаю как для остальных процев.
Умножение с учетом знака.
Делает,есстественно, все в дополнительном коде.
Умножаю два числа FF4С и FF80 . Тот грит, мол результат 1Е00 .
Я стал проверять и не могу понять, как так получилось.
Даже инет не помог.
Сложение чисел я знаю как делать... Но вот умножение как то не приходилось делать
Вот и наступил на грабли.
Умножение с учетом знака.
Делает,есстественно, все в дополнительном коде.
Умножаю два числа FF4С и FF80 . Тот грит, мол результат 1Е00 .
Я стал проверять и не могу понять, как так получилось.
Даже инет не помог.
Сложение чисел я знаю как делать... Но вот умножение как то не приходилось делать
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
© Альберт Эйнштейн
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: Умножение в дополнительном коде
Спасибо! )
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
© Альберт Эйнштейн
- Реклама
- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: Умножение в дополнительном коде
... в Windows есть Calculator - вполне хватитChip115 писал(а):но не могу проверить правильный ли результат....
- Chip115
- Сверлит текстолит когтями
- Сообщения: 1132
- Зарегистрирован: Пт фев 16, 2007 14:18:20
- Откуда: Новосибирск
- Контактная информация:
Re: Умножение в дополнительном коде
Вот именно что не хватает. Он выдает аще не то.
Но это не показатель что процессор не правильно насчитал.
Но это не показатель что процессор не правильно насчитал.
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
© Альберт Эйнштейн
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: Умножение в дополнительном коде
... могет, если руки оттуда растутМитяРа писал(а):А он чё, в дополнительном коде тоже могёт?
- Chip115
- Сверлит текстолит когтями
- Сообщения: 1132
- Зарегистрирован: Пт фев 16, 2007 14:18:20
- Откуда: Новосибирск
- Контактная информация:
Re: Умножение в дополнительном коде
Ну он что сделал.МитяРа писал(а):А он чё, в дополнительном коде тоже могёт?ChipKiller писал(а):в Windows есть Calculator
Перевел число в прямой и перемножил. Получил FECC5А00 . Это я сразу проделал и в ручную без калка.
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
© Альберт Эйнштейн
- Chip115
- Сверлит текстолит когтями
- Сообщения: 1132
- Зарегистрирован: Пт фев 16, 2007 14:18:20
- Откуда: Новосибирск
- Контактная информация:
Re: Умножение в дополнительном коде
У меня не от туда. Как он может в дополнительном считать?ChipKiller писал(а):... могет, если руки оттуда растутМитяРа писал(а):А он чё, в дополнительном коде тоже могёт?
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
© Альберт Эйнштейн
- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: Умножение в дополнительном коде
... а правила математики кто отменил? в чем проблема-то конкретно...?Chip115 писал(а):Как он может в дополнительном считать?
- Chip115
- Сверлит текстолит когтями
- Сообщения: 1132
- Зарегистрирован: Пт фев 16, 2007 14:18:20
- Откуда: Новосибирск
- Контактная информация:
Re: Умножение в дополнительном коде
Что значит правило математики? Неужели сложение в доп. коде делается исключительно по правилам без учета всяких хитростей вроде переполнения?ChipKiller писал(а):... а правила математики кто отменил? в чем проблема-то конкретно...?Chip115 писал(а):Как он может в дополнительном считать?
В том , что не понятно как получилось 1E00 При умножении FF80 * FF4C.
1Е меньше чем FF
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
© Альберт Эйнштейн
- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: Умножение в дополнительном коде
Код: Выделить всё
0xFF80=-128
0xFF4C=-180
(-180)*(-128)=23040=0x5A00- Chip115
- Сверлит текстолит когтями
- Сообщения: 1132
- Зарегистрирован: Пт фев 16, 2007 14:18:20
- Откуда: Новосибирск
- Контактная информация:
Re: Умножение в дополнительном коде
и что? 5А00 далеко не 1Е00
Все это я и сам проделал. Потому и возникли вопросы
FFA6 если не ошибаюсь это 5А00 в доп.
Все это я и сам проделал. Потому и возникли вопросы
FFA6 если не ошибаюсь это 5А00 в доп.
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
© Альберт Эйнштейн
- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: Умножение в дополнительном коде
...а то, что если не получается у Вас и работает неправильно, не одно и то же..... приведите кусок кодаChip115 писал(а):и что?
- Chip115
- Сверлит текстолит когтями
- Сообщения: 1132
- Зарегистрирован: Пт фев 16, 2007 14:18:20
- Откуда: Новосибирск
- Контактная информация:
Re: Умножение в дополнительном коде
Вот код. (упростил что бы проверить)ChipKiller писал(а):...а то, что если не получается у Вас и работает неправильно, не одно и то же..... приведите кусок кодаChip115 писал(а):и что?
Код: Выделить всё
mov ax, FF4C
mov bx, FF80
IMUL bxТеория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
© Альберт Эйнштейн
- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: Умножение в дополнительном коде
... по идее результат содержится в регистровой паре, в ax - только младшая частьChip115 писал(а):По идее он должен в ax записать 5А00? Или не то число?
PS. проверил
Код: Выделить всё
mov eax,-128
mov ebx,-180
imul ebxRe: Умножение в дополнительном коде
Я проделал это вручную ( потому как 100 лет не работал в Intel`овском отладчике ) и получил тот же результат. Алгоритм простой.
1. Перемножаем знаки сомножителей и запоминаем знак произведения.
2. Для каждого из сомножителей, если он отрицательный, берем его модуль путем вычитания его из 0, а если положительный, то оставляем как есть.
3. Перемножаем модули. Если в знаковом бите '1', имеем переполнение.
4. Если нет, то : если знак произведения - минус , полученный результат вычитаем из 0 ( получаем дополнительный код ) , в противном случае оставляем как есть.
В данном примере :
( -) * ( -) = (+)
FF4C -> 00B4
FF80 -> 0080
00B4 * 0080 = 5A00 т.е. 23040
1. Перемножаем знаки сомножителей и запоминаем знак произведения.
2. Для каждого из сомножителей, если он отрицательный, берем его модуль путем вычитания его из 0, а если положительный, то оставляем как есть.
3. Перемножаем модули. Если в знаковом бите '1', имеем переполнение.
4. Если нет, то : если знак произведения - минус , полученный результат вычитаем из 0 ( получаем дополнительный код ) , в противном случае оставляем как есть.
В данном примере :
( -) * ( -) = (+)
FF4C -> 00B4
FF80 -> 0080
00B4 * 0080 = 5A00 т.е. 23040


