Может кто-нибудь объяснить процесс мультиточного умножения в сборке? - PullRequest
3 голосов
/ 08 марта 2012

См. Рисунок ниже и эту ссылку .

Figure 2.3

Что касается рисунка 2.3, я понимаю, почему M (множитель) и N (множитель) находятся в тех порядках, которые перечислены в «Частичное произведение .. M..L», которое находится в крайнем правом столбце. Это происходит от того, как нас обычно учат умножать:

Я понимаю, почему эта цифра имеет длину 64 бита, потому что она 32-битная, умноженная на 32 бита.

Я понимаю, что адреса идут от P ~ P + 7 таким образом, потому что H.O. часть конечного продукта начинается с P и L.O. бит конечного продукта заканчивается в P + 7.

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

Моя проблема: расположение каждого маленького прямоугольника (нижней и верхней половинок) сбивает меня с толку. Очевидно, это должно имитировать упрощенный процесс умножения, который я могу понять, как это делается. Я просто не совсем понимаю, как это выглядит на рисунке. Ссылка из моей первой строки также показывает аналогичный процесс. Я не хочу угадывать или предполагать, что, по моему мнению, происходит. Может кто-нибудь объяснить, пожалуйста, более подробно (желательно пошагово), как выяснить, какой маленький прямоугольник входит в какой столбец и строку; или, другими словами, вы можете сказать мне, как процесс умножения переводит на рисунок?

1 Ответ

6 голосов
/ 08 марта 2012

Уравнение у вас есть

(M H << 16 + M <sub>L ) x (N H << 16 +N <sub>L )

, где << означает «сдвиг влево».Обратите внимание, что сдвиг влево на 16 эквивалентен умножению на 65536, а два сдвига на 16 эквивалентны умножению на 32.

Если умножить это, вы получите

M L x N L +
M H << 16 x N <sub>L +
M L x N H << 16 + <br>M H << 16 x N <sub>H << 16 </p>

Если вы потянете сменыout:

(M L x N L ) << 0 + <br>(M H x N L ) << 16 + <br>(M L x N H ) << 16 + <br>(M H x N H ) << 32 </p>

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

...