Vous êtes sur la page 1sur 18

Universidad Autnoma de Baja California

FACULTAD DE CIENCIAS QUMICAS E INGENIERA

Ing. en Computacin
Laboratorio de Organizacin de computadoras y lenguaje ensamblador
Alumno: Robin Miguel Gonzlez Ochoa Prctica No. 6

INSTRUCCIONES DE MOVIMIENTO DE DATOS, ARITMTICA, LGICAS Y DE MANIPULACIN DE BITS


Objetivo: El alumno se familiarizar con los diferentes tipos de instrucciones que posse el procesador 8088/86. Herramientas: Computadora personal Turbo Debugger

Teora
Instrucciones de movimiento PUSH (Introduce en la pila). Sintaxis: PUSH origen Indicadores: OF DF IF TF SF ZF AF PF CF .Decrementa el puntero de pila (SP) en 2 y luego transfiere la palabra especificada en el operando origen a la cima de la pila. Ejemplo: PUSH CS POP (Extraer de la pila) Sintaxis: POP destino Indicadores: OF DF IF TF SF ZF AF PF CF .Transfiere el elemento palabra que se encuentra en lo alto de la pila (apuntado por SP) al operando destino que a de ser tipo palabra, e incrementa en dos el registro SP. Ejemplos: POP AX PUSHF (introduce los indicadores en la pila) Sintaxis: PUSHF Indicadores: OF DF IF TF SF ZF AF PF CF. Decrementa en dos el puntero de pila y traslada a la cima de la pila el contenido de los indicadores.

POPF (extrae los indicadores de la pila) Sintaxis: POPF Indicadores: OF DF IF TF SF ZF AF PF .Traslada al registro de los indicadores la palabra almacenada en la cima de la pila; a continuacin el puntero de pila SP se incrementa en dos. XCHG (intercambiar) Sintaxis: XCHG destino, origen Indicadores: OF DF IF TF SF ZF AF PF CF. Una instruccin til pero no imprescindible es XCHG. Intercambia el contenido de los operandos origen y destino. No pueden utilizarse registros de segmentos como operandos. Por ejemplo, si queremos intercambiar los contenidos de los registros AX y BX, podemos hacer: MOV AUX, AX MOV AX, BX MOV BX, AUX en donde AUX es una variable auxiliar que hace de puente, o simplemente utilizar: XCHG AX, BX XLAT (traduccin) Sintaxis: XLAT tabla La instruccin XLAT tabla, carga en el registro AL el contenido de la posicin [BX][AL], en donde el registro BX ha de apuntar al comienzo de una tabla. Dicho de otra manera, AL hace de ndice de la tabla y de almacn destino del contenido de la tabla. Por ejemplo, el siguiente programa: DATOS SEGMENT TABLA DB 2,3,5,8,16,23 DATOS ENDS CODIGO SEGMENT MOVE BX, OFFSET TABLA; Inicializa BX con la direccin donde comienza la tabla MOVE AL, 5 XLAT TABLA CODIGO ENDS Hace que al final el contenido de AL sea 16 ya que es el quinto elemento de la tabla y AL antes de XLAT TABLA contena el valor 5. IN (entrada) Sintaxis: IN acumulador, puerto Indicadores: OF DF IF TF SF ZF AF PF CF Transfiere datos desde el puerto indicado hasta el registro AL o AX, dependiendo de la longitud byte o palabra respectivamente. El puerto puede especificarse mediante una constante (0 a 255) o a travs del valor contenido en DX (0 a 65535). Ejemplo: IN AX, 0FH

OUT (salida) Sintaxis: OUT puerto, acumulador Indicadores: OF DF IF TF SF ZF AF PF CF Transfiere un byte o palabra del registro AL o AX a un puerto de salida. El puerto puede especificarse con un valor fijo entre 0 y 255 a travs del valor contenido en el registro DX (de 0 a 65535). Ejemplo: OUT 12H, AX Instrucciones aritmticas ADD (suma) Sintaxis: ADD destino, origen Indicadores: OF DF IF TF SF ZF AF PF CF Suma los operandos origen y destino almacenando el resultado en el operando destino. Se activa el acarreo si se desborda el registro destino durante la suma. Ejemplos: ADD AX, BX ADC (suma con acarreo) Sintaxis: ADC destino, origen Indicadores: OF DF IF TF SF ZF AF PF CF Suma los operandos origen, destino y el valor del indicador de acarreo (0 1) y el resultado lo almacena en el operando destino. Se utiliza normalmente para sumar nmeros grandes, de ms de 16 bits, en varios pasos, considerando lo que nos llevamos (el acarreo) de la suma anterior. Ejemplo: ADC AX,BX INC (incrementar) Sintaxis: INC destino Indicadores: OF DF IF TF SF ZF AF PF CF Incrementa el operando destino. El operando destino puede ser byte o palabra. Obsrvese que esta instruccin no modifica el bit de acarreo (CF) y no es posible detectar un desbordamiento por este procedimiento (utilcese ZF). Ejemplos: INC ALINC ES:[DI] INC SS: [BP+4] SUB (resta) Sintaxis: SUB destino, origen Indicadores: OF DF IF TF SF ZF AF PF CF Resta el operando destino al operando origen, colocando el resultado en el operan do destino. Los operandos pueden tener o no signo, siendo necesario que sean del mismo tipo, byte o palabra. Ejemplos: SUB AL, BLSUB DX, DX

SBB (resta con acarreo) Sintaxis: SBB destino, origen Indicadores: OF DF IF TF SF ZF AF PF CF Resta el operando origen del operando destino y el resultado lo almacena en el operando destino. Si est a 1 el indicador de acarreo adems resta una unidad ms. Los operandos pueden ser de tipo byte o palabra. Se utiliza normalmente para restar nmeros grandes, de ms de 16 bits, en varios pasos, considerando lo que nos llevamos (el acarreo) de la resta anterior. Ejemplo: SBB AX, AX DEC (decremento) Sintaxis: DEC destino Indicadores: OF DF IF TF SF ZF AF PF CF Resta una unidad del operando destino. El operando puede ser byte o palabra. Obsrvese que esta instruccin no modifica el bit de acarreo (CF) y no es posible detectar un desbordamiento por este procedimiento (utilcese ZF). Ejemplo: DEC AX MUL (multiplicacin sin signo) Sintaxis: MUL origen (origen no puede ser operando inmediato) Indicadores: OF DF IF TF SF ZF AF PF Multiplica el contenido sin signo del acumulador por el operando origen. Si el operando destino es un byte el acumulador es AL guardando el resultado en AH y AL, si el contenido de AH es distinto de 0 activa los indicadores CF y OF. Cuando el operando origen es de longitud palabra el acumulador es AX quedando el resultado sobre DX y AX, si el valor de DX es distinto de cero los indicadores CF y OF se activan. Ejemplo: MUL BYTE PTR DS: [DI] MUL DX IMUL (multiplicacin entera con signo) Sintaxis: IMUL origen (origen no puede ser operando inmediato en 8086, s en 86) Indicadores: OF DF IF TF SF ZF AF PF CF Multiplica un operando origen con signo de longitud byte o palabra por AL o AX respectivamente. Si origen es un byte el resultado se guarda en AH (byte ms significativo) y en AL (menos significativo), si origen es una palabra el resultado es devuelto en DX (parte alta) y AX (parte baja). Si las mitades ms significativas sondistintas de cero, independientemente del signo, CF y OF son activados. Ejemplo: IMUL BX DIV (divisin sin signo) Sintaxis: DIV origen ( origen no puede ser operando inmediato). Indicadores: OF DF IF TF SF ZF AF PF CF

Divide, sin considerar el signo, un nmero contenido en el acumulador y su extensin (AH,AL si el operando es de tipo byte o DX, AX si el operando es palabra) entre el operando fuente. El cociente se guarda en AL o AX y el resto en AH o DX segn el operando sea byte o palabra respectivamente. DX o AH deben ser cero antes de la operacin. Cuando el cociente es mayor que el resultado mximo que puede almacenar, cociente y resto quedan indefinidos producindose una interrupcin 0. En caso de que las partes ms significativas del cociente tengan un valor distinto de cero se activan los indicadores CF y OF. Ejemplo: DIV BL IDIV (divisin entera con signo) Sintaxis: IDIV origen ( origen no puede ser operando inmediato). Indicadores: OF DF IF TF SF ZF AF PF CF Divide, considerando el signo, un nmero contenido en el acumulador y su extensin entre el operando fuente. El cociente se almacena en AL o AX segn el operando sea byte o palabra y de igual manera el resto en AH o DX. DX o AH deben ser cero antes dela operacin. Cuando el cociente es positivo y superior al valor mximo que puede almacenarse (7fh 7fffh), o cuando el cociente es negativo e inferior al valor mnimo que puede almacenarse (81h u 8001h) entonces cociente y resto quedan indefinidos, generndose una interrupcin 0, lo que tambin sucede si el divisor es 0. Ejemplo: IDIV BL CMP (comparacin) Sintaxis: CMP destino, origen Indicadores: OF DF IF TF SF ZF AF PF CF Resta origen de destino sin retornar ningn resultado. Los operandos quedan inalterados, paro los indicadores pueden ser consultados mediante instrucciones de bifurcacin condicional. Los operandos pueden ser de tipo byte o palabra pero ambos de la misma dimensin. Ejemplo: CMP BX, MEM_PAL CBW (conversin byte en palabra) Sintaxis: CBW Indicadores: OF DF IF TF SF ZF AF PF CF Copia el bit 7 del registro AL en todos los bits del registro AH, es decir, expande el signo de AL a AX como paso previo a una operacin de 16 bits. CWD (conversin de palabra a doble palabra) Sintaxis: CWD Indicadores: OF DF IF TF SF ZF AF PF CF Expande el signo del registro AX sobre el registro DX, copiando el bit ms significativo de AH en todo DX. Instrucciones lgicas y de manipulacin de bits AND (y lgico)

Sintaxis: AND destino, origen Indicadores: OF DF IF TF SF ZF AF PF CF0 Realiza una operacin de Y lgico entre el operando origen y destino quedando el resultado en el destino. Son vlidos operandos byte o palabra, pero ambos del mismo tipo. Ejemplos: AND AX,BX OR (or lgico) Sintaxis: OR destino, origen Indicadores: OF DF IF TF SF ZF AF PF CF0 Realiza una operacin O lgico a nivel de bits entre los dos operandos, almacenndose despus el resultado en el operando destino. Ejemplo: OR AX,BX XOR (o exclusivo) Sintaxis: XOR destino, origen Indicadores: OF DF IF TF SF ZF AF PF CF Operacin OR exclusivo a nivel de bits entre los operandos origen y destino almacenndose el resultado en este ltimo. Ejemplo: XOR DI,AX NOT (not) Sintaxis: NOT destino Indicadores: OF DF IF TF SF ZF AF PF CF Realiza el complemento a uno del operando destino, invirtiendo cada uno de sus bits. Losindicadores no resultan afectados. Ejemplo: NOT AX TEST (comparacin lgica) Sintaxis: TEST destino, origen Indicadores: OF DF IF TF SF ZF AF PF Realiza una operacin Y lgica entre los dos operandos pero sin almacenar el resultado. Los indicadores son afectados con la operacin. Ejemplo: TEST AL,BH SHL/SAL (Desplazamiento aritmtico a la izquierda) Sintaxis: SAL/SHL destino, contador Indicadores: OF DF IF TF SF ZF AF PF Desplaza a la izquierda los bits del operando el nmero de bits especificado en el segundo operando que debe ser CL si es mayor que 1 los bits desplazados. SHR (Desplazamiento lgico a la derecha)

Sintaxis: SHR destino, contador Indicadores: OF DF IF TF SF ZF AF PF CF Desplaza a la derecha los bits del operando destino el nmero de los bits especificados en el segundo operando. Los bits de la izquierda se llena con cero. Si el nmero de bits a desplazar es 1 se puede especificar directamente en el caso en que no ocurra se pone el valor en CL: Ejemplos: SHR AX,CL SAR (Desplazamiento aritmtico a la derecha) Sintaxis: SAR destino, contador Indicadores: OF DF IF TF SF ZF AF PF CF Desplaza a la derecha los bits del operando destino el nmero de bits especificado en el segundo operando. Los bits de la izquierda se rellenan con el bit de signo del primer operando. Si el nmero de bits a desplazar es 1 se puede especificar directamente, si es mayor se especifica a travs de CL Ejemplos: SAR AX, CLSAR BP,1 ROL (rotacin a la izquierda) Sintaxis: ROL destino, contador Indicadores: OF DF IF TF SF ZF AF PF CF Rota a la izquierda los bits del operando destino el nmero de bits especificado en el segundo operando, que puede ser 1 CL previamente cargado con el valor del nmero de veces. Ejemplos: ROL DX,CL RCL (Rotacin a la izquierda con acarreo) Sintaxis: RCL destino, contador Indicadores: OF DF IF TF SF ZF AF PF Rotar a la izquierda los bits del operando destino junto con el indicador de acarreo CF el nmero de bits especificado en el segundo operando. Si el nmero de bits a desplazar es1, se puede especificar directamente, en caso contrario el valor debe cargarse en CL y especificar CL como segundo operando. No es conveniente que CL sea mayor de 7, en bytes; 15, en palabras. Ejemplos: RCL AX,1 RCL AL,CL RCL DI,1 ROR (rotacin a la derecha) Sintaxis: ROR destino, contador Indicadores: OF DF IF TF SF ZF AF PF CF Rota a la derecha los bits del operando destino el nmero de bits especificado en el segundo operando. Si el nmero de bits es 1 se puede poner directamente, en caso contrario debe ponerse a travs de CL. Ejemplos:

ROR CL,1ROR AX,CL RCR (Rotacin a la derecha con acarreo) Sintaxis: RCR destino, contador Indicadores: OF DF IF TF SF ZF AF PF CF Rotar a la derecha los bits del operando destino junto con el indicador de acarreo CF el nmero de bits especificado en el segundo operando. Si el nmero de bits es 1 se puede especificar directamente; en caso contrario su valor debe cargarse en CL y especificar CL como segundo operando: Ejemplos: RCR BX,CL Desarrollo Realizar un ejemplo de cada una de las instrucciones que se indican, verificar la operacin de la instruccin en el programa Turbo Debugger para ejemplificar, ejecutar y verificar resultados del conjunto de instrucciones del procesador 8088/86 de Intel. .data MSG db 'Hola,mundo!', 0Dh,0Ah,0Dh,0Ah,24h ;imprime dos newlines? TABLA DB 2,3,5,8,16,23

Fig 1.1 Capotura de pantalla de TD donde se muestran las variables que posiblemente se utilicen en para algunos ejemplos. Tambin se observa que aparecen las etiquetas declaradas con segmentos de cdigo y una direccin asignada.

Fig 1.2 Captura de pantalla TD antes de ejecutar alguna instruccin. Instruccin push
1. 2. 3. mov dx,0F10h ;Push push dx

Se movi 0f10h al registro dx, posteriormente al hacer push, se nota que el puntero de pila se decrementa de 64 a 62, y se coloca el valor de dx encima de la pila. 4. 5. ;Pop pop bx

Al hacer pop ahora se increment en 2 el puntero de pila y se transfiere a bx el ltimo valor insertado, que fue 0f10h 6. 7. ;PushF pushf

Con esta instruccin se decrementa en 2 el puntero de pila y se coloca en la cima el contenido del indicado, en este caso es 3202 8. 9. ;Popf popf

Con popf incrementa el puntero de pila en 2 y traslada al registro de los indicadores la palabra almacenada en la cima de la pila 10. ;XCHG 11. mov ax,0f0f 12. mov bx,4814 13. xchg al,bl

Con esta instruccin primero los valores que guardamos en bx y ax, los intercambio quedando como se muestra en la figura. 14. ;XLAT 15. MOV BX, OFFSET TABLA ;Inicializa BX con la direccin donde comienza la tablaMOVE AL, 5 XLAT TABLA 16. MOV AL, 5 17. XLAT TABLA De la tabla declarada anteriormente, se obtiene su direccin inicial y a al se le asigna un valor para que xlat cargue en el registro AL el contenido de la posicin [BX][AL], en donde el registro BX ha de apuntar al comienzo de una tabla. 18. ;IN 19. IN AX,0Fh

Transfiere datos del puerto indicado al registro AX, en este caso transfiri 48ff 20. ;OUT 21. OUT 12h, AX

Transfiri el contenido en AX (48ff) al puerto indicado en la salida.

Aritmticas
1. 2. 3. ;ADD mov al,10 ADD al,5

Estas instrucciones no se aprecian en turbo debugger por utilizar registros de 1 byte, pero su lo que hace el segmento de cdigo es guardar 10 en el registro al y posteriormente sumarle 5 y guardarlo en el registro al. 4. 5. 6. ;ADC mov bl,5 ADC bl,255

En esta suma si el acarreo esta en 1 lo incluye en la suma de lo que hay en bl ms 5, en este caso se aprecia que ocurre un desbordamiento por lo cual el acarreo encender.

7. 8. 9.

;INC mov al,3 inc al

Lo que se har es incrementar de 3 a 4 el valor de al. 10. ;SUB 11. mov bl,5 12. mov al,10 13. SUB al,bl Resta 5 a 19, quedando en al el numero 5, como no implico un acarreo o un signo los indicadores quedan:

14. ;SBB 15. mov bl,-100

16. sbb bl,3 Resta con signo, en este caso hace la resta y toma en cuenta el signo del contenido en el registro. 17. ;DEC 18. mov bl,5 19. DEC bl Decrementa el valor de bl a 4. 20. ;MUL 21. mov ax,2 22. mul ax Se logra una multiplicacin del contenido en el registro al, que era 1 para lograr:

23. ;IMUL 24. mov bl,-2 25. mov al,3 26. IMUL bl En esta multiplicacin se toma en cuenta el signo y se guarda en bl. 27. ;DIV 28. mov bl,2 29. mov al,4 30. DIV bl Divisin 31. ;IDIV 32. mov bl,-2 33. mov al,4 34. IDIV bl Divisin con signo, toma en cuenta el signo al realizar la divisin, 35. ;CMP 36. mov bl,8 37. CMP bl,8 sin signo

Compara si el numero fuente es igual al nmero destino, si es as pone en 1

el sig indicador

38. ;CBW 39. CBW Conversin de byte en palabra .Copia el bit 7 del registro AL en todos los bits del registro AH, es decir, expande el signo de AL a AX como paso previo a una operacin de 16 bits.

40. ;CWD 41. CWD Expande el signo del registro AX sobre el registro DX, copiando el bit ms significativo de AH en todo DX.

1. 2. 3.

;AND mov bl,0101b and bl,0101b

operacin y lgica entre el contenido en bl y el numero en binario mandado, concluye con el indicador 4. 5. ;OR or bl,1010b por no tener bl en para saber el resultado de la comparacin.

Comparacin a nivel de bits, y el resultado se guarda en bl turbodebugger se coloc en bx las comparaciones. 6. 7. ;XOR xor bl,1111b

or exclusivo, el resultado guardado en bl. Para ejemplo se us bx

8. 9.

;NOT not bl

Invierte cada bit del registro.

10. ;TEST 11. TEST bl,0101b Hace lo mismo que instruccin AND, pero no afecta el contenido de los operadores. 12. ;SHRL 13. SHL ax,1 Con esta instruccin lo que hicimos fue recorrer un bit el valor del registro especificado AX, previamente tenamos el valor 00AAh y ahora tenemos el valor 0154h, modificando a su vez las banderas z a 0, p a 0, y a = 1.

14. ;SAR 15. SAR ax,1 Esta instruccin lo que realiza es un corrimiento aritmtico a la Derecha en una posicin de AX, previamente haba 0154h y el resultado de SAR fue 00AAh.

16. ;ROL 17. rol ax,1 Esta instruccin realiza una rotacin a la izquierda del operando especificado, el resultado fue volver al 0154 que previamente se tena, simplemente estamos jugando con las instrucciones pero estamos devolviendo el valor que tena el registro AX para no perder de vista lo que realiza cada instruccin.

18. ;RCL 19. rcl ax,1 De igual manera devolvemos el valor que tenamos a AX, esta instruccin lo que realiza es un desplazamiento pero con un acarreo, pero al no especificar alguno no tiene tal efecto.

20. ;ROR 21. ror ax,1

Accin anloga a ROL pero en este caso a la derecha, previamente se tena el 0154h y ahora tenemos el valor de 00AAh en el registro AX.
22. ;RCR 23. rcr ax,1 Con esta instruccin como las anteriores mediante un corrimiento con acarreo de 0 a la derecha devolvimos el valor de 00AAh al registro AX

Conclusiones En el desarrollo de esta prctica fue importante saber usar turbo debugger, puesto a que se requera visualizar en registros; de datos, banderas, de ndice, como se comportaban las instrucciones empleadas, para comprender su funcionamiento. Un detalle que implico hacer cambios fue no encontrarse en debugger la opcin para visualizar registros de 1 byte, solo muestra por defecto los de 16 bits. Queda plasmado el uso de un nmero mayor de funciones, lo cual permitir hacer programas ms completos que se pueda requerir. Los ms importantes entre ellos es la comparacin de bits y las aritmticas. Con todo ello se da por concluido el objetivo al haber usado las instrucciones planeadas en dicha prctica.

Referencias http://es.scribd.com/doc/6643575/unidad-2-ensamblador

Vous aimerez peut-être aussi