Guía Instrucciones Aritméticas 3 Facultad: Estudios Tecnologicos. Escuela: Electrónica Asignatura: Microprocesadores Objetivo General Analizar la forma en que se ejecutan algunas instrucciones aritméticas y de manejo de la PILA. Objetivos Específicos Observar el uso de algunas instrucciones aritméticas y las banderas que son afectadas. Identificar las banderas que afecta cada instrucción observada. Utilizar correctamente los registros del microprocesador al realizar operaciones aritméticas, tanto de 8 bits como de 16 bits. Analizar detenidamente el proceso de cada operación. 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) Analice el PRIMER PROGRAMA, note que al inicio se declaran los datos. ¿Con qué datos se realizarán las operaciones y cuales serán los resultados? ¿Dónde se almacena el resultado al final de las operaciones? __________________________________________________________________ __________________________________________________________________ 1 Guía 3 2 PRIMER PROGRAMA #make_COM# org 100h byte1 equ 125 INICIO byte2 equ 150 word1 equ 20A3h word2 equ 5938h mov al, byte1 ;suma de 2 números de 1 byte add al, byte2 mov [011Eh], al AL = byte1 AL = AL + byte2 M[011Eh] = AL mov ax, word1 ;suma de 2 números de 2 byte add ax, word2 mov [011Fh], ax AX = word1 AX = AX +word2 M[011Fh] = AX FIN ret END 4) Digite y emule el programa 5) Antes de ejecutar el programa tome nota del contenido almacenado en las direcciones 011Eh, 011Fh y 0120h en la TABLA 1, también del estado de las banderas. 6) Ejecute paso a paso el programa, anotando la información solicitada en la TABLA 1, observando el resultado de las operaciones y el estado de las banderas ¿Concuerda el resultado lo que usted esperaba? _______ MOMENTO DIRECCIONES 011Eh 011Fh 0120h O BANDERAS S Z A P C Inicio Después del 1ª suma Antes de la 2ª suma Después de la 2ª suma Después del último MOV TABLA 1 7) Cargue nuevamente el programa e invierta manualmente el estado del acarreo. 8) Ejecute paso a paso hasta la primera suma. ¿Cambió el resultado de la operación? _____ 9) Continúe ejecutando el programa hasta la segunda suma ¿Se dio algún cambio? ______ Guía 3 10) Modifique el código fuente sustituyendo las instrucciones ADD por ADC y emule nuevamente el programa. 11) Repita desde el paso 7 y compare con los resultados previos. ¿Qué resultados se modificaron?, ¿qué parte no?, ¿por qué cree que se dieron esos cambios específicos en los resultados? __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ 12) Modifique el programa para que funcione como al inicio, pero cambie los datos con los siguientes valores: byte1 equ 9Dh byte2 equ 83h word1 equ 5938 word2 equ -5938 13) Corra a pasos el programa observando la ejecución de cada instrucción y el estado de las banderas. ¿Cuál fue el resultado de las operaciones?, ¿Cómo reaccionaron las banderas? y ¿por qué así y no de otra manera? __________________________________________________________________ __________________________________________________________________ 14) Analice el SEGUNDO PROGRAMA, ¿dónde se almacena el resultado de las operaciones? ¿cuál es el resultado de las mismas? __________________________________________________________________ __________________________________________________________________ SEGUNDO PROGRAMA #make_COM# org 100h byte1 equ 80 byte2 equ 69 word1 equ 26437 word2 equ 325 mov cl, byte1 ;resta de 2 números de 1 byte sub cl, byte2 mov dx, word1 ;resta de 2 números de 2 byte sub dx, word2 3 Guía END INICIO 3 4 ret CL = byte1 CL = CL + byte2 DX = word1 DX = DX - word2 FIN 15) Digite y emule el programa tomando nota del valor de los minuendos y sustraendos (en formato hexadecimal) con que se realizarán las operaciones en la TABLA 2. 16) Ejecute paso a paso el programa, observando los resultados de las operaciones y el estado de las banderas. Anote estos valores en la TABLA 2. 17) Modifique el programa para que se invierta el orden de la operación, de forma que el minuendo pasa a ser sustraendo y viceversa. Repita el paso anterior tomando nota en la segunda fila de la TABLA 2. 18) Repita los pasos 16 y 17, pero esta vez active manualmente el acarreo antes de cada resta ¿observa cambios en las operaciones? 19) Cambie el programa para que funcione como al principio. 20) Sustituya las instrucciones SUB por SBB y repita los pasos anteriores. Complete la TABLA 2. ¿Qué diferencias nota entre la ejecución de la instrucción SUB y SBB? __________________________________________________________________ __________________________________________________________________ Instrucción Prueba Minuendo Sustraendo Diferencia O S Z A P C 1º SUB 2º 3º SBB 4º TABLA 2 21) Analice el TERCER PROGRAMA ¿qué registros están involucrados en el proceso? ¿qué datos se van a operar? ¿dónde se almacenará el resultado? __________________________________________________________________ __________________________________________________________________ Guía 3 __________________________________________________________________ TERCER PROGRAMA #make_COM# INICIO org 100h INICIO: AH = AAh mov ah, 0AAh ;multiplica 2 números de 1 byte mov al, 0FFh AL = 0FFh CL = 06h mov cl, 06 mul cl AX = (AL) X (CL) FIN ret END 22) Digite y emule el TERCER PROGRAMA 23) Ejecute paso a paso, analizando el proceso. Anote los resultados en la primera fila de la TABLA 3 ¿Coinciden los resultados con lo que esperaba? __________________________________________________________________ Instrucción Dato Multiplicando 06 MUL -06 06 IMUL -06 TABLA 3 Multiplicador Producto 5 Guía 3 24) Modifique el dato de CL colocando -06 y ejecute nuevamente el programa. Anote los resultados en la TABLA 3. 25) Cambien la instrucción MUL por IMUL y el dato -06 por 06. 26) Ejecute el programa y anote los resultados. 27) Cambie el dato por -06, ejecute nuevamente y anote los resultados 28) Analice el CUARTO PROGRAMA ¿qué registros están involucrados en el proceso? ¿qué datos se van a operar? ¿dónde se almacenará el resultado? __________________________________________________________________ __________________________________________________________________ 29) Realice el mismo procedimiento del TRECER PROGRAMA, pero ahora el dato que será cambiado es 05 y la operación DIV por IDIV. Anote sus resultados en la TABLA 4. CUARTO PROGRAMA INICIO #make_COM# org 100h INICIO: mov ax, 123 ;multiplica 2 números de 1 byte AX = 123 mov cl, 05 ;Dato CL = 05 div cl AH(res),AL(cos) = (AL) ÷ (CL) ret FIN END Instrucción Dato Dividendo Divisor Cociente Residuo 05 DIV -05 05 IDIV -05 TABLA 4 30) Cambie el dato por 00h y ejecute el programa ¿qué ocurrió? ______ 6 Guía 3 Análisis de resultados a) Primer programa Tomando en cuenta los datos particulares de cada operación explique el porque de la activación o desactivación de las banderas O, S, Z, C y A. Explique porque los resultados de las operaciones cambiaron al usar ADC en lugar de ADD. Utilice cálculos para fundamentar su explicación. b) Segundo programa Al ejecutar una resta las banderas C y A reaccionan diferente si el minuendo es mayor o menor al sustraendo, explique el porque basándose en el concepto de préstamo. Explique porque los resultados de las operaciones cambiaron al usar SBB en lugar de SUB. Utilice cálculos para fundamentar su explicación. c) Tercer programa ¿Cómo se especifica en una instrucción de multiplicación que se desea trabajar con números de un byte? En qué registros se almacenan los datos y el resultado de una multiplicación de un byte? Explique porque los resultados de las operaciones cambiaron al usar IMUL en lugar de MUL. Utilice cálculos para fundamentar su explicación. d) Cuarto programa ¿Cómo se especifica en una instrucción de división que se desea trabajar con números de un byte? En qué registros se almacenan los datos y el resultado de una división de un byte? Explique porque los resultados de las operaciones cambiaron al usar IDIV en lugar de DIV. Utilice cálculos para fundamentar su explicación. ¿Por qué la última modificación del programa generó un error en la ejecución? Investigación complementaria Compare el funcionamiento de la directiva EQU con DB. Investigue como se puede realizar una multiplicación de dos números de dos bytes cada uno. Investigue como se puede realizar una división de dos números de dos bytes cada uno. Diseñe dos flujo-gramas que representen el proceso para sumar dos números de 4 bytes cada uno, en el primero se trabajará con registros de 16 bits y en el segundo de 8 bits. 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 7 Guía 3 Godfrey, T. Lenguaje Ensamblador para Microcomputadoras IBM : Para Principiantes y Avanzados, Prentice Hall, México DF, 19911 Biblioteca UDB 005.136 G577 1991 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 8