Как я могу умножить два шестнадцатеричных 128-битных числа в сборке

У меня есть два 128-битных числа в памяти в шестнадцатеричном формате, например (little-endian):

x:0x12 0x45 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
y:0x36 0xa1 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00

Я должен выполнить беззнаковое умножение между этими двумя числами, чтобы мой новый номер был:

z:0xcc 0xe3 0x7e 0x2b 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00

Теперь я знаю, что я могу переместить половину числа х и у вrax а такжеrbx регистры и, например, сделатьmul операция, и сделать то же самое с другой половиной. Проблема в том, что при этом я теряю перенос, и я понятия не имею, как мне этого избежать. Это около 4 часов, я сталкиваюсь с этой проблемой, и единственное решение, которое я могу увидеть, это преобразование в двоичном виде (and <->shl,1).

Можете ли вы дать мне некоторую информацию об этой проблеме?
Я думаю, что лучшее решение - взять один байт по времени.

Ответы на вопрос(2)

Ваш ответ на вопрос