ACTIVIDADES SEMANA 18 al 22 DE MAYO 2020 INSTRUCCIONES. Realiza correctamente las siguientes actividades y deberás subirlas a más tardar el día 18 de mayo 2020 hasta las 12:00 de la noche. Realiza correctamente la siguiente practica y contesta la actividad que aparece al final del documento. Guarda la actividad con el nombre de “EMULE8086_22.pdf” en esta misma carpeta. PRÁCTICA 4: Manejo de Instrucciones lógicas y el registro de banderas DESCRIPCIÓN: La presente práctica comprueba el funcionamiento de las instrucciones lógicas básicas, mediante la programación en lenguaje ensamblador. OBJETIVO: Programar en lenguaje ensamblador, empleando las instrucciones lógicas. AND, OR, XOR (OR exclusiva) y NOT (complemento). INTRODUCCIÓN: Las llamadas instrucciones lógicas, operan sobre cada uno de los bits de una palabra. Estas funciones son las conocidas como AND, OR, XOR (OR exclusiva) y NOT (complemento), así como las instrucciones de desplazamiento circular. Se utilizan para realizar manipulaciones del álgebra booleana en las variables. También se ocupan para poner a 1 o 0, bits específicos de una palabra y para comprobar o comparar bits. Las instrucciones lógicas son frecuentemente usadas como máscaras en los programas: XOR es frecuentemente utilizada en programas de gráficas para borrar un punto previamente dibujado en la pantalla y AND se utiliza para filtrar solamente ciertos bits de un byte dado. Otra aplicación para las funciones lógicas comunes está en la simulación de circuitos lógicos sencillos de hardware. El registro de banderas es un registro de 16 bits, usados como banderas. Cada uno de los bits señala un evento dentro del procesador; cuando el bit tiene un valor de 0, el evento no ocurrió (falso); cuando tiene un valor de 1, el evento ocurrió (verdadero). Hay nueve indicadores de un bit en este registro. Los cuatro bits más significativos están indefinidos, mientras que hay tres bits con valores determinados: los bits 5 y 3 siempre valen cero y el bit 1 siempre vale uno. 15 14 13 12 11 10 9 8 7 6 O D I T S Z 5 4 A 3 2 P 1 0 C Registro de banderas del microprocesador 8086. Aunque el registro de banderas es de 16 bits sólo hay nueve banderas: O, D, I, T, S, Z, A, P, C. Los otros 7 bits no son usados. MATERIAL Y EQUIPO A UTILIZAR: 1. Computadora con el Software Emu8086. 2. Software para diseño de diagramas de flujo (DFD u otros). DESARROLLO: La presente práctica consta de 6 puntos, las cuales deberán desarrollarse por parte del alumno (CONTESTE LAS ACTIVIDADES 1 Y 2 QUE ACONTINJUACIÓN SOLICITA): 1. Investigue en la ayuda del Emu8086 la sintaxis de las instrucciones: AND, OR, XOR y NOT y anótalo aquí AND: Logical AND between all bits of two operands. Result is stored in operand1. These rules apply: 1 AND 1 = 1 1 AND 0 = 0 0 AND 1 = 0 0 AND 0 = 0 Example: MOV AL, 'a' ; AL = 01100001b AND AL, 11011111b ; AL = 01000001b ('A') RET CZSOP 0 r r 0 r OR: Logical OR between all bits of two operands. Result is stored in first operand. These rules apply: 1 OR 1 = 1 1 OR 0 = 1 0 OR 1 = 1 0 OR 0 = 0 Example: MOV AL, 'A' ; AL = 01000001b OR AL, 00100000b ; AL = 01100001b ('a') RET CZSOPA 0 r r 0 r ? XOR: Logical XOR (Exclusive OR) between all bits of two operands. Result is stored in first operand. These rules apply: 1 XOR 1 = 0 1 XOR 0 = 1 0 XOR 1 = 1 0 XOR 0 = 0 Example: MOV AL, 00000111b XOR AL, 00000010b ; AL = 00000101b RET CZSOPA 0 r r 0 r ? NOT: Invert each bit of the operand. Algorithm: if bit is 1 turn it to 0. if bit is 0 turn it to 1. Example: MOV AL, 00011011b NOT AL ; AL = 11100100b RET CZS OPA unchanged 2. Realice diagrama de flujo y código para cada una de las instrucciones: AND, OR, XOR y NOT. Y anótalo aqui AND: Inicio AL= 01100001b AL= AL & AL Fin OR: Inicio AL= 01100001b AL= AL OR AL Fin XOR: Inicio AL= 00000111b AL= AL XOR AL Fin NOT: Inicio AL= 00011011b AL= AL NOT AL Fin Emule el programa. 3. Ejecute paso a paso, analice detenidamente el programa, comprendiendo cada una de las sentencias presentadas (en caso de tener dudas, consulte la bibliografía citada, para conocer el significado de las instrucciones utilizadas). 4. Guarde cada uno de los programas de acuerdo a NAME. 5. Conteste cada uno de los incisos que se presentan al final de los programas. A continuación, se presenta una propuesta del programa el cual deberá ser comprobado de forma práctica por parte del alumno. Programa 4.1 NAME "AND" .model small .stack Inicio .data .code AL= 01100001b INICIO: mov ax,@data AL= AL & AL mov ds,ax mov ax,0 Fin mov al, 01100001b ; and al, 11011111b ; 01000001b FIN: int 21h End Programa 4.2 NAME "OR" .model small .stack Inicio .data .code AL= 01100001b INICIO: mov ax,@data AL= AL OR AL mov ds,ax mov ax,0 Fin mov al, 01100001b ; or al, 11011111b ; 01100001b FIN: int 21h End Programa 4.3 NAME " AND 8 y 16 bits" Inicio .model small .stack DL=DATO1 AH=MASCARA1 .data mem db 10 DUP ('x') ;Inicializa 10 ;espacios de memoria con caracter 78h .code DL=DL & AH inicio: mov ax, @DATA DX=DATO2 AH=MASCARA2 mov ds, ax mov al,0FFh ;Dato mov bx,000Ah;Contador CX=CX & CX bucle: mov mem[bx],al ;copia dato ;en mem Fin dec bx ;Decrementa BX jnz BUCLE ;Repite si la ;bandera Z= 0 mov ax,4C00h int 21h end 1. Compile y ejecute el programa paso a paso, monitoreando el registro de banderas (FLAGS). Anote los datos con los que se opera, los resultados y las banderas que se activan. PF=1: este indicador se establece en 1 cuando hay un número par de un bit en el resultado. ZF=1: se establece en 1 cuando el resultado es cero. Se tiene el siguiente código en lenguaje ensamblador, perteneciente a un microprocesador de la familia 80x86, que comprende algunas de las instrucciones lógicas elementales, que hacen diversas manipulaciones con los bits de los registros utilizados. NAME "Operaciones lógicas con procedimientos" ; Programa que ilustra las operaciones lógicas: AND / OR / XOR / NOT stack segment para stack db 64 dup ('mystack ') stack ends mydata segment para 'data' in1 db 10111010b in2 db 11111100b in3 db 00010100b in4 db 00010011b ans db ? mydata ends mycode segment para 'code' ;define segmento código para masm myproc proc far ;procedimiento se llama myproc assume cs:mycode, ds:mydata, ss:stack push ds ;guardar posición de reg. ds sub ax,ax ;pone un cero en ax push ax ;guarda cero en pila, tambien mov ax,mydata ;pone posición de dato en ax mov ds,ax ;lo pone en registro ds ;ejemplo de sintesis de puertas lógicas mov al,in1 ;carga primera entrada enal not al ;invierte bits de al mov ah,in2 ;carga segunda entrada en ah or al,ah ;or las dos mov bl,in3 ;carga tercera entrada en bl and bl,in4 ;y en los dos xor al,bl ;salidas de puertas ex-or mov ans,al ;guarda resultado en ans ;ejemplo completo de sintesis de puerta ret ;devuelve control a dos myproc endp ;fin del procedimiento llamado myproc mycode ends ;fin del segmento código llamado mycode end myproc ;fin del programa completo CONCLUSIONES: Contesta las siguientes preguntas conforme a los programas que corriste en EMULE 8086 a) b) c) d) ¿Cuál es el resultado del registro AL, después de la sentencia NOT AL? BA ¿Cuál es el resultado del registro AL, después de la sentencia OR Al, AH? FC ¿Cuál es el resultado del registro BL, después de la sentencia AND BL, IN4? 14 ¿Cuál es el resultado del registro BL, después de la sentencia XOR AL, BL? 10 REFERENCIAS Requerida Estructura de computadores: programación del procesador MIPS y su ensamblador. Álvarez Bermejo, J. A. 2009. Assembler tutorials. Incluido en el programa Emu8086. Sugerida Lenguaje ensamblador para computadoras basadas en INTEL. Irvine, K. R. 2008.