2016-02-04 15 views
-2

Мне нужно реализовать умножение между двумя числами с целым числом и дробной частью. Я попробовал многократную стратегию, но пока не нашел рабочего пути. Не могли бы вы мне помочь?8086 умножение/деление дробных чисел

В моем конкретном случае:

первый операнд 16-битовый вар с 8 целых и 8 фракционной

второй операнд представляет собой 8 бит все дробное число, при условии, что это 0, xxxx

Я хотел бы найти способ использовать его с любым количеством numnber и, возможно, также, когда у меня есть операции div.

Basic 8086, с AX, BX .. Нет EAX ЕСС

Большое спасибо!

+2

Это практически одна инструкция 'MUL' ... что вы пробовали, какие материалы вы использовали и какой результат вы получили. – Jester

+0

Я думаю, что я сделал целую массу глупостей ... Эта дробная часть меня раздумывала. Я попытался сдвинуть и размножить любой бит для постоянной и суммировать их все ... Я явно совершил огромную ошибку. –

ответ

3

IMUL со словом операнда умножает два подписали 16-битные целые числа (и MUL два целых чисел без знака) и производит 32-битный результат - в частности, он приводит:

(DX AX) = AX * operand 

Так что используйте, что и сдвиг результата справа на 8 бит, чтобы отменить эффект обработки схемы с фиксированной точкой, как если бы она была интегральной.

+0

Это так просто? Я был взорван душой из-за этих 8 дробных бит. Должен ли я создать какой-то определенный алгоритм управления? Просто дерьмо? В этом случае: [код] AH <- целая часть AL <- дробная часть BH <- 0 BL <- дробная часть MUL BX [/ код] А потом я просто найти мой целочисленная часть в DL и моя дробная часть в AH (с DH, полным 0s и AL с несущественной дробной частью?) –

+0

Да, это так просто :) – Jester

+0

Да, просто подумайте о фракции. ЦП умножает исходное число на n. Но вы знаете, что n не является n, это должно интерпретироваться как n/256 - например. если n равно 3, значит, вы сохранили номер 3/256ths. Если n равно 256, то вы сохранили номер 256/256 = 1. Поскольку процессор умножается на n, но вы действительно хотели умножить на n/256, исправление должно делить на 256 для вас после завершения умножения. Это всего лишь небольшая смена. – Tommy

Смежные вопросы