Story Transcript
Microprocesadores. Tarea 1
1
Facultad: Ingeniería. Escuela: Electrónica. Asignatura: Microprocesadores.
TAREA 1 “ARITMETICA PARA BCD Y ASCII”. 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 equipo •
1 Computadora con el programa 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 en ASCII hexadecimal que les corresponde 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
2
Microprocesadores. Tarea 1
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 “vars”), 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” también cambie “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 (AX) 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
Microprocesadores. Tarea 1
3
PROGRAMA 2 .model small .stack .data operando1 db 36h ; 36h codigo ascii del 6 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 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
4
Microprocesadores. Tarea 1
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 “vars”), debería visualizar 3 variables: “operando1”, “operando2” y “resultadoBCD”, seleccione en las opciones de “Show as” la visualización “HEXA” para las tres variables y que solo se muestre un elemento. 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
Análisis de Resultados PROGRAMA 1 1- ¿Para qué se realiza la instrucción ADD AX, 3030h? 2- ¿En qué formato de decimal (empaquetado o no empaquetado) se da el resultado, después del ajuste, en AAA? 3- Cree un programa en ensamblador que haga el ajuste a ASCII sin utilizar la instrucción AAA 4- Hacer un programa que sume tres números de tres bytes que se recibieron por el teclado (ASCII) y quedaron almacenados a partir de la localidad 0800h, guarde el resultado en ASCII a partir de la dirección 0820h (Tenga en cuenta que los máximos números a sumar son 393939+393939+393939)
Microprocesadores. Tarea 1
5
PROGRAMA 2 1- ¿En qué formato de decimal (empaquetado o no empaquetado) se da el resultado, después del ajuste, en AX? 2- ¿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 programa de la solución). PROGRAMA 3 1- ¿En qué formato de decimal (empaquetado o no empaquetado) se da el resultado después del ajuste DAA? 2- ¿Cuál es el propósito de la suma del acumulador AH con 00h? (ADC AH, 00H) 3- Hacer un programa que sume tres números decimales de tres bytes almacenados a partir de la localidad 0900h, guarde el resultado en decimal a partir de la dirección 0920h (Tenga en cuenta que los máximos números a sumar son 999999+999999+999999) Presente las respuestas a las preguntas que se le realizaron en el procedimiento.
Investigación Complementaria •
Investigue Sobre las otras instrucciones de ajuste que tiene el microprocesador 8086: DAS, AAD y AAM
•
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.
•
Haga un programa que permita multiplicar números de 3 dígitos decimales y que brinde la respuesta en decimal.
Bibliografía • Ayuda del EMU8086 (Instrucciones del 8086). • Alfredo Rojas Ponce. Ensamblador Básico. Editorial Computec. Primera edición. 1993. Cap. 6 , pags. 177 – 191 Clasificación UDB: 001.6404 R471 1993. • Barry B. Brey. Los microprocesadores Intel, Arquitectura, programación e interfaces. Editorial Prentice Hall, Tercera Edición. Clasificación UDB: 001.6404 B847 1997.