Sumas de 32 bits con registros de 16

Iniciado por [Kayser], 18 Enero 2013, 19:32 PM

0 Miembros y 1 Visitante están viendo este tema.

[Kayser]

Hola gente ando estudiando ensamblador y no comprendo como se harian las sumas que exceden las capacidades de los registros. Como se deberia efectuar una suma de por ejemplo 240.000 mas 300.000 con registros de 16 bits? Si alguien puede explicarmelo y poner un codigo comentado seria de gran ayuda. Un saludo

MCKSys Argentina

Fijate esto: http://x86asm.net/articles/working-with-big-numbers-using-x86-instructions/

Explica como hacer operaciones de 64 bits en 32. La idea es similiar a operar numeros de 32 bits en 16...
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


[Kayser]

Gracias por responder MCKSys Argentina! Pero la informacion esta en ingles... Puedes ponerme un codigo de ejemplo? Un saludo

3mp3z@ndo

#3
Lo harías utilizando la instrucción ADC, para tener en cuenta el bit de acarreo.

Te pongo un pequeño ejemplo:

int _tmain(int argc, _TCHAR* argv[])
{

int num1= 240000, num2= 300000, resultado;

__asm{
mov ax, word ptr num1

        add ax, word ptr num2

mov word ptr resultado, ax

mov ax, word ptr num1+2

adc ax, word ptr num2+2

mov word ptr resultado+2, ax
}
cout << num1 << "+" << num2 << "=" << resultado << endl;
return 0;
}


Un saludo

[Kayser]

Lo que no me queda claro es que pasa al sumar la parte baja y la parte alta... Cuando se suman tanto la parte alta por un lado como la parte baja por el otro se produciran mas de un acarreo cada vez a medida que se suman los numeros no?