Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Porcentaje Nota
1-Introduccion(máximo una página) 5%
2-Objetivos (1general,2 específicos) 5%
3-Marco Teórico(máximo 2 paginas) 10 %
4-Desarrollo de la practica 10 %
5-Asignaciones 40 %
a)Hello Word
b)Identificador de caracteres
c)Operaciones aritméticas
d)Comparador
e)Banderas
f)Investigaciones
6)Conclusiones 30 %
NOTA FINAL
UNIVERSIDAD DE EL SALVADOR
FACULTAD DE INGENIERIA Y ARQUITECTURA
ESCUELA DE INGENIERIA ELECTRICA
SISTEMAS DIGITALES PROGRAMABLES I
CATEDRATICO:
ING. RICARDO CORTEZ
INSTRUCTOR:
ENRIQUEZ LORENZO
ALUMNOS:
HERRERA GARCIA, WILLIAM ALBERTO HG10045
PEREZ, DAVID JONATHAN PP09020
Específicos:
Aprender los conceptos de registros y banderas los cuales pueden ser utilizados y
manipulados con las instrucciones aprendidas.
Marco teórico.
El lenguaje ensamblador, o assembler (en inglés assembly language y la abreviación asm), es un
lenguaje de programación de bajo nivel. Consiste en un conjunto de mnemónicos que
representan instrucciones básicas para los computadores, microprocesadores,
microcontroladores y otros circuitos integrados programables. Implementa una representación
simbólica de los códigos de máquina binarios y otras constantes necesarias para programar una
arquitectura de procesador y constituye la representación más directa del código máquina
específico para cada arquitectura legible por un programador. Cada arquitectura de procesador
tiene su propio lenguaje ensamblador que usualmente es definida por el fabricante de hardware,
y está basada en los mnemónicos que simbolizan los pasos de procesamiento (las instrucciones),
los registros del procesador, las posiciones de memoria y otras características del lenguaje. Un
lenguaje ensamblador es por lo tanto específico de cierta arquitectura de computador física (o
virtual). Esto está en contraste con la mayoría de los lenguajes de programación de alto nivel,
que idealmente son portátiles.
Un programa utilitario llamado ensamblador es usado para traducir sentencias del lenguaje
ensamblador al código de máquina del computador objetivo. El ensamblador realiza una
traducción más o menos isomorfa (un mapeo de uno a uno) desde las sentencias mnemónicas a
las instrucciones y datos de máquina. Esto está en contraste con los lenguajes de alto nivel, en
los cuales una sola declaración generalmente da lugar a muchas instrucciones de máquina.
Fue usado principalmente en los inicios del desarrollo de software, cuando aún no se contaba
con potentes lenguajes de alto nivel y los recursos eran limitados. Actualmente se utiliza con
frecuencia en ambientes académicos y de investigación, especialmente cuando se requiere la
manipulación directa de hardware, alto rendimiento, o un uso de recursos controlado y reducido.
También es utilizado en el desarrollo de controladores de dispositivo (en inglés, device drivers) y
en el desarrollo de sistemas operativos, debido a la necesidad del acceso directo a las
instrucciones de la máquina. Muchos dispositivos programables (como los microcontroladores)
aún cuentan con el ensamblador como la única manera de ser manipulados.
Instrucciones de CPU.
La mayoría de las CPU tienen más o menos los mismos grupos de instrucciones, aunque no
necesariamente tienen todas las instrucciones de cada grupo. Las operaciones que se pueden
realizar varían de una CPU a otra. Una CPU particular puede tener instrucciones que no tenga
otro y viceversa. Los primeros microprocesadores de 8 bits no tenían operaciones para
multiplicar o dividir números, por ejemplo, y había que hacer subrutinas para realizar esas
operaciones. Otras CPU puede que no tengan operaciones de punto flotante y habría que hacer
o conseguir bibliotecas que realicen esas operaciones.
4. Presione la viñeta [SINGLE STEP] o la tecla F8 y observe con atención como se ejecuta
el código del programa.
Ahora se usara la opción “single step” en las siguientes 3 imágenes más significativas.
a. Al presionar un par de veces mandamos la instrucción para que aparezca la
consola o ventana donde se escribirá “Hello World”.
Figura 1.1 Se muestra la primera letra H después de ejecutar la instrucción MOV [52h], ‘H’
Una vez que hayamos realizado 5 steps o pasos podremos ver la palabra HELLO completamente
en pantalla, esto sucede después de haber ejecutado las 5 instrucciones MOV:
Figura 1.2 Se muestra la palabra HELLO completa después de haber ejecutado las 5
instrucciones MOV en direcciones que representan posiciones en la pantalla.
Primero observamos la instrucción PUSH y POP con las cuales podemos hacer uso del STACK
donde podemos almacenar una palabra (16 bits) con PUSH y sacarlo del STACK con POP.
Se vuelve a inicializar la memoria de video en el registro acumulador AX y luego se copian los
valores de AX en el registro de segmento extra ES.
1.3 Se utiliza las instrucciones PUSH y POP para poder ingresar datos a la pila y también
tomarlos.
Finalmente podemos observar que se ejecutan 6 instrucciones MOV con la intención de mostrar
el string “WORLD!” mostrando una pequeña variación en la sintaxis a la anterior (HELLO),
haciendo uso del registro de segmento extra ES donde los valores en hexadecimales representan
posiciones en la pantalla.
Figura 1.4 Una vez se han ejecutado las 6 instrucciones MOV las cuales muestran la palabra
WORLD! En pantalla el pequeño programa desarrollado en lenguaje ensamblador se detiene
con la instrucción HLT.
2- Diseñe un programa el cual solicite el ingreso de 10 caracteres (5 números de un
digito y 5 letras, las cuales deben de ser vocales), los números deben ser
almacenados en la tabla NUMS y las vocales en la tabla VCLS, y luego se deben de
mostrarse en pantalla los elementos de la tabla NUMS y de la tabla VCLS, en el orden
que fueron ingresado.
Nota: en nuestro código se sustituyó el nombre de la tabla NUMS por NUMB y VCLS
por VOWS respectivamente.
Código comentado.
Corrida del programa
Es un registro de 16 bits, de los cuales nueve sirven para indicar el estado actual de la máquina y
el resultado del procesamiento. Muchas instrucciones aritméticas y de comparación cambian el
estado de las banderas y apoyándose en ellas se pueden tomar decisiones para determinar la
acción subsecuente.
La tabla contiene 16 posiciones (de 0 a 15), que son los 16 bits del registro de banderas,
numeradas de derecha a izquierda. La posición 0 la encontraremos a la derecha y la posición 15
a la izquierda.
Los bits de las banderas son las siguientes:
IF (interrupción): Controla el disparo de las interrupciones (1=habilita las interrupciones;
0=deshabilita las interrupciones). La interrupción no enmascarable es la única que no puede
ser bloqueada por esta bandera. El estado de la bandera IF se controla con las instrucciones
STI y CLI.
TF (trampa): Permite la operación del procesador en modo de depuración (paso a paso)
SF (signo): Contiene el signo resultante de una operación aritmética (0=positivo; 1=negativo).
Ejemplo:
LAHF: Carga AH desde un registro de banderas de 8 bits en bajo (low), sirve para verificar
el estado de las banderas durante la ejecución de nuestro programa.
CMOV: movimiento condicional, esta instrucción revisa el estado de uno o más banderas
de estado en el registro de EFLAGS (CF,OF,PF,SF y ZF) y realiza una operación de
movimiento si las banderas están especificadas en un estado o condición especifica.
Algoritmo: Desliza todos los bits hacia la izquierda. El bit que queda fuera se almacena en
CF
Ejemplo:
Algoritmo: Desliza todos los bits hacia la derecha. El bit que queda fuera es almacenado
en CF.
Ejemplo:
RCL: Rota el operando 1 a la izquierda a través de la bandera CF. El número de rotaciones
está definido por el operando 2.
Algoritmo: Cambia todos los bits a la izquierda, el bit que queda fuera se almacena en CF
y el valor anterior se inserta a la posición más a la derecha.
Ejemplo:
Ejemplo:
Ejemplo:
ROR: Rota el operando uno a la derecha. El número de rotaciones está dado por el
operando 2.
Ejemplo:
Conclusiones
En la elaboración de este reporte nos encontramos con muchos obstáculos en la
elaboración de las asignaciones por el uso del lenguaje ensamblador, un lenguaje de
programación algo duro de digerir a diferencia de su contraparte como lo son C u
cualquier otro lenguaje de programación.