PARTE II. TUTORIAL ENSAMBLADOR BASICO

Temas que encontraras en esta pagina aritmetica de complemento a dos, aritmetica de precision extendida

ARITMÉTICA DE COMPLEMENTO A DOS

La instrucción ADD efectúa una suma y la instrucción SUB efectúa una resta. Dos de los bits en el registro FLAGS, que se alteran con estas instrucciones son las banderas de desborde y carry.

La bandera de desborde se fija si el resultado verdadero de la operación es muy grande para caber en el destino para aritmética con signo. La bandera de carry se fija si hay carry en el bit más significativo de una suma o un préstamo en el bit más significativo de una resta.

Una de las grandes ventajas del complemento a 2 es que las reglas para la adición y sustracción son exactamente las mismas que para los enteros sin signo. Así ADD y SUB se pueden usar con enteros con o sin signo. 002C + FFFF = 002B 44 - 1 = 43

Hay un carry generado, pero no es parte de la respuesta. Hay dos instrucciones diferentes para multiplicar y dividir. Primero para multiplicar use la instrucción MUL o IMUL. La instrucción MUL se emplea para multiplicar números sin signo e IMUL se usa para multiplicar enteros con signo.

Las reglas para la multiplicación son diferentes para números en complemento a dos con signo o sin signo. Considere la multiplicación del byte FF con sí mismo dando como resultado una palabra. Usando una multiplicación sin signo es 255 veces 255 o 65025 (o FE01 en hex). Usando la multiplicaci´on con signo es −1 veces −1 o 0001 en hex.

ARITMÉTICA DE PRECISIÓN EXTENDIDA

El lenguaje ensamblador también suministra instrucciones que le permitan a uno hacer operaciones de suma y resta de números más grandes que palabras dobles.

Las instrucciones ADD y SUB modifican la bandera de carry si se ha generado un carry o un préstamo respectivamente. Esta información almacenada en la bandera de carry se puede usar para sumar o restar números grandes dividiendo la operación en piezas pequeñas de palabras dobles o menores.

Las instrucciones ADC y SBB usan esta información en la bandera de carry.

La instrucción ADC hace la siguiente operación: operando1 = operando1 + bandera de carry + operando2

La instrucción SBB realiza: operando1 = operando1 - bandera de flag - operando2

Considere la suma de enteros de 64 bits en EDX:EAX y EBX:ECX . El siguiente código podía almacenar la suma en EDX:EAX

1 add eax, ecx; suma los 32-bits inferiores

2 adc edx, ebx; suma los 32-bits superiores y el carry

La resta es muy similar. El siguiente código resta EBX:ECX de EDX:EAX

1 sub eax, ecx; resta los 32-bits inferiores

2 sbb edx, ebx; resta los 32-bits superiores y el préstamo

Para números realmente grandes, se puede usar un bucle Para el bucle suma sería conveniente usar la instrucción ADC para cada iteración (en todas menos la primera). Esto se puede hacer usando la instrucción CLC (CLear Carry) antes que comienze el bucle para iniciar la bandera de carry a cero. Si la bandera de carry es cero no hay diferencia entre ADD y ADC. La misma idea se puede usar también para la resta.

SIGUIENTE PAGINA PARTE III:

Fecha actualización el 2016-3-30. Fecha publicación el . Categoría: Programación, Ensamblador. Autor: Mapa del sitio
programacion