Итак, я пытаюсь реализовать множитель в программе на языке ассемблера, используя алгоритм сдвига и добавления.У меня нет инструкции левого сдвига в этом ISA, но я понимаю, что добавление числа к себе сместит число, оставленное на единицу.
Допустим, я хочу умножить 5 * 15, что будет 101
умножено на 1111
.Я понимаю, что мне нужно умножить 5 на каждый частичный бит из 15, но я запутался в том, как я могу получить доступ к этим частичным битам / работать с ними.Справа налево я умножаю 1
на 101
, чтобы получить 101, добавляю заполнитель для сдвига влево и продолжаю с каждым последующим битом, получая 1010
, 10100
и 101000
.Затем я складываю эти числа, чтобы получить 1001011
, то есть 75, правильный ответ.
Итак, как бы я мог сделать это в сборке?Я в замешательстве.Спасибо!