Está en la página 1de 11

USO DEL SET DE INSTRUCCIONES INTEL X86 EN EL EMULADOR EMU8086

Yurley Acevedo Pérez, Eddy Sebastián Benítez Zabala

Escuela de Ingeniería Electrónica, Universidad Pedagógica y Tecnológica de Colombia,


Sogamoso, Colombia, (e-mail: yurley.acevedo@uptc.edu.co, eddy.benitez@uptc.edu.co

Resumen: El presente informe de laboratorio dará a conocer el desarrollo e implementación de


algunos programas en el entorno del ensamblador para Intelx86, Emu8086 en modo real, para así
lograr identificar y conocer el funcionamiento de las instrucciones lógicas como aritméticas para el
Intel x86.
Palabras clave: Intelx86, Modo real, ensamblador, instrucción, registro.

1. INTRODUCCIÓN

En 1978, Intel sacó al mercado el microprocesador 8086; Los procesadores Intel de la familia Intel x86 disponen
aproximadamente un año después sacó al mercado el de una amplia variedad de instrucciones que
8088. Ambos dispositivos eran microprocesadores de 16 corresponden a un repertorio tipo CISC
bits, los cuales ejecutaban instrucciones en tiempos de (ComplexInstruction Set Computer) [1]
hasta 400 ns (2.5 MIPs, o 2.5 millones de instrucciones
por segundo). Esto representó una considerable mejora en 2. DESARROLLO DE LA PRACTICA
cuanto a la velocidad de ejecución del 8085. Además, el
8086 y el 8088 direccionaban 1 Mbyte de memoria, que Para la primera parte de la solución de esta guía se
era 16 veces más memoria que la direccionada por presentaron algunos programas propuestos como ejemplo
el 8085. (Una memoria de 1 Mbyte contiene posiciones que fueron compilados y simulados en el emulador
de memoria de un tamaño de 1024 Kbytes, o 1,048,576 Emu8086, donde se observó el funcionamiento de las
bytes.) instrucciones de la familia Intel x86.
El microprocesador realiza tres tareas principales para el
sistema computacional: Por otra parte, se propone el desarrollo de algunos
(1) Transfiere datos entre sí mismo y los sistemas de programas de aplicación en los que se utilicen las
memoria o de E/S. instrucciones del set de instrucciones estudiado y
(2) Operaciones simples aritméticas y lógicas anteriormente mencionados, empleando las instrucciones
(3) El flujo del programa mediante decisiones simples. de cada uno de las tareas principales de este.
Aunque éstas son tareas sencillas, es por medio de ellas
que el microprocesador realiza casi cualquier serie de
Se observó que el emulador Emu8086 dispone de
operaciones o tareas.
información con respecto al set de instrucciones y el
conjunto de interrupciones soportado, y que esta
información se puede acceder por medio del botón “help”
ubicado en el menú de herramientas. También brinda en
las pestañas “Tutorials” y “8086 Instruction Set”
información necesaria referente al set de instrucciones,
ver Figura. 2.

Figura 2 Interfaz Emu8086, opción help para obtener


más información.
Figura 1.Operaciones aritméticas
contener los datos correspondientes a los caracteres
ASCII.
El grupo de tres instrucciones de las líneas 21 a 23 en el
programa están dedicadas a desplegar el mensaje en
pantalla (en forma de un string de caracteres ASCII)
mediante el uso de la función 09H de la interrupción 21H.
Para esto, se establece el desplazamiento de la etiqueta
MENSAJE a través de la directiva OFFSET. Otra opción
para realizar este mismo trabajo es la instrucción LEA
(Load Effective Address). El desplazamiento de la
etiqueta se guarda en el registro DX que trabaja como
registro de dirección, apuntando al inicio del vector de
caracteres ASCII a desplegar. A continuación, se invoca
la función 09H de la interrupción 21H, la cual trabaja
automáticamente como un ciclo que despliega en pantalla
cada uno de los caracteres contenidos en el string mientras
Figura 3. Documentación y tutoriales del Emu8086. no aparezca el carácter “$”; cuando lo encuentra, se
detiene la ejecución del ciclo.
En la guía se presenta un ejemplo de un programa en Posteriormente, se devuelve el control al sistema
lenguaje ensamblador (por modelos) que permite operativo mediante la función 4CH de la interrupción
desplegar mensajes en pantalla. Como herramienta para 21H. El registro AL contiene 00H como código de retorno
la emulación emplearemos el software Emu8086, ver de error. Si se produce algún problema durante el retorno
Figura 4. al sistema operativo, el valor del código de error toma uno
de los valores preestablecidos por el sistema. Finalmente,
se cierra el procedimiento mediante la directiva END.
Este mismo programa puede ser declarado empleando
segmentos diferentes para el código, los datos y la pila, tal
como se muestra en la Figura 3. Verifique para estos dos
ejemplos los valores asumidos por los registros de
segmento. Observe que se está utilizando la directiva
.MODEL SMALL.

Figura 4.Programa básico en ensamblador para Intel


x86.

Este ejemplo corresponde a un programa .COM, que


emplea un solo segmento, y tiene reservados los primeros
256 bytes del Segmento de Código (PSP), por lo que las
instrucciones empiezan a codificarse a partir de la
posición 0100H (25610) dentro del segmento, gracias al
uso de la directiva ORG 100H. La instrucción JMP Figura 5.Despliegue de mensajes en pantalla con
INICIO produce un salto de programa desde la posición segmentos independientes.
0100H a la dirección correspondiente a la etiqueta
INICIO. Las instrucciones de las líneas 16 y 17, permiten vincular
Debido a que estamos trabajando con un archivo .COM el segmento de datos donde está guardado el string
los registros de segmento apuntaran todos a la misma Mensaje, con el segmento de código de nuestro programa
dirección. A través del salto descrito en el párrafo anterior principal.
se consigue crear artificialmente un segmento de datos a) Definición de procedimientos
que corresponde a un espacio de memoria destinado a Un procedimiento (o subrutina) es un grupo de
instrucciones que desempeñan una tarea o rutina
específica. La definición de un procedimiento se realiza Nota: Se compiló y emuló el programa siguiendo los
de la siguiente manera: pasos anteriormente mencionados. Se observó el estado
de cada una de las banderas y registros que se ven
NOMBRE PROC NEAR afectados durante la ejecución del programa.
Instrucciones de la subrutina
RET ENP c) Ejercicio base

La directiva PROC indica que se está declarando un Verifique la implementación en lenguaje ensamblador
nuevo procedimiento, mientras que la directiva NEAR para Intel x86 mostrada en la Figura 7 correspondiente al
indica que este procedimiento se declara para ser llamado cálculo (en base 10) de la expresión aritmética mostrada
de forma INTRASEGMENTO; es decir, se tiene en a continuación:
cuenta solo el desplazamiento de la etiqueta que x = (568 + 124)(81 - 297) + (4632 ÷ 76)
corresponda al nombre del procedimiento (NOMBRE en
este caso). Otra opción es emplear la directiva FAR, que
indicaría que el procedimiento ha sido diseñado para ser
llamado de forma EXTRASEGMENTO; es decir,
teniendo en cuenta tanto el desplazamiento como el
segmento (dirección efectiva) donde éste ha sido
declarado. Para el caso de segmentos tipo FAR, estos
deberán ser declarados de tipo “público” para que sean
encadenados con otros segmentos del mismo tipo.
Para invocar (y ejecutar) el procedimiento creado basta
con usar instrucción CALL seguida del nombre del
procedimiento. La instrucción RET permite devolver el
control al programa que invocó al procedimiento.

CALL NOMBRE Figura 7.Cálculo de una función aritmética


b) Compilación y emulación de programas Nota: Se compiló y emuló y se observó el proceso durante
la ejecución del programa.
Digite cada uno de los programas presentados en esta guía
en el emulador Emu8086. Compile y emule programa d) Ejercicios propuestos
dando click en el icono emulate de la barra de
herramientas del Emu8086. Una vez iniciada la Diseñe un programa en ensamblador para la arquitectura
emulación, puede ejecutar el programa paso a paso, dando x86 que:
click en el botón single step, o ejecutarlo en su totalidad, 1. Calcule el producto punto entre dos vectores de 5
dando click en el botón run. Para el modo run, la elementos cada uno, que debe ingresar el usuario
velocidad de ejecución puede ser controlada mediante la mediante el teclado.
barra de desplazamiento step delay ms. En cualquiera
caso, observe detalladamente el estado de cada una de las Producto punto
banderas y registros que se ven afectados durante la
ejecución del programa. Ver Figura 6 El producto punto de dos vectores esta definido por:

Figura 6.Barras de herramientas en el emulador


Emu8086 Figura 8.Producto punto de dos vectores
Un ejemplo de lo anterior seria: Cuando se tenga los datos completos de los dos vectores
1 2 se inicia el proceso para calcular el resultado del producto
2 3 punto de los dos vectores.
𝐴 = 3 B= 1 se inicia el ciclo de multiplicación donde se va a
5 5 multiplicar respecto a la posición del apuntador. y el
[9] [ 9] resultado es guardado en RESUL.
A·B = (1) ·(2)+ (2) ·(3) + (3)·(1) + (5) ·(5)+(9) ·(9) = 117
Figura 9. Ejemplo a implementar para el punto 1

Para la realización de este punto, se tiene en cuenta que


el usuario ingresará mediante el teclado el valor de dos
vectores de dimensión 5.
El programa inicia mostrando un mensaje de bienvenida
al usuario en este caso indicando el número del ejercicio
“EJERCICIO NO. 1 - PRODUCTO PUNTO DE 2
VECTORES DE DIMENSION 5” después de desplegar
el mensaje de bienvenida se procede a la obtención de los
datos desplegando el mensaje al usurario indicando que
ingrese los valores de vector 1 “INGRESE LOS
VALORES DEL VECTOR 1” El usuario debe presionar
la tecla Enter en cada posición de vector a ingresar
ejemplo (2 tecla enter 3 tecla enter, 7 tecla enter …).
Como se observa a continuación.

Figura 12.Resultado producto punto del ejemplo de la


figura 9.

Finalmente se despliega un tercer mensaje indicando al


usuario la respuesta a los valores ingresados.
Figura 10.Ingreso por teclado de los datos del vector 1
2. Calcule el valor al que converge la siguiente sumatoria:
Se guarda el valor que ingresa el usuario por teclado
repitiendo el ciclo hasta que se llene el tamaño del vector ∞
en su totalidad. 35000(−1)𝑛+1
Cuando se tengan los cinco valores del vector, el 𝑥=∑ (1)
2𝑛
programa procede a desplegar el segundo mensaje al 𝑛=1
usuario indicándole que ingrese los valores del vector 2
“INGRESE LOS VALORES DEL VECTOR 2” el
usuario nuevamente tendrá que presionar la tecla enter por Analizando matemáticamente la sumatoria (1) se
cada posición de vector a ingresar. determina que la sumatoria es igual a:

35000(−1)𝑛+1 35000
𝑥 = ∑∞
𝑛=1 =
2𝑛 3
ya que este no genera valores decimales y se puede
manejar valores enteros de la sumatoria tendría un error
del 2, esto se debe a que no se usa punto flotante en las
divisiones causando así que se pierda precisión en los
Figura 11.Ingreso por teclado de los datos del vector 2 resultados.
El programa procede a desplegar el mensaje al usuario
indicándole el resultado de la sumatoria. “EJERCICIO
Igualmente se guarda el valor que ingresa el usuario por NO. 2 - CALCULAR EL VALOR DE UNA
teclado repitiendo el ciclo hasta que se llene el tamaño del SUMATORIA”
vector en su totalidad.
Se despliega el siguiente mensaje “TENIENDO EN A·B = (1) ·(1)+(2) ·(1)+(3) ·(1)+(4) ·(1)+(1) ·(1)= 11
CUENTA QUE: SUMATORIA DE (-1^(N+1) / 2^N ) b = constante.
DESDE N=1 HASTA INF = 1 / 3”

Se despliega el siguiente mensaje “EL


RESULTADO ES = 35000 / 3 =11666”
Calculando la sumatoria su resultado sería mostrado
en un mensaje que se desplegara al usurario
indicando el resultado de la sumatoria.
'EL RESULTADO CALCULANDO LA
SUMATORIA ES =11668.

Figura 15. Resultado producto del ejemplo de la figura


14.
Figura 13. Resultado para la sumatoria de la ecuación (1)
4. Calcule el valor de los primeros 20 términos de la
3. Genere dos vectores de 5 elementos para las sucesión de Fibonacci, esta se muestra a continuación:
variables enteras de tipo palabra 𝑥 y 𝑤. Realice la 0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610….
captura de 5 datos de tamaño palabra y almacénelos en
las posiciones de los vectores 𝑥 y 𝑤. A continuación,
realice el cálculo de la sumatoria:
5

𝑛 = ∑ 𝑊𝑖 𝑋𝑖 + 𝑏 (2)
𝑖=1

Para la realización de este punto, se tiene en cuenta el


código implementado en el punto 1 por lo tanto el Figura 16.serie Fibonacci
funcionamiento será el mismo, se tiene en cuenta que el
usuario ingresará mediante el teclado el valor de dos Para este programa se despliega un mensaje de
vectores de dimensión 5. Cuando se tenga los datos bienvenida al usuario, 'EJERCICIO NO. 4 - CALCULO
completos de los dos vectores se inicia el proceso para PRIMEROS 20 TERMINOS SERIE FIBONACCI'
calcular el resultado del producto punto de los dos
vectores.
Para comprobar el correcto funcionamiento de este punto
se propone el siguiente ejemplo con los siguientes valores Posterior se cargarán las semillas, estos números son los
para los vectores. que generan el siguiente número a sumar.
1 1
2 1
𝐴 = 3 B= 1
4 1
[1] [ 1]
Figura 14.Ejemplo a implementar para el punto 3 Después de esto se realiza la suma de los dos números
de la serie (semillas)
• Se observa que el resultado de la sumatoria es
11668, comparando el resultado del
programa 11666, se tendría un error del 2, esto
se debe a que no se usa punto flotante en las
divisiones causando así que se pierda precisión en
los resultados.

• Observando en la figura 15 se puede corroborar


con el análisis matemático de la figura 14 que el
funcionamiento del código es correcto,
cumpliendo con el enunciado del ejercicio,
requerido en la guía de laboratorio.

• Observando en la figura 16 se puede corroborar


con que el funcionamiento del código de la figura
17 es correcto, cumpliendo con el enunciado del
ejercicio, requerido en la guía de laboratorio.

4. CONCLUSIONES .

En base a la información anterior, el análisis de los datos,


Se hace un ciclo y este se repetirá hasta que se completen y los resultados obtenidos en la realización de esta guía de
los 20 valores, cuando el registro llegue a 0 se despliega laboratorio, se puede concluir que:
los valores en pantalla mostrando uno a uno cada termino • La interfaz o entorno que proporciona el
hasta 20. emu8086, es muy amable con el usuario, brinda
bastante información y el contenido de ayuda
proporcionado por este es muy útil y entendible,
pues suministra muy buena información, tanto
del uso y el manejo de las instrucciones como del
manejo del programa.
• Gracias al entorno emu8086 se puede
comprender, de una manera más real, el
funcionamiento del lenguaje ensamblador, ya que
resulta ser un poco complejo de comprender, así
mismo se puede obtener un mayor conocimiento
del funcionamiento de un computador.

REFERENCIAS

Figura 17. Serie Fibonacci [1] Barry B. Brey. The Intel microprocessors 8086/8088,
80186/80188, 80286, 80386, 80486, Pentium, Pentium
3. ANALISIS DE RESULTADOS Pro processor, Pentium II, Pentium III, Pentium 4, and
Teniendo en cuenta la información plasmada en Core2 with 64-bit extensions: architecture, programming,
el literal anterior, y los resultados obtenidos and interfacing. 8th ed.2009.
durante el desarrollo de esta guía de laboratorio
se puede analizar que: [2]"Redirect Notice", Google.com, 2020. [Online].
Available:
• Observando la figura 12 se puede corroborar con https://www.google.com/url?sa=i&url=https%3A%2F%2F
190.0.149.104%2Felp%2Facerc_ndonos_al_tri_ngulo_d
el análisis matemático A·B = (1) ·(2)+ (2) ·(3) +
e_pascal%2Fsucesin_de_fibonacci.html&psig=AOvVaw
(3)·(1) + (5) ·(5)+(9) ·(9) = 117 que el 25dsPOCJoD8akb7cUYOtYg&ust=1593514937226000&
funcionamiento del código es correcto, source=images&cd=vfe&ved=0CA0QjhxqFwoTCICMmP
cumpliendo con el enunciado del ejercicio, 3vpuoCFQAAAAAdAAAAABAJ. [Accessed: 29- Jun-
requerido en la guía de laboratorio. 2020].
ANEXOS

ANEXO 1

Figura 18.ANEXO 1 para el punto 1


ANEXO 2

Figura 19.ANEXO 2 para el punto2


ANEXO 3

Figura 20.ANEXO 3 para el punto 3


ANEXO 4

Figura 21.ANEXO 4 para el punto 4

También podría gustarte