¿Cómo puedo multiplicar dos números hexadecimales de 128 bits en el ensamblaje?

Tengo dos números de 128 bits en memoria en hexadecimal, por ejemplo (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

Tengo que realizar la multiplicación sin signo entre estos dos números para que mi nuevo número sea:

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

Ahora, soy consciente de que puedo mover la mitad de los números x e yrax yrbx registros y, por ejemplo, hacer elmul operación, y hacer lo mismo con la otra mitad. El problema es que al hacerlo pierdo el arrastre y no tengo idea de cómo puedo evitarlo. Hace aproximadamente 4 horas que enfrento este problema y la única solución que puedo ver es la conversión en binario (and <->shl,1)

¿Me puede dar alguna información sobre este problema?
Creo que la mejor solución es tomar un byte por tiempo.

Respuestas a la pregunta(2)

Su respuesta a la pregunta