Ingeniería en Sistemas Computacionales
Lenguajes de interfaz
Profesor: José Felipe Escobedo Magallán
Práctica 6:
Integrantes de Equipo:
Carlos David Cerda Díaz
Fecha de Realización: 24/10/2024
PRÁCTICA 6 LENGUAJES DE INTERFAZ
Objetivo: Crear un programa que solicite dos números decimales de dos
dígitos para realizar una suma aritmética, utilizando el servicio de captura
de teclado y de desplegado de información por monitor.
Herramienta de software: EMU8086
Desarrollo:
Añada el código que haya escrito en la práctica, junto con una captura de
pantalla de la visualización de la información del emulador.
1.- Escribir un programa que imprima en pantalla las siguientes líneas de
caracteres:
“Escribe un número decimal de dos dígitos: ”
“Escribe otro número decimal de dos dígitos: ”
2.- En el programa anterior, añadir el servicio de captura de teclado
(servicio 0Ah de la interrupción 21h) para que el programa pueda recibir
los caracteres de los números decimales solicitados.
3.- Modificar el programa para que los valores de los caracteres recibidos
por teclado se guarden en las direcciones de memoria [0700h] y [0701h].
mov al, numero1[2]
mov [0700h], al
mov al, numero2[2]
mov [0701h], al
4.- Añadir el código de programa necesario para hacer la conversión a
números de los caracteres guardados en las direcciones de memoria
[0700h] y [0701h]. Puede utilizar cualquier método para la conversión de
caracteres a números. Guardar los resultados de las conversiones en las
localidades [0710h] y [0711h].
5.- Realizar la suma aritmética de los números guardados en las
localidades [0710h] y [0711h], y guardar el resultado en la localidad de
memoria [0715h].
6.- Convertir el número del resultado de la suma guardado en la dirección
de memoria [0715h] a número decimal. Utilizar cualquier método para
realizar la conversión. Guarde el número decimal en las localidades
[0717h] y [0718h].
7.- Separar los dígitos del número decimal guardado en las localidades
[0717h] o [0718h]. Las centenas del número decimal deben guardarse en
la dirección de memoria [070Ah], las decenas del número decimal deben
guardarse en [070Bh] y las unidades en [070Ch].
8.- Imprimir en pantalla el resultado de la suma aritmética de los dos
números decimales tecleados, con la siguiente cadena de caracteres:
“El resultado de la suma es: ”
Las conclusiones son individuales, máximo 2 integrantes por equipo. La
extensión de las conclusiones debe ser por lo menos de media cuartilla,
de lo contrario se bajarán puntos.
Conclusiones:
Carlos David Cerda Díaz:
En esta práctica, implementamos los conceptos vistos en clase para
trabajar con la manipulación de caracteres y números en lenguaje
ensamblador, específicamente en el contexto de la conversión de
caracteres ASCII a valores decimales y viceversa. La tarea principal
consistió en permitir que el usuario ingresara dos números de dos cifras,
los cuales debían ser procesados adecuadamente para realizar una
operación aritmética (suma) y, finalmente, mostrar el resultado en
pantalla.
Primero, fue necesario recibir la entrada de dos dígitos en formato ASCII,
algo que ya habíamos abordado en prácticas anteriores. Sin embargo,
esta vez debíamos aplicar un paso adicional para transformar estos
caracteres en valores numéricos decimales, algo que requiere un
entendimiento preciso de cómo funcionan los datos en el sistema binario
del procesador. Cada carácter ingresado (del 0 al 9) representa un código
ASCII que debe ser convertido a su valor numérico real para poder operar
con él aritméticamente. Para ello, restamos el valor ASCII de '0' que en
decimal es el 48, que en hexadecimal es 30 a cada carácter, obteniendo
así el valor decimal correspondiente. Esta operación de conversión fue un
paso fundamental para asegurar que los datos se encuentren en el
formato adecuado para la suma.
Una vez convertidos los caracteres, los almacenamos en registros
temporales para facilitar la manipulación. Un reto importante en esta
práctica fue dividir correctamente las cifras en unidades y decenas, lo cual
es crucial en una arquitectura de procesador como la que estamos
usando.
Luego de obtener los dos números en formato decimal, procedimos a
realizar la suma aritmética.
La suma de dos cifras decimales en registros separados y su
almacenamiento en un único registro de resultado fue un ejercicio valioso
en la manipulación de registros y en la organización de los datos en
ensamblador.
El siguiente desafío fue aplicar un método inverso al resultado, es decir,
convertir el resultado numérico de la suma de nuevo a caracteres ASCII
para poder mostrarlo en pantalla. Esta fase de reconversión implica dividir
el resultado en dígitos individuales y transformar cada dígito a su
correspondiente carácter ASCII. Para esto, usamos una técnica de
división repetida, en la cual cada dígito del número se separa mediante
divisiones sucesivas y se convierte en un valor ASCII sumándole el código
de '0'(explicado anteriormente). Posteriormente, almacenamos estos
dígitos en la pila para poder imprimirlos en el orden correcto.
Finalmente, utilizamos los servicios de impresión en pantalla y captura de
datos por teclado mediante interrupciones, que ya habíamos explorado en
prácticas anteriores.
En conclusión, esta práctica fue un excelente ejercicio de aplicación de
los conocimientos adquiridos en clase, ya que nos permitió explorar a
fondo la manipulación de caracteres y números en el entorno de bajo nivel
del ensamblador. A través de la conversión de caracteres ASCII a valores
decimales, la organización de datos en registros y la implementación de
una operación aritmética básica.
Aunque esta práctica fue difícil, especialmente en lo referente a la
separación y conversión de unidades y decenas, el proceso nos brindó
una perspectiva más clara de la precisión y el control que requiere la
programación en ensamblador.