Быстрый 8-битный множитель в сборке
У меня есть MCU в Logisim и следующий код asm. Он работает, но мне нужно его улучшить - сделать быстрее. Как это сделать? Я понимаю, что это зависит от ввода данных. Мои идеи - упорядочить входные операнды. Например, 2*5=5+5 и то же самое 5*2=2+2+2+2+2, поэтому мне нужно сначала сравнить их друг с другом, а затем расположить. Как это сделать? Любые другие идеи.
Вы можете получить мой MCULogisim: Загрузите MCU.circ и установите файл Excel XLS с инструкциями.
Текущее количество команд: COMPARE = 4 STORE = 9 END = 10
Машинный код: 3000 3101 2200 2300 1153 6509 0200 0130 5004 4202 500A
Мой код asm:
LDR R0, 0 //Read first number from the RAM
LDR R1, 1 //Read second number from the RAM
LDI R2, 0 //Sets result register to zero
LDI R3, 0 //Sets R3 (compare) register to zero
COMPARE:CMP R1, R3 //Checks if multiplication isn't already done
BREQ STORE //If previous compare numbers were identical, then jumt to STORE
ADD R2, R0 //If they werent 0, then add first number to result again
DEC R1 //Decrease second number or counter by 1
JMP COMPARE //Jump to compare
STORE: STR R2, 2 //Save result to 2. RAM adress
END: JMP END //END