Vous êtes sur la page 1sur 4

Lenguaje Ensamblador - Instrucciones aritmticas en ensamblador

Suma y resta Los microprocesadores Intel 80x86 disponen de las instrucciones add y sub para realizar sumas y restas respectivamente, estas instrucciones pueden trabajar sobre operandos de longitud byte (8bits), word (16bits), double-word (32bits) y quad-word (64bits). Los operandos pueden ser nmeros con signo o sin signo, en caso de ser nmeros con signo stos son almacenados en su forma de complemento a 2. Se debe observar que estas instrucciones realizan cambios en los bits del registro de banderas, algunas banderas modificadas segn el resultado de la operacin son las banderas SF, ZF, OF, CF, PF y DF. Cada instruccin add tiene la forma: add destino, fuente cuando esta instruccin es ejecutada el valor que se encuentra en fuente es sumado al valor que se encuentra en destino, sobrescribiendo el valor que originalmente se encontraba en destino por el nuevo valor resultado de la adicin. Cada instruccin sub tiene la forma: sub destino, fuente cuando esta instruccin es ejecutada el valor que se encuentra en fuente es restado del valor que se encuentra en destino, sobrescribiendo el valor que originalmente se encontraba en destino por el nuevo valor resultado de la sustraccin. Debe observar que tanto para la suma como para la resta el valor de destino es cambiado por el valor resultado de la operacin, a diferencia del valor de fuente que permanece inalterado. Ejemplos de uso de las instrucciones add y sub: a) Antes AX: 33 11 BX: 11 00 b) Antes ECX: 00 00 0C 0A EAX: 00 00 28 A2 c) Antes ECX: 01 00 FF 0E EDX: F1 35 22 AB d) Antes AL: 54 BL: 32 Instruccin add ax, bx Instruccin add ecx, eax Instruccin add ecx, edx Instruccin sub al, bl Despus AX: 44 11 BX: 11 00 Despus ECX: 00 00 34 AC EAX: 00 00 28 A2 Despus ECX: F2 36 21 B9 EDX: F1 35 22 AB Despus AL: 22 BL: 32

Lenguaje Ensamblador - Instrucciones aritmticas en ensamblador


e) Antes CH: FA AL: A2 f) Antes CX: DE 5B DX: BB 44 Las instrucciones inc y dec Las instrucciones inc (increment) y dec (decrement) representan una suma y una resta donde el operando fuente siempre es 1, la forma de cada una de ellas es la siguiente: inc destino dec destino Ejemplos de uso de las instrucciones inc y dec: a) Antes ECX: 00 00 0F A3 b) Antes AH: DE c) Antes DX: 0F FF d) Antes EBX: FF FF FF FF e) Antes CL: 01 La instruccin neg La instruccin neg (negate) niega o encuentra el complemento a 2 de su nico operando. Si se aplica la instruccin neg a un valor positivo ste se vuelve negativo, si se aplica a un valor negativo ste se vuelve positivo, el cero permanece igual. La instruccin neg tiene la siguiente forma: neg destino Instruccin inc ecx Instruccin inc ah Instruccin inc dx Instruccin dec ebx Instruccin dec cl Despus ECX: 00 00 0F A4 Despus AH: DF Despus DX: 10 00 Despus EBX: FF FF FF FE Despus CL: 00 Instruccin sub ch, al Instruccin sub cx, dx Despus CH: 58 AL: A2 Despus CX: 23 17 DX: BB 44

Lenguaje Ensamblador - Instrucciones aritmticas en ensamblador

Ejemplos de uso de la instruccin neg: a) Antes EBX: 00 00 01 A2 b) Antes DH: F5 c) Antes valor = 00 01 d) Antes EAX: 00 00 00 00 Programa completo de ejemplo Resuelva mediante ensamblador la expresin (x + y 2z + 1) si x=34, y=17 y z=14:
.586 .MODEL FLAT .STACK 4096 .DATA x y z .CODE main PROC mov add mov add sub inc neg mov ret main ENDP END ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; usar operandos de 32 bits modelo de memoria plana, (no usar seg:des) reservar 4096 bytes para la pila inicia la seccin de datos declarar una variable de 32 bits de nombre x = 34 declarar una variable de 32 bits de nombre y = 17 declarar una variable de 32 bits de nombre z = 14 inicia la seccin de cdigo inicia el procedimiento de nombre main mover el valor de x al registro eax sumar el valor de y al valor del registro eax (x + y) mover el valor de z al registro ebx sumar el valor de z al valor del registro ebx (2z) restar de eax el valor de ebx (x + y 2z) aadir 1 al valor del registro eax (x + y 2z + 1) negar el valor contenido en eax -(x + y 2z + 1) terminar el programa con cdigo de salida 0

Instruccin neg ebx Instruccin neg dh Instruccin neg valor Instruccin neg eax

Despus EBX: FF FF FE 5E Despus DH: 0B Despus valor: FF FF Despus EAX: 00 00 00 00

DWORD 34 DWORD 17 DWORD 14 eax, eax, ebx, ebx, eax, eax eax eax, x y z ebx ebx 0

; termina el procedimiento main ; termina el modulo de programa

Complemento a 2 de un nmero binario Al inicio de este documento se indic que los nmeros con signo son almacenados internamente en las computadoras en su forma de complemento a 2, esto se hace as ya que es mucho ms sencillo tratar a los nmeros negativos en su forma de complemento a 2, as mismo, tambin se seal que la instruccin neg de ensamblador obtiene el complemento a 2 de su operando. Para encontrar el complemento a 2 de un nmero binario debe calcular la siguiente expresin: 2n N

Lenguaje Ensamblador - Instrucciones aritmticas en ensamblador

Donde n es el nmero de bits sobre los cuales se quiere encontrar el complemento a 2 y N es el nmero al cual se quiere encontrar su complemento a 2, para facilitar el clculo, una vez encontrado el valor 2n convierta ste valor a su equivalente binario y reste el nmero N, de esta manera, el binario resultante ser el complemento a 2 de N. Ejemplos de complemento a 2: a) Encuentre el complemento a 2 del nmero binario 0101 0011 Solucin Al observar los datos proporcionados vemos que n es igual a 8 y N es igual a 0101 0011, sustituyendo en la frmula tenemos
2n N = (28)10 (0101 0011)2 = (256)10 (0101 0011)2 = (1 0000 0000)2 (0101 0011)2 = (1010 1101)2

De esta manera, el complemento a 2 de 0101 0011 es 1010 1101. b) Encuentre el complemento a 2 del nmero binario 1001 0110 1110 1111 Solucin Sea n = 16 y N = 1001 0110 1110 1111, sustituyendo
2n N = (216)10 (1001 0110 1110 1111)2 = (65 536)10 (1001 0110 1110 1111)2 = (1 0000 0000 0000 0000)2 (1001 0110 1110 1111)2 = (0110 1001 0001 0001)2

Por lo tanto, el complemento a 2 es 0110 1001 0001 0001. Una forma ms sencilla de encontrar el complemento a 2 de un nmero binario es dejando todos los ceros menos significativos y el primer dgito diferente de cero sin cambio, para luego remplazar unos por ceros y ceros por unos en el resto de dgitos ms significativos.

c) Encuentre el complemento a 2 del nmero 1111 0011 0000 1010.


Solucin Siguiendo el mtodo anterior encontramos que 0000 1100 1111 0110 es el complemento a 2 buscado.

d) Encuentre el complemento a 2 del nmero 0xF0B0


Solucin En este caso, el complemento a 2 solicitado es para la representacin en base 2 del nmero 0xF0B0, por lo tanto, primero hay que convertir el nmero 0xF0B0 a su equivalente binario, dando como resultado el nmero 1111 0000 1011 0000, posteriormente se encuentra el complemento a 2 de este nmero, el complemento a 2 es 0000 1111 0101 0000, por ltimo, se convierte este nmero a su representacin en base 16 dando como resultado 0x0F50.

Vous aimerez peut-être aussi