Guía Instrucciones Lógicas y Registro de Banderas 2 Facultad: Estudios Tecnologicos. Escuela: Electrónica Asignatura: Microprocesadores Objetivo General Analizar la forma en que se ejecutan algunas instrucciones lógicas observando como éstas afectan al registro de estados. Objetivos específicos Examinar detenidamente la manera en que se ejecutan algunas instrucciones lógicas Analizar la manera en que se modifica el registro de banderas, dependiendo del tipo de operación y los datos que operen. Identificar las características propias de las máscaras que se utilizan junto con las instrucciones lógicas. Materiales y equipos Guía de laboratorio Computadora PC con el programa EMU8086 Procedimiento 1) Ejecute el programa emulador de microprocesadores EMU8086, haciendo doble clic en el icono del escritorio. 2) Cree un nuevo documento tipo COM 3) Digite el PRIMER PROGRAMA, recuerde que el encabezado es necesario para crear un archivo COM. En esta guía de laboratorio se declararán datos de diferentes maneras, no los pierda de vista. 1 Guía 2 PRIMER PROGRAMA NOTA: en este programa se están usando la instrucción con registros de 8 y 16 bits, así como las directivas DB y DW. #make_COM# org 100h INICIO INICIO: mov dl, dato1 ;primera parte mov ah, masca1 DL = dato1 AH = mascara1 and dl, ah DL =DL & AH mov cx, dato2 ; segunda parte mov bx, masca2 DX = dato2 BX = mascara2 and cx, bx CX =CX & BX CX =CX & CX FIN dato1 dato2 mascara1 mascara2 END and cx, cx ret db 9Ah dw 02CC2h db 0F0h dw 0F0Fh 4) Compile y ejecute el programa paso a paso, monitoreando el registro de estados (FLAGS) luego de cada operación AND. Anote los datos con los que se opera, los resultados y las banderas que se activan. __________________________________________________________________ __________________________________________________________________ 5) Modifique las líneas que contienen la instrucción AND, sustituyéndola por la instrucción OR. Repita desde el paso 4. __________________________________________________________________ __________________________________________________________________ 6) Sustituya ahora por la instrucción XOR y repita el paso 4. __________________________________________________________________ __________________________________________________________________ 7) Digite el SEGUNDO PROGRAMA, que está dividido en dos partes. 8) Ejecute paso a paso el primer bloque. Anote los datos con los que se realizan las operaciones y los resultados de las mismas, los registros que intervienen en el proceso y el estado de las banderas en cada paso del proceso. __________________________________________________________________ 2 Guía 2 __________________________________________________________________ SEGUNDO PROGRAMA #make_COM# org 100h INICIO INICIO: mov dl, 1Ah mov ax, 02CC2h DL = 1Ah AX = 02CC2h ;primer bloque xor dl, ah DL = DL XOR AH xor dl, 0FFh DL = DL XOR 0FFh mov dl, 1Ah mov ax, 2CC2h DL = 1Ah AX = 02CC2h ;segundo bloque xor dl, ah DL = DL XOR AH not dl DL = NOT DL ret FIN END 9) Ejecute ahora el segundo bloque y anote los datos con los que se opera, los resultados y las banderas que se activan durante el proceso. __________________________________________________________________ __________________________________________________________________ 10) Modifique la tercera y séptima instrucción del programa escribiendo xor ah, dl 11) Repita los pasos 8 y 9 ¿qué diferencias nota? __________________________________________________________________ __________________________________________________________________ 3 Guía 2 12) Como se ha visto en los programas anteriores, algunas de las banderas se activan del resultado de una instrucción. Pero también algunas banderas se pueden activar o desactivar mediante instrucciones específicas, sin tomar en cuenta el resultado de alguna operación. Como un ejemplo inserte la siguiente modificación en el SEGUNDO PROGRAMA: mov dl, 1Ah mov ax, 02CC2h xor dl, ah xor dl, 0FFh stc ;Activa la bandera C std ;Activa la bandera D cli ;Desactiva la bandera I mov dl, 1Ah mov ax, 2CC2 clc ;Desactiva la bandera C cld ;Desactiva la bandera D sti ;Activa la bandera I xor dl, ah 13) Ejecute paso a paso el programa monitoreando simultáneamente el estado de las banderas, note como se activan o desactivan. ¿Cuáles son sus conclusiones? __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 14) Digite el TERCER PROGRAMA: 15) Ejecute solo las primeras dos instrucciones, monitoreando las banderas ¿Cuáles se activaron?, ¿cuál fue el resultado de la operación? ¿cómo interpreta el resultado? __________________________________________________________________ __________________________________________________________________ 4 Guía 2 TERCER PROGRAMA INICIO #make_COM# org 100h INICIO: AH = 0B9h mov ah, 0B9h ;En binario 1011_1001 AH = AH AND 40h and ah, 40h ;Mascara 0100_0000 ;Si Z=1 implica que D6=0 or ah, 01 ;borra las banderas activas AL = AL OR 01 AH = 0B9h mov ah, 0B9h AH = AH TEST 40h test ah, 40h FIN ret END 16) Ejecute hasta la instrucción TEST y conteste otra vez las preguntas del punto 15 del procedimiento. __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 17) En las instrucciones 2ª y 5ª cambie los dos datos 40h por 08h y repita los pasos del 14 al 16, ¿cómo se modificó el resultado del programa? Anote su respuesta. __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ Análisis de resultados a) Primer programa. ¿Qué objetivos se buscan al usar la mascara1 (F0h) con las tres diferentes instrucciones lógicas? Cuando se ejecuta la primera instrucción AND el bit D7 termina en estado alto y se activa la bandera S, en la segunda instrucción AND también termina en alto, pero esta vez no se activa la bandera ¿por qué? 5 Guía 2 Cuando se ejecuta la tercera instrucción lógica, ya sea AND u OR, las banderas reaccionan de forma similar. Pero cuando se ejecuta con la instrucción XOR no ¿por qué ocurre eso? En el programa se declaran datos para hacer las operaciones ¿dónde se guardan estos datos? b) Segundo programa. Cuando se ejecutan el primer bloque del programa el resultado se almacena en DL, lo mismo curre con el segundo bloque; los dos resultados son idénticos, pero el estado de las banderas no lo es ¿por qué? Al modificar el programa, tanto los resultados como las banderas terminaron en distintos estados ¿cuáles fueron los cambios específicos que observo? c) Tercer programa. ¿Cuál es la diferencia fundamental que noto a comparar las instrucciones AND y TEST? ¿Qué relación existe entre los bit que deseamos probar y el valor específico de la mascara seleccionada? Tarea complementaria En el programa se declaran algunos datos que serán operados ¿dónde se almacenan estos datos? Investigue que son las directivas DB y DW Escriba un programa que dado un dato almacenado en AX invierta el estado de los bits impares desde el D5 hasta el D1, borre los bits pares desde el D6 hasta el D2 y coloque en 1 los bits D7 y D0 Bibliografía Brey, B. B. Los Microprocesadores Intel. 8086 / 8088, 80186, 80286, 80386 y 80486. Arquitectura, programación e interfaces, Prentice Hall, México DF, 19953 Biblioteca UDB 001.6404 B847 1997 Puede consultar el material en línea del EMU8086 sobre los temas de esta actividad. Se recomiendan: “Arithmetic and logic instructions ”, http://www.emu8086.com/assembly_language_tutorial_assembler_reference/a sm_tutorial_06.html 6