Мне нужно умножить два 32-разрядных SIGNED числа с помощью сложения и сдвига и получить 64-разрядное число, сохраненное в ячейках памяти $0408-$040F
. Эти два номера хранятся в 8-битных памяти.Умножение двух 32-разрядных СИГНАЛЬНЫХ номеров с добавлением и сдвигом
movb #$1F, $0400 ; the first number is $1F230001
movb #$23, $0401
movb #$00, $0402
movb #$01, $0403
movb #$F8, $0404 ; the second number is $F8
movb #$01, $0405
movb #$23, $0406
movb #$46, $0407
Я знаю, как перемножить два числа 8-бит с добавлением и изменением, но я не знаю, как идти дальше с остальными. Я использовал 16-разрядный Accumulator-D (аккумулятор-A 8бит MSB, аккумулятор-B 8 бит LSB).
Я использую CPU12: Reference Manual
Можете ли вы помочь мне, пожалуйста, руководство меня или показать мне, как это сделать, пожалуйста? Спасибо, я потратил много времени на это, но я не знаю, как это сделать с 32-разрядными номерами. Номера
Это тот же алгоритм, только с большим количеством бит. –
Да, но как это сделать, когда у меня есть 4 8-битных ячейки памяти, я могу пройти 8 бит (смещение, добавление), но как двигаться, чтобы продолжить следующие 8 бит? – forgatn
О, этот CPU имеет 16-разрядный аккумулятор, поэтому вам никогда не нужно было научиться выполнять 16-разрядную арифметику, используя только 8-битные операции. (Следовательно, у вас нет опыта для обобщения.) Используйте инструкции ADC. [Этот вопрос] (http://stackoverflow.com/questions/10879819/add-numbers-in-avr-assembly/10894701#10894701) показывает, как. –