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.