Инструкция Mult - это знаковое умножение двух 32-битных регистров.Он хранит результаты в специальном (Hi, Lo) регистре, который вместе дает вам 64-битный результат.Резонанс этого заключается в том, что при умножении двух 32-битных значений результат может быть слишком большим, чтобы поместиться в один 32-битный регистр.
Если цель упражнения состоит в том, чтобы вручную обработать 1 и 0 иумножение себя, то да, вы можете сделать это.Однако, скорее всего, вы будете где-то путаться с таким количеством цифр.
Давайте посмотрим, сможем ли мы использовать небольшой вывод, чтобы сначала понять, как должен выглядеть результат: в дополнении к двум наиболее значимой цифрой является знак:
Глядя на операцию, вы сразу знаете, что старший бит вашего результата будет равен 1. Это означает, что старший бит регистра Hi будетбыть 1.
Это сказанное теперь позволяет нам взглянуть на значения, которые мы умножаем (я опускаю знак, пока мы вернемся к этому):
2 30 x 3 = 2 30 x (2 1 + 2 0 )
= 2^31 + 2^30
Теперь мы превратили наше умножение в сложениечто гораздо проще сделать.В этом случае двоичное представление этого значения равно 1 в битах 32 и 31 или:
1100 0000 0000 0000 0000 0000 0000 0000
теперь нам нужно взять это значение и превратить его обратно в представление отрицательного числано теперь в 64-битном регистре: 64-битное положительное значение выглядит следующим образом:
0000 0000 0000 0000 0000 0000 0000 0000 1100 0000 0000 0000 0000 0000 0000 0000
Два дополнения работают, вычитая положительное число из максимального положительного числа с тем же числомбиты (все 1 с), а затем добавляем единицу к результату:
пример в меньшем масштабе:
3 = 0011
-3 = 1111 - 0011 + 0001
making -3 = 1101
Теперь давайте применим это к нашему 64-битному значению, сначала давайте вычеркнем положительный результатиз макс. 64-битного значения int:
1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111
-0000 0000 0000 0000 0000 0000 0000 0000 1100 0000 0000 0000 0000 0000 0000 0000
=1111 1111 1111 1111 1111 1111 1111 1111 0011 1111 1111 1111 1111 1111 1111 1111
при добавлении единицы к этому значению получается:
1111 1111 1111 1111 1111 1111 1111 1111 0100 0000 0000 0000 0000 0000 0000 0000
, поэтому регистры после операции будут:
Hi = 1111 1111 1111 1111 1111 1111 1111 1111
Lo = 0100 0000 0000 0000 0000 0000 0000 0000