Guía
4
Aritmética Para BCD Y ASCII
Objetivo General -
Utilizar el programa EMU8086 para operaciones aritméticas decimales
simular el
comportamiento de las
Objetivos específicos -
Conocer el manejo de los caracteres ascii para la presentación en pantalla de los resultados. Practicar el uso de ajustes para las operaciones aritméticas en modo decimal.
Materiales y equipos -
Computadora con el EMU8086.
Procedimiento 1- Abra el emu8086 2- Revise la sintaxis de las instrucciones AAA, AAS y DAA en el simulador pulsando la tecla F1 y dando clic en el título “8086 Instruction set”. 3- Minimice la ventana y regrese al emulador, en la barra de menú seleccione “ascii codes” e identifique en la tabla de caracteres ASCII los números correspondientes a los números del 0 al 9 y anótelos a continuación (al dar clic en cualquier parte de la ventana puede intercambiar entre ver los datos ASCII en su correspondiente decimal o hexadecimal): _____________________________________________________________________ _____________________________________________________________________ 4- Digite el PROGRAMA 1 en el simulador: este es un ejemplo de uso de AAA
1
Guía
4
PROGRAMA 1 .model small .stack .data operando1 db 39h ; 39h codigo ascii del 9 decimal operando2 db 39h resultadoascii db 2 dup (?) ;reserva dos byte para el resultado .code mov ax, @DATA ;indica donde estan los datos que se van a operar mov ds, ax mov ax,0 mov al,operando1 add al,operando2 aaa ;ajuste ascii despues de sumar 2 bytes ascii add ax,3030h mov resultadoascii, ah mov resultadoascii+1,al mov ax,4c00h int 21h
end 5- Dé clic sobre EMULATE y abra la ventana de variables (en el botón VAR), debería visualizar 3 elementos: Operando1, Operando2 y resultadoascii, seleccione en las opciones de “Show as” de cada variable, la visualización “ASCII”, en la variable resultadoascii tambien cambien elements a 2. 6- Corra el programa paso a paso hasta antes de ejecutar la operación AAA, observe el estado del acumulador y de las banderas, especialmente AF ____________________ 7- Ejecute la instrucción de ajuste y observe el estado del acumulador y las banderas en este momento especialmente CF y AF ____________________ 8- Ejecute todo el programa 9- Observe el contenido de la variable resultadoascii 10- Modifique el programa anterior poniendo como operandos los números 34h y 32h 11- Repita el procedimiento de los pasos 5 al 9 y describa las diferencias en los estados del acumulador y las banderas AF y CF 12- Copie el PROGRAMA 2 que es una aplicación del ajuste AAS
2
Guía
4
PROGRAMA 2 .model small .stack .data operando1 db 36h ; 39h codigo ascii del 9 decimal operando2 db 32h resultadoascii db 2 dup (?) ;reserva dos byte para el resultado .code mov ax, @DATA ;indica donde estan los datos que se van a operar mov ds, ax mov ax,0 mov al,operando1 sub al,operando2 aas add ax,3030h mov resultadoascii, ah mov resultadoascii +1, al mov ax,4c00h int 21h
end
13- Repita el paso 5. 14- Corra el programa paso a paso hasta antes de ejecutar la operación AAS, observe el estado del acumulador y de las banderas, especialmente AF y CF _________________________________ 15- Ejecute la instrucción de ajuste y observe el estado del acumulador y las banderas en este momento especialmente CF y AF ____________________ 16- Ejecute todo el programa 17- Observe el contenido de la variable resultadoascii 18- Cambie los operandos de modo que el operando2 sea mayor que operando1 y ejecute el programa ¿por qué se da este resultado? 19- Copie el PROGRAMA 3 que es una aplicación de ajuste DAA
3
Guía
4
PROGRAMA 3 .model small .stack .data operando1 db 99h operando2 db 98h resultadoBCD dw 0 .code mov ax, @DATA ;indica donde estan los datos que se van a operar mov ds, ax mov ah,00 mov al,operando1 mov bl,operando2 add al,bl daa adc ah,00 mov resultadoBCD, AX mov ax,4c00h int 21h
end 20- Dé clic sobre EMULATE y abra la ventana de variables (en el botón VAR), debería visualizar 3 variables: Operando1, Operando2 y resultadoBCD, seleccione en las opciones de “Show as” la visualización “HEXA” para las tres variables. 21- Corra el programa paso a paso hasta antes de ejecutar la operación DAA, observe el estado del acumulador y de las banderas, especialmente AF y CF ____________________ 22- Ejecute la instrucción de ajuste y observe el estado del acumulador y las banderas en este momento especialmente CF y AF ____________________ 23- ¿Cuál es el propósito de la suma del acumulador AH con 00h? (ADC AH, 00H) 24- Ejecute todo el programa 25- Observe el contenido de la variable resultadoBCD 26- Cambie los operandos por cualquier dato comprendido entre 01h y 99h y compruebe los resultados
4
Guía
4
Análisis de resultados PROGRAMA 1 1- ¿Para qué se realiza la instrucción ADD AX, 3030h? 2- ¿Cómo se podría hacer el ajuste a ascii si no se tuviera la instrucción AAA? 3- ¿En qué formato de decimal (empaquetado o no empaquetado) se da el resultado, después del ajuste, en AX? PROGRAMA 2 1- ¿Cómo se podría realizar el ajuste a ascii si no se tuviera la instrucción AAS? 2- ¿En qué formato de decimal (empaquetado o no empaquetado) se da el resultado, después del ajuste, en AX? 3- ¿Cómo puede arreglarse el hecho de tener un resultado negativo en el programa y que no me afecte la presentación del resultado en pantalla? (Haga un algoritmo o flujograma de la posible solución). PROGRAMA 3 1- ¿En qué formato de decimal (empaquetado o no empaquetado) se da el resultado después del ajuste DAA? 2- ¿Cómo se podría realizar el ajuste decimal sin tener que utilizar la instrucción DAA? 3- ¿Cuál es el propósito de la suma del acumulador AH con 00h? (ADC AH, 00H)
Investigación complementaria 1- Investigue Sobre los otras instrucciones de ajuste que tiene el microprocesador 8086: DAS, AAD y AAM 2- Investigue cómo convertir un número de decimal a hexadecimal y trate de hacer un programa de conversión con números ascii como entrada para este programa, pueden ser de 8 bits. 3- Haga un programa que permita multiplicar números de 3 dígitos decimales y que brinde la respuesta en decimal.
Bibliografía 1- Ayuda del EMU8086 (Instrucciones del 8086) 2- Alfredo Rojas Ponce. Ensamblador Básico. Editorial Computec. Primera edición. 1993. Cap. 6 , pags. 177 – 191 3- Barry B. Brey. Los microprocesadores Intel, Arquitectura, programación e interfaces. Editorial Prentice Hall, Terc
5