Académique Documents
Professionnel Documents
Culture Documents
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
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
DWORD 34 DWORD 17 DWORD 14 eax, eax, ebx, ebx, eax, eax eax eax, x y z ebx ebx 0
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
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.