Como posso multiplicar dois números hexadecimais de 128 bits na montagem

Eu tenho dois números de 128 bits na memória em hexadecimal, por exemplo (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

Eu tenho que executar a multiplicação não assinada entre esses dois números para que meu novo número seja:

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

Agora, estou ciente de que posso mover o número meio x e y pararax erbx registradores e, por exemplo, faça omul operação e faça o mesmo com a outra metade. O problema é que, ao fazer isso, perco a transferência e não faço ideia de como posso evitar isso. Há cerca de 4 horas que estou enfrentando esse problema e a única solução que vejo é a conversão em binário (and <->shl,1)

Você pode me dar alguma opinião sobre esse problema?
Eu acho que a melhor solução é levar um byte por vez.

questionAnswers(2)

yourAnswerToTheQuestion