Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Informe LAB1 Def

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 19

UNIVERSIDAD PEDAGÓGICA Y TECNOLÓGICA DE COLOMBIA

LUGAR SECCIONAL DE SOGAMOSO


ESCUELA DE INGENIERÍAELECTRÓNICA
LABORATORIO DE MICROPROCESADOR

Práctica No.1

USO DE LA INSTRUCCIÓN INTEL X86 ESTABLECIDA EN LA UEM8086


Alarcón Juan 201111029, Camilo afanador 201112914
Elkin rivera 201310194

RESUMEN: En el presente informe se realiza  Conocer el entorno para el desarrollo de


el desarrollo de los ejercicios propuesto en aplicaciones en ensamblador para Intelx86
lenguaje ensamblador para el microprocesador denominado Emu8086.
8086, por medio del software, emulador
“Emu8086” donde se requirió de la diferentes  Identificar las características de
instrucciones y modos de direccionamiento de funcionamiento de las instrucciones lógicas
memoria para el desarrollo de los mismos, y aritméticas para Intelx86.
mostrando los resultados obtenidos en cada una  Realizar un programa en ensamblador
de las implementaciones requeridas. aplicando las instrucciones lógicas y
PALABRAS CLAVE: Operaciones, Set de aritméticas para Intel x86, sobre el
instrucciones, Emu8086, modos de emulador Emu8086.
direccionamiento.
3. MATERIALES Y EQUIPOS
1. INTRODUCCIÓN  Software Emu8086.
 Computador personal
El estudio de los computadores se puede adquirir
por una breve historia. La cual servirá para 4. MARCO TEORICO
proporcionar al ingeniero una visión general de la
estructura y funcionamiento de los computadores.
El Intel 8086 es uno de los primeros
Además de considerar la necesidad de equilibrar
microprocesadores de 16 bits diseñados por Intel.
los recursos de un computador, ya que por medio
Fue el inicio y los primeros miembros de la
de estos se nos ofrece un contexto útil para el
arquitectura x86. El trabajo de desarrollo del 8086
aprendizaje de los temas de la evolución de los
comenzó en la primavera de 1976 y fue lanzado
sistemas.
en el verano de 1978. El microprocesador cuenta
con un bus de datos de 16 bits y por esto es más
El 8086 fue diseñado para trabajar con lenguajes
rápido que el 8088, estos dos procesadores
de alto nivel, disponiendo de un soporte hardware
comparten el mismo conjunto de instrucciones.[1]
con el que los programas escritos en dichos
lenguajes ocupan un pequeño espacio de código y
CONJUNTO DE INSTRUCCIONES.
pueden ejecutarse a gran velocidad.

Esta concepción, orientada al uso de Instrucciones de Transferencia de Datos.:


compiladores, se materializa en un conjunto de Estas instrucciones mueven datos de una parte a
facilidades y recursos, y en unas instrucciones otra del sistema; desde y hacia la memoria
entre las que cabe destacar las que permiten principal, de y a los registros de datos, puertos de
efectuar operaciones aritméticas de multiplicar y E/S y registros de segmentación. Algunas de las
dividir, con y sin signo; las que manejan cadenas instrucciones de transferencia de datos son las
de caracteres, etc. siguientes:

MOV Transfiere.
2. OBJETIVOS
IN Entrada.
OUT Salida.
LEA Carga la dirección efectiva.
PUSH FUENTE (sp) ← fuente.

Laboratorio de Microprocesadores 2020-1 Página 1


UNIVERSIDAD PEDAGÓGICA Y TECNOLÓGICA DE COLOMBIA
LUGAR SECCIONAL DE SOGAMOSO
ESCUELA DE INGENIERÍAELECTRÓNICA
LABORATORIO DE MICROPROCESADOR

POP DESTINO Destino ← (sp).

Control de Bucles (instrucciones simples).

Éstas posibilitan el grupo de control más


elemental de nuestros programas. Un bucle es un
bloque de código que se ejecuta varias veces.
Las instrucciones de control de bucles son las
siguientes:

INC Incrementar.
DEC Decrementar.
LOOP Realizar un bucle.

Instrucciones de Llamado y Retorno de


Subrutinas.

Para que los programas resulten eficientes y


legibles tanto en lenguaje ensamblador como en
lenguaje de alto nivel, resultan indispensables las
subrutinas:

CALL Llamada a subrutina.


RET Retorno al programa o subrutina que llamó Figura 2. [3] Diagrama de bloques simplificado sdel
procesadorIntel 8086.
Instrucciones aritméticas y lógicas.
5. PROCEDIMIENTO
ADD Suma.
SUB Resta. Se presentan algunos programas básicos con el fin
DIV División. de dar uso al set de instrucciones de Intel x86 y
MUL Multiplicación. conocer sus características para luego ser
AND Producto lógico compilados y simulados en emu8086, dichos
OR Suma lógica programas deben calcular el producto punto entre
XOR Suma lógica exclusiva dos vectores la sumatoria dada en la ecuación 1,
generar dos vectores de 5 elementos para las
variables enteras de tipo palabra 𝑥 y w para luego
realizar la operación de la ecuación 2 y finalmente
calcular los primeros 20 valores de la serie
Fibonacci.


35000(−1)n+1
x=∑ Ec.1
n=1 2n
5
n=∑ w i x i +b Ec.2
i=1

Figure 1. [2] Estructura de un procesador real en la 6. Metodología


actualidad

6.1. Producto punto entre dos vectores

Laboratorio de Microprocesadores 2020-1 Página 2


UNIVERSIDAD PEDAGÓGICA Y TECNOLÓGICA DE COLOMBIA
LUGAR SECCIONAL DE SOGAMOSO
ESCUELA DE INGENIERÍAELECTRÓNICA
LABORATORIO DE MICROPROCESADOR

Para el desarrollo de la aplicación se utilizan los


Para el desarrollo de este ejercicio es necesario diferentes modos de direccionamiento (directo,
tener claro el procedimiento a realizar y de esta indirecto y relativo), además de las diferentes
manera llevar a cabo los pasos necesarios que se interrupciones e instrucciones (aritmética lógica,
requieren para obtener el resultado correcto de la
transferencia de datos, etc.) proporcionadas por el
operación.
emulador emú 8086
El producto punto o punto producto de dos
vectores es un número real que resulta de Se inicia estableciendo el modelo de memoria (.
multiplicar el producto de sus módulos por el MODELO SMALL) y los segmentos que
coseno del ángulo que forman. contendrá nuestra aplicación (.DATA, CODE,
El producto de dos vectores distintos de cero es
.STACK), además se declaran las diferentes
igual al módulo de uno de ellos por la proyección
del otro en él [4]. variables y mensajes a imprimir en pantalla que
se necesitan para el desarrollo de la aplicación.

Variable Función
VECT1 Vector 1 de tamaño
Byte (5 posiciones)
VECT2 Vector 2 de tamaño
Byte (5 posiciones)
ALMACENA Almacena los dígitos
del número, (vector de
tamaño word)
RESM Almacena resultado
de la multiplicación
Xi*Yi
Mensaje_1 Despliega mensaje en
pantalla
MEN2 Despliega mensaje en
pantalla
Figura 3. [4] Interpretación geométrica del producto de
punto
MEN3 Despliega mensaje en
pantalla
Una vez que el concepto del producto punto es MEN4 Despliega mensaje en
claro, procedemos al diseño del diagrama de flujo pantalla
que será la base para obtener el pseudocódigo MEN5 Despliega mensaje en
necesario para este ejercicio. pantalla
PUNT Revisa si ya se
Antes de explicar la metodología utilizada para el digitaron los 5
desarrollo de la aplicación se tienen en cuenta las números del vector
PUNT_S variable que asigna
siguientes consideraciones: impresión en pantalla
- El tamaño de los vectores es de tipo Byte, por del producto punto
tanto, el máximo número tecleado por posición CONT_U Lleva la cuenta de las
del vector (5 posiciones) es 255. unidades del número a
- se trabajan con números positivos y el resultado imprimir
máximo es de 65535 CONT_D Lleva la cuenta de las
- con la tecla enter (en ASCII 13), se procede a decenas del número a
imprimir
digitar nuevo número hasta llegar a cinco números
CONT_C Lleva la cuenta de las
digitados.
centenas del número a
imprimir

Laboratorio de Microprocesadores 2020-1 Página 3


UNIVERSIDAD PEDAGÓGICA Y TECNOLÓGICA DE COLOMBIA
LUGAR SECCIONAL DE SOGAMOSO
ESCUELA DE INGENIERÍAELECTRÓNICA
LABORATORIO DE MICROPROCESADOR

CONT_I Registro de control se obtuvo, luego se inicializa la directiva .DATA


para conversión a en DS (segmento de datos) y ES (segmento extra).
decimal.
CONT_UM Lleva la cuenta de las La interrupción INT 21h / AH = 9 me permite
unidades de mil del
desplegar una cadena de caracteres en pantalla, es
número a imprimir.
CONT_DM Lleva la cuenta de las decir los diferentes mensajes que se necesitan en
decenas de mil del la aplicación. La interrupción INT 10h / AH = 2
número a imprimir establece la posición del cursor en pantalla donde
RESULT_SUM Almacena el resultado se quiere imprimir.
del producto punto.
RESULT_XY Almacena el resultado Por último, lee la posición inicial del vector 1
de cada multiplicación (Mov SI, OFFSET VECT1) y asigna BX igual a
Xi*Yi
cero, el cual lleva el conteo de los dígitos del
Tabla 1. Variables de aplicación producto punto. número tecleado.

En la figura 4 se puede observar el inicio del 6.1.1 Captura de números del vector 1:
código de la aplicación, el uso de las
diferentes interrupciones, además de la La función call load_digitos carga al vector
inicialización de la directiva .DATA en DS ALMACENA los dígitos tecleados (máximo tres
(segmento de datos) y ES (segmento extra). dígitos) por cada elemento del vector (cinco
posiciones del vector).

La función call num_dec extrae el dato del vector


ALMACENA, para obtener el valor decimal y
almacenarlo en el vector 1 (arreglo del código
VECT_1).

Figura 4. Configuración del modo virtual y despliegue


de mensajes en pantalla
Figura 5. Código captura de elementos vector 1.
La interrupción INT 10h / AH = F obtiene
modalidad de video actual y la interrupción INT La variable PUNT me permite llevar la cuenta si
10h / AH = 0 cambia a la modalidad de video que ya se ingresaron los cinco números para calcular
el producto punto. Si PUNT es igual a cinco salta

Laboratorio de Microprocesadores 2020-1 Página 4


UNIVERSIDAD PEDAGÓGICA Y TECNOLÓGICA DE COLOMBIA
LUGAR SECCIONAL DE SOGAMOSO
ESCUELA DE INGENIERÍAELECTRÓNICA
LABORATORIO DE MICROPROCESADOR

a la etiqueta SIG_VECT y realizar la captura de


los cinco números en el vector 2 (arreglo del
código VECT_2).

Si PUNT no es igual a cinco, las posiciones del


vector Almacena cero, uno y dos se asigna un
valor de cero, BX también se asigna igual a cero
para llevar el conteo de la cantidad de dígitos del
nuevo número a ser tecleado (previamente se
debió oprimir la tecla enter).

la interrupción INT 10h / AH = 0EH me permite


imprimir el carácter ASCII coma, ya sea cuándo
se halla tecleado los tres dígitos del número, u
oprimido la tecla enter.

El diagrama de flujo se puede observar en la


figura 33 de los anexos

6.1.2 Función Call load_digitos:

Inicialmente se lee la dirección inicial del vector


ALMACENA para posteriormente acceder a todas
las posiciones del mismo incrementado el registro
apuntador SI en 2 ya que es un vector tipo Word o Figura 6. La función de call_load_digitos implementa
palabra. en la aplicación producto de punto.

La interrupción INT 21h / AH = 07H me permite


Si no se ha digitado la tecla enter (AL=13 en
adquirir el valor del digito en AL sin eco (no lo
ASCII), imprime el digito en pantalla con la
muestra en pantalla) y así comparar si se ha
interrupción INT 10h / AH = 0EH y avanza el
digitado la tecla enter, si se ha digitado la tecla
cursor en pantalla esperando nuevo digito. Con el
enter, salta a la etiqueta (fin_dig:) y sale de la
registro BX se lleva el control de los dígitos
función call load_digitos.
imprimidos en pantalla (máximo tres dígitos por
posición del vector).

Si BX es igual a tres salta a la etiqueta total_dig:


lo que indica que ya se digitaron los tres dígitos y
se cargaron al vector ALMACENA, como BX es
inicialmente igual a cero se resta el valor ASCII
almacenado en AL por 30H para obtener el
número decimal y almacenar el primer digito en la
primera posición del vector ALMACENA.

Se incrementa BX donde es igual a 1, y salta a la


etiqueta DATOS para teclear nuevo digito. Se
repite el mismo procedimiento mencionado

Laboratorio de Microprocesadores 2020-1 Página 5


UNIVERSIDAD PEDAGÓGICA Y TECNOLÓGICA DE COLOMBIA
LUGAR SECCIONAL DE SOGAMOSO
ESCUELA DE INGENIERÍAELECTRÓNICA
LABORATORIO DE MICROPROCESADOR

anteriormente hasta la instrucción cmp BX,0


donde se compara Si BX es igual a cero.

Como BX es diferente de cero salta a la etiqueta


dig_1 donde compara si BX es igual a uno, como
BX es igual a uno, carga en la posición uno del
vector ALMACENA el digito anteriormente
tecleado, y el digito actual tecleado se guarda en
la posición cero del vector ALMACENA.

Se incrementa BX, tomando el valor de dos, y


salta a la etiqueta Datos, se repite el mismo
proceso mencionado anteriormente hasta la
instrucción cmp BX,1 donde se compara si BX es
igual a uno, como BX es igual a dos salta a la
etiqueta dig_3, donde carga en la posición dos del
vector ALMACENA el primer digito tecleado, en
la posición uno del vector ALMACENA el Figura 7. Función call num_dem implementada
segundo digito tecleado y el tercer digito se carga en la aplicación producto punto.
en la posición cero del vector ALMACENA.
Este resultado se transfiere al registro CL, para
Se incrementa BX tomando el valor de tres, y que no se vea alterado o se pierda el resultado.
vuelve a la etiqueta DATOS, como BX es igual a Luego se transfiere la primera posición del vector
tres y ya se visualiza en pantalla los tres dígitos se ALMACENA en AL, y se multiplica por diez.
procede a oprimir la tecla enter, para introducir
nuevo número hasta completar los cinco el resultado inmediatamente anterior transferido a
elementos. AL se suma con la posición cero del vector
ALMACENA (se suman las decenas y unidades
El diagrama de flujo se puede observar en la del número digitado), y el resultado se almacena
figura 44 de los anexos en AL, por último se realiza la operación suma
(add AL,CL) entre el registro AL y CL, donde se
guarda el resultado en AL (suma de centenas,
decenas y unidades).

6.1.3 Función Call num_dec: El resultado inmediatamente anterior de AL se


almacena en la primera posición del vector1.
La función num_dec me permite obtener el Se incrementa SI para acceder a la siguiente
número decimal de los dígitos almacenados en el posición del vector 1 para guardar el nuevo
vector ALMACENA. Inicialmente se carga la número tecleado y finalmente sale de la función,
dirección inicial del vector ALMACENA, luego (retorna valor).
se procede a cargar la posición dos del vector
ALMACENA en AL, y se multiplica por cien. El diagrama de flujo se puede observar en la
figura 39 de los anexos

6.1.4 Captura de números del vector 2:

Laboratorio de Microprocesadores 2020-1 Página 6


UNIVERSIDAD PEDAGÓGICA Y TECNOLÓGICA DE COLOMBIA
LUGAR SECCIONAL DE SOGAMOSO
ESCUELA DE INGENIERÍAELECTRÓNICA
LABORATORIO DE MICROPROCESADOR

La captura de números al vector 2 se realiza de la Esta parte del código realiza la multiplicación del
misma manera como se realizó en el vector 1. vector 1 por el vector 2 (Xi*Yi), previamente
cargado los cinco números del vector 1 y vector 2.

Figura 8. Posiciones del vector ALMACENA


igual a cero para digitar nuevo número en el vector
2.

Se debe tener en cuenta que se debe asignar las


posiciones del vector ALMACENA en cero para
teclear nuevo número, además se carga la
dirección inicial del vector dos en SI, y la variable
PUNT se transfiere un valor de cero para iniciar
nueva cuenta de número capturado en el vector
dos, que máximo son cinco.

Figura 10. Código que calcula la multiplicación del


vector 1 y el vector 2.

Inicialmente se carga en el registro SI la dirección


inicial del vector 1 (VECT1), y en el registro DI la
dirección inicial del vector RESM el cual
almacena en cada posición las parejas de la
multiplicación Xi*Yi, además la variable PUNT
se carga con valor cero para llevar la cuenta de las
multiplicaciones (cinco multiplicaciones) de los
números capturados en el vector 1 y 2.

Se carga al registro AL, la primera posición del


Figura 9. Código captura de elementos vector 2.
vector 1 (se realiza con la instrucción mov AL,
El diagrama de flujo se puede observar en la [SI]), luego se carga al registro DL la primera
figura 33 de los anexos posición del vector 2 (se realiza con la instrucción
mov DL, [SI+5]), el registro SI se incrementa en
cinco ya que el vector 2 se encuentra cinco
posiciones después del vector 1.

Luego se realiza la multiplicación de la primera


posición del vector 1 y vector 2, donde se
6.1.5 Multiplicación del vector 1 y 2 almacena el resultado en el registro AX, este
(Xi*Yi) resultado se transfiere a la primera posición del
vector RESM (vector tamaño word) por medio de
la instrucción (Mov [DI], AX).

Laboratorio de Microprocesadores 2020-1 Página 7


UNIVERSIDAD PEDAGÓGICA Y TECNOLÓGICA DE COLOMBIA
LUGAR SECCIONAL DE SOGAMOSO
ESCUELA DE INGENIERÍAELECTRÓNICA
LABORATORIO DE MICROPROCESADOR

Se incrementa el registro SI (en uno) para acceder


a las posiciones superiores de los vectores 1 y 2 y
el registro DI en dos para guarda los resultados de
las parejas de la multiplicación Xi*Yi.

se incrementa la variable PUNT en la unidad y se


compara si esta es igual a cinco, si es igual a cinco
salta a la etiqueta imprime lo cual indica que ya se
calculó las cinco multiplicaciones.

Si PUNT no es igual a cinco salta a la etiqueta


CICLO2, donde repite lo mencionado
anteriormente hasta completar las cinco Figura 11. Código de inicio que imprime la
multiplicaciones. multiplicación de cada Xi*Yi en la pantalla .

La interrupción
RESM [ DI ]=[ SI ]∗[ SI+5 ],[SI +1]∗[SI +6], [SI+2]∗[SI + 7], INT 10h / AH = 02H me permite
posicionarme en la fila 10, columna cero y pagina
[SI +3]∗[ SI +8 ],[SI +4 ]∗[SI +9] Ec. 5
0 de la pantalla, para desplegar la cadena de
caracteres de la etiqueta MEN4 por medio de la
La ecuación 5 describe el proceso de interrupción 21h / AH = 09H.
multiplicación del vector 1 y 2 (Xi*Yi), que cada
resultado se almacena en el vector RESM.

El diagrama de flujo se puede observar en la


figura 35 de los anexos

6.1.6 Impresión en pantalla de la


multiplicación del vector 1 y 2 (Xi*Yi)

Inicialmente, el valor de cero se transfiere a la


variable PUNT, para llevar la cuenta de las
impresiones en pantalla de los resultados de las
multiplicaciones Xi*Yi.

Figura 12. Código que imprime la multiplicación de


cada Xi*Yi en la pantalla.

Laboratorio de Microprocesadores 2020-1 Página 8


UNIVERSIDAD PEDAGÓGICA Y TECNOLÓGICA DE COLOMBIA
LUGAR SECCIONAL DE SOGAMOSO
ESCUELA DE INGENIERÍAELECTRÓNICA
LABORATORIO DE MICROPROCESADOR

Se almacena la dirección inicial del vector RESM


en el registro SI, luego el contenido de la posición En la figura 13 se puede observar dos variables
del registro SI (primera posición del vector RESULT_XY y RESULT_SUM, la primera
RESM), se transfiere o copia a BX, donde el almacena los resultados de las multiplicaciones
contenido de BX se transfiere a la variable del vector 1 y 2 (XI*Yi) para después imprimirlos
RESULT_XY, y así obtener el número decimal en en pantalla y la segunda me permite almacenar el
pantalla por medio de la función call DECODIF. resultado del producto punto y luego e imprimirlo
en pantalla.
Al calcular la cantidad de unidades (CONT_U),
decenas (CONT_D), centenas (CONT_C), El diagrama de flujo se puede observar en la
unidades de mil (CONT_UM) y decenas de mil figura 41 de los anexos
(CONT_DM) por la función call DECODIF, se
procede a carga cada valor mencionado 6.1.8 Cálculo del producto punto e
anteriormente al registro AL, a este valor se suma impresión en pantalla
30h para obtener el valor ASCII e imprimirlo en
pantalla por medio de la interrupción 10h / AH = Para el cálculo de la suma del producto punto se
0EH. tiene en cuenta la variable de control PUNT_S, la
cual me permite llevar el control del resultado e
Se incrementa la variable PUNT en la unidad y el impresión del mismo, además de la cantidad de
registro SI en dos para acceder a la nueva posición veces que se accede al vector RESM, para la suma
del vector RESM, luego se pregunta si PUNT es de sus posiciones.
igual a cinco, si es igual a cinco salta a la etiqueta
SUM_PP. Si no es igual salta a la etiqueta
IMP_MULT para que se repita el ciclo
mencionado anteriormente cinco veces.

El diagrama de flujo se puede observar en la


figura 35 de los anexos

6.1.7 Función call decodif

La función decodif me permite obtener la cantidad


de unidades, decenas, centenas, unidades de mil y
Figura 14. Código que accede al vector RESM para
decenas de mil que posee un número.
calcula el producto punto.

Inicialmente se transfiere el valor de cero a la


variable de control PUNT_S, luego se carga la
dirección inicial del vector RESM (vector tamaño
Word) al registro SI, ahora se transfiere el
contenido de la primera posición al registro AX
(Mov AX,[SI]), y se calcula la suma de la
posición cero y uno del vector RESM (add AX,
[SI+2]), donde el resultado es almacenado en AX.

Figura 13. Variables que almacenan los resultados El registro SI se incrementa en dos para acceder a
producto punto y multiplicaciones Xi*Yi. las diferentes posiciones del vector RESM, ahora

Laboratorio de Microprocesadores 2020-1 Página 9


UNIVERSIDAD PEDAGÓGICA Y TECNOLÓGICA DE COLOMBIA
LUGAR SECCIONAL DE SOGAMOSO
ESCUELA DE INGENIERÍAELECTRÓNICA
LABORATORIO DE MICROPROCESADOR

se calcula la suma del resultado almacenado en ∞


35000(−1)n+1
AX y la posición dos del vector RESM, donde se x=∑ Ec.3
almacena el resultado en AX. Se incrementa n=1 2n
PUNT_S y se pregunta si la variable es igual a
Para saber con cual valor de n la sumatoria x
tres.
converge se realizó la tabla 3 donde converge
Si PUNT_S es igual a tres salta a la etiqueta TRM, cuando n=14
lo que indica que se ha accedido a tres posiciones
del vector RESM, si PUNT_S es menor que tres
salta a la etiqueta SIGUE, lo que indica que falta
posiciones del vector por sumar.

AX=[ SI ]+[SI +2]+[SI +4 ]+[SI +6 ]+[SI + 8]


Ec.6

La ecuación 6 describe el proceso de la suma


de las posiciones del vector RESM

Tabla 3. valores n donde la sumatoria converge

El desarrollo de la aplicación se dividió en cuatro


partes.

6.2.1 Parte 1 SIGNO:

n+1
Figura 15. Código que imprime el resultado del Realiza la operación de SIGNO=(−1 )
producto de punto en la pantalla.
Esta operación la ejecuta multiplicando con la
Obtenido el resultado del producto punto funcion IMUL el registro AX *AB donde
almacenado en AX, se transfiere a la variable previamente se guardo (−1 ) y el resultado se
RESULT_SUM, y así obtener el número decimal guarda en AX, resta uno al contador CX con la
en pantalla por medio de la función call decodif funcion LOOP y compara si es cero, si aun no es
que se explicó anteriormente. cero vuelve a ejecutar la multiplicacion, el
resultado anterior AX por BX¿ (−1 ), cuando CX
El diagrama de flujo se puede observar en la
llega a cero el resultado se guarda en el registro
figura 37 de los anexos.
SIGNO=AX como se muestra en la figura 47 de
los anexos, donde SIGNO=(−1 ) para n=14
6.2. Cálculo de la suma
valor comprobado en tabla 3.

Laboratorio de Microprocesadores 2020-1 Página 10


UNIVERSIDAD PEDAGÓGICA Y TECNOLÓGICA DE COLOMBIA
LUGAR SECCIONAL DE SOGAMOSO
ESCUELA DE INGENIERÍAELECTRÓNICA
LABORATORIO DE MICROPROCESADOR

6.2.2 Parte 2 Denominador:

Realiza la operación: DENO=2n


Esta operación la ejecuta multiplicando con MUL
el registro AX con un registro llamado DOS,
guarda el resultado en AX, n se guarda en el
registro ACM el cual es el contador para esta
parte, cuando ACM llega a cero el resultado en
AX se guarda en el registro DENO, en la figura 48
del anexo, donde DENO=4096,para n=12
valor comprobado en la tabla 3 Figura 51. Simulación en emulador 8086 del punto dos,
resultado de la sumatoria con n=14.

El diagrama de flujo se puede observar en la


figura 46 de los anexos.

6.2.3 Parte 3 División 6.3. Cálculo de suma vectorial


5
35000
Realiza la operación: RTA PAR = n=∑ w i x i +bEc.4
DENO i=1

Esta operación la ejecuta dividiendo el registro Antes de explicar la metodología utilizada para el
AX en DENO donde previamente se guardo el desarrollo de la aplicación se tienen en cuenta las
dato 35000 en AX, siguientes consideraciones:
35000 - El tamaño de los vectores es de tipo Word, por
RTA PAR = =68 para n=9donde 44 en
512 tanto, el máximo número tecleado por posición
hexadecimal es 68 en decimal, en la figura 49 de del vector (5 posiciones) es 65535.
los anexos se puede observar dicho valor simulado - se trabajan con números positivos y el resultado
en el emulador 8086. máximo es de 65535
- con la tecla enter se procede a digitar nuevo
6.2.4 PARTE 4: Suma número hasta llegar a cinco números digitados.
- al digitar el termino b de la sumatoria, la
Realiza la operación: cantidad de dígitos máxima permitida es de
SUMA=SUMA+ SIGNO∗RTA PAR cuatro, ejemplo 1000.

Esta operación la ejecuta multiplicando con IMUL En la tabla 2 se puede observar las variables
el registro AX=RTA_PAR por SIGNO como se y arreglos que se utilizó para el desarrollo de
muestra en la figura 50 de los anexos, donde la aplicación
n=11 , AX=11H=17 en decimal valor
comprobado en la tabla 3, RTA_PAR=Resultado Variable Función
en N, este valor se suma al acumulado SUMA y VECTX Vector_X de
regresa a hacer todo el proceso si n no es cero, tamaño Word (5
cuando sea cero pasa a imprimir el resultado en posiciones)
VECTY Vector_Y de
pantalla y finaliza el programa como se puede
tamaño Word (5
observar en la figura 51 posiciones)
ALMACENA Almacena los
dígitos del número,

Laboratorio de Microprocesadores 2020-1 Página 11


UNIVERSIDAD PEDAGÓGICA Y TECNOLÓGICA DE COLOMBIA
LUGAR SECCIONAL DE SOGAMOSO
ESCUELA DE INGENIERÍAELECTRÓNICA
LABORATORIO DE MICROPROCESADOR

(vector de tamaño del número a


Word) imprimir
RESUM Almacena resultado RESULT_SUM Almacena el
de la multiplicación resultado del
Xi*Yi producto punto.
Mensaje_1 Despliega mensaje RESULT_XY Almacena el
en pantalla resultado de cada
MEN2 Despliega mensaje multiplicación Xi*Yi
en pantalla RESUL_T Almacena el
MEN3 Despliega mensaje resultado de la
en pantalla sumatoria
MEN4 Despliega mensaje Tabla 2. Variables del tercer punto
en pantalla
MEN5 Despliega mensaje Se inicia estableciendo el modelo de memoria
en pantalla (.MODEL SMALL) y los segmentos que
MEN6 Despliega mensaje contendrá nuestra aplicación (.DATA, .CODE,
en pantalla
.STACK), además se declaran las diferentes
MEN7 Despliega mensaje
en pantalla variables y mensajes a imprimir en pantalla que se
PUNT Revisa si ya se necesitan para el desarrollo de la aplicación, de la
digitaron los 5 misma forma como se realizó en la aplicación del
números del vector producto punto.
PUNT_S variable que asigna
impresión en 6.3.1 Captura de números del vector_X:
pantalla, la suma de
las multiplicaciones
Xi*Yi Inicialmente se lee la posición inicial del
PUNT_B variable que asigna vector_X, (Mov SI, OFFSET VECTX) y asigna
impresión en BX igual a cero, el cual lleva el conteo de los
pantalla del dígitos del número tecleado.
resultado de la
sumatoria
TERM_B Almacena termino b
de la sumatoria
CONT_U Lleva la cuenta de
las unidades del
número a imprimir
CONT_D Lleva la cuenta de
las decenas del
número a imprimir
CONT_C Lleva la cuenta de
las centenas del
número a imprimir
CONT_I Registro de control
para conversión a
decimal.
CONT_UM Lleva la cuenta de
las unidades de mil Figura 17. Codigo captura elementos del vector X.
del número a
imprimir.
La captura de los números al vector_X se realiza
CONT_DM Lleva la cuenta de
las decenas de mil de la misma manera como se hizo en la aplicación

Laboratorio de Microprocesadores 2020-1 Página 12


UNIVERSIDAD PEDAGÓGICA Y TECNOLÓGICA DE COLOMBIA
LUGAR SECCIONAL DE SOGAMOSO
ESCUELA DE INGENIERÍAELECTRÓNICA
LABORATORIO DE MICROPROCESADOR

del producto punto, únicamente lo que cambia son digito se carga en la posición cero del vector
los tamaños de los vectores (vectores X y Y) que ALMACENA.
ahora son de tamaño word (16 bits) y la cantidad
de dígitos que se puede teclear por número es de se incrementa el registro BX donde vale cuatro,
cuatro. que es la cantidad máxima de dígitos por número.
El diagrama de flujo se puede observar en la
Se debe tener en cuenta que el vector figura 45 de los anexos
ALMACENA ahora guarda un digito más del
número tecleado, por tanto, se debe asignar a cero 6.3.3 Función Call num_dec:
la posición tres del vector ALMACENA (mov
ALMACENA[3],0) cuando se haya finalizado de Para obtener el número decimal de los dígitos
teclear el número. almacenados en el vector ALMACENA se realiza
El diagrama de flujo se puede observar en la el código de la figura 19.
figura 34 de los anexos

6.3.2 Función Call load_digitos:

La captura de los dígitos al vector ALMACENA


se realiza de la misma forma como se hizo en la
aplicación producto punto. La diferencia es que
ahora el registro BX se compara al inicio con la
cantidad de dígitos máximos que se puede teclear
(CMP BX,4), ya que el registro BX lleva el
control del máximo de dígitos tecleados.

Figura 18. Función load_digitos, parte del código que


cambia con respecto al del producto de punto.
Figura 19. Función call num_dem implementada en el
tercer punto.
Otra modificación es que ahora para guarda el
cuarto digito en el vector ALMACENA se Inicialmente se carga la dirección inicial del
dispone del código que aparece en la figura 18, el vector ALMACENA en el registro DI, luego se
cual carga en la posición tres del vector procede a cargar en el registro AL la posición tres
ALMACENA el primer digito tecleado, en la del vector ALMACENA (mov AL, ALMACENA
posición dos del vector ALMACENA el segundo [3]), y se multiplica por la variable mul_mil, la
digito tecleado, en la posición uno del vector multiplicación se guarda en el registro AX (AX=
ALMACENA el tercer digito tecleado y el cuarto ALMACENA[3]*mul_mil), el contenido del
registro AX se almacena en la variable U_mil.

Laboratorio de Microprocesadores 2020-1 Página 13


UNIVERSIDAD PEDAGÓGICA Y TECNOLÓGICA DE COLOMBIA
LUGAR SECCIONAL DE SOGAMOSO
ESCUELA DE INGENIERÍAELECTRÓNICA
LABORATORIO DE MICROPROCESADOR

La captura de números al vector_Y se realiza de la


Se transfiere al registro AX el valor de cero para misma manera como se realizó en el vector_X.
que no afecte la siguiente operación que es
multiplicar la posición dos del vector
ALMACENA por la variable mul_cien (AX=
ALMACENA[2]*mul_cien), esta operación se
almacena en el registro AX, la cual copia su
resultado a la variable centenas.
Figura 20. Posiciones del vector ALMACENA igual a
Se transfiere un cero al registro AX, para cero para digitar nuevo número en el vector_Y.
multiplicar la posición uno del vector
ALMACENA por 10 (AX=ALMACENA[1]*10), Se debe tener en cuenta que se debe asignar las
esta operación se almacena en el registro AX para posiciones del vector ALMACENA en cero para
sumar el resultado anterior con la posición cero teclear nuevo número, además se carga la
del vector ALMACENA (AX= dirección inicial del vector_Y en SI, y la variable
AX+ALMACENA[0]). PUNT se transfiere un valor de cero para iniciar
nueva cuenta de número capturado en el vector_Y
En el registro AX se tiene el resultado de la suma que máximo son cinco.
de las decenas y unidades que tiene el número
tecleado, ahora se procede a realizar la suma con
la variable centenas (add AX,centenas).

Por último se transfiere el valor de la variable


U_mil al registro CX para sumar el contenido de
AX con el registro CX (add AX,CX) y así obtener
nuestro número decimal tecleado en el vector
ALMACENA.

Luego el contenido del registro AX se transfiere a


la primera posición del vector_X, se incrementa el
registro SI en dos (tamaño word) y así estar listo
para guardar el nuevo número tecleado en la
posición siguiente del vector_X.
Figura 21. Código Captura de elementos de la
vector_Y
La variable de control PUNT_B se utiliza
únicamente para imprimir el termino b de la
El diagrama de flujo se puede observar en la
sumatoria, al ser igual a dos salta a la etiqueta
figura 34 de los anexos
(sum_term_b) para salir de la función call
NUM_DEC.
6.3.5 Multiplicación del vector X y Y
El diagrama de flujo se puede observar en la (Xi*Yi)
figura 40 de los anexos
Esta parte del código realiza la multiplicación del
6.3.4 Captura de números del vector_Y: vector_X por el vector_Y (Xi*Yi), previamente
cargado los cinco números del vector_X y
vector_Y.

Laboratorio de Microprocesadores 2020-1 Página 14


UNIVERSIDAD PEDAGÓGICA Y TECNOLÓGICA DE COLOMBIA
LUGAR SECCIONAL DE SOGAMOSO
ESCUELA DE INGENIERÍAELECTRÓNICA
LABORATORIO DE MICROPROCESADOR

La suma de las multiplicaciones de los vectores X


e Y (Xi*Yi), se realizan de la misma manera que
se hizo en el producto punto. Remítase a las
figuras 14 y 15.
El diagrama de flujo se puede observar en la
figura 38

6.3.8 Cálculo de la sumatoria

Para el caculo total de la sumatoria se dispone de


la interrupción INT 21h / AH = 9 para desplegar
el mensaje de la etiqueta MEN6.

Figura 22. Código que calcula la multiplicación del


vector _X y vector_Y.

La multiplicación de los vectores X y Y se realiza


de la misma manera como se hizo en el producto Figura 23. Código que obtiene el término b de la
punto, la única diferencia es que tanto el vector X sumatoria por teclado.
y Y son de tamaño word, por tanto, el registro SI
se incrementa de dos en dos para acceder a las Se asigna a la variable de control PUNT_B el
posiciones de los vectores X y Y, donde realiza valor de dos para obtener el valor decimal de la
las respectivas multiplicaciones Xi*Yi. sumatoria en pantalla, se asigna las posiciones del
vector ALMACENA en cero para guardar el
El diagrama de flujo se puede observar en la termino b de la sumatoria.
figura 36 de los anexos BX se asigna en cero (Mov BX,0) para llevar la
cuenta de los dígitos impresos en pantalla.
6.3.6 Impresión en pantalla de la La variable de control PUNT_S se le asigna el
multiplicación del vector X y Y (Xi*Yi) valor de cero para que cargue en pantalla el valor
de la sumatoria.
La impresión en pantalla de las multiplicaciones
vectoriales X e Y (Xi*Yi) se realiza de la Luego se capturan los dígitos y se guardan en el
misma manera como se hizo en la aplicación vector ALMACENA por medio de la función call
producto de punto. Consulte las figuras 11 y 12. load_digitos que ya se mencionó anteriormente,
El diagrama de flujo se puede observar en la ahora se obtiene el número decimal del vector
figura 36 ALMACENA que se digito por medio de la
función call num_dec, con la diferencia que no se
cargara el valor decimal a ningún vector (X o Y),
6.3.7 Cálculo de la suma de las
ya que la variable PUNT_B no lo permite, sale de
multiplicaciones Xi*Yi y la impresión en la función call num_dem antes de que cargue
pantalla valor en el vector (X o Y).

Laboratorio de Microprocesadores 2020-1 Página 15


UNIVERSIDAD PEDAGÓGICA Y TECNOLÓGICA DE COLOMBIA
LUGAR SECCIONAL DE SOGAMOSO
ESCUELA DE INGENIERÍAELECTRÓNICA
LABORATORIO DE MICROPROCESADOR

resolver un problema que es para obtener los


finales de la siguiente manera [5]:

El primer y segundo término de la serie son:

Los siguientes términos se obtienen sumando los


dos términos que los preceden:
El tercer período de sucesión es

El cuarto mandato es

El quinto mandato es

Figura 24. Código que calcula el resultado de la suma.

El resultado del número decimal obtenido es El sexto término es


cargado en AX, donde el contenido del registro
AX es transferido a la variable TERM_B.

Por último se calcula la suma de la sumatoria (add


AX,RESULT_SUM), donde el resultado de la
suma es almacenado en el registro AX, luego el El término (n+1) es
contenido del registro AX es transferido en la
variable RESUL_T, para su respectiva impresión
en pantalla como se mencionó en anteriores casos,
por medio de la funcion call decodif. Después de tener el conocimiento matemático, el
diagrama de flujo se realiza para ayudar con la
El diagrama de flujo se puede observar en la
implementación del ejercicio en Emu8086 esto se
figura 43 de los anexos
encuentra en el ANEXO G.
6.4. Serie Fibonacci
Una vez definido el diagrama de flujo del
ejercicio, se diseña el código requerido en el
Para el desarrollo de este ejercicio es necesario software de simulación Emu8086, lo primero es
conocer la definición matemática de la sucesión definir el segmento de datos, que llevará todas las
de Fibonacci: variables necesarias para el segmento de código.
La sucesión de Fibonacci se conoce desde hace
miles de años, pero fue Fibonacci (Leonardo de
Pisa) quien lo lanzó cuando lo utilizó para

Laboratorio de Microprocesadores 2020-1 Página 16


UNIVERSIDAD PEDAGÓGICA Y TECNOLÓGICA DE COLOMBIA
LUGAR SECCIONAL DE SOGAMOSO
ESCUELA DE INGENIERÍAELECTRÓNICA
LABORATORIO DE MICROPROCESADOR

MOV DX, OFFSET TITTLE imprime el título


definido como el mensaje "FIBONACCI-2020
SERIES" y con MOV DX, OFFSET CAD1
imprime el mensaje "INGRESE EL NUMERO
DE TERMINOS DE LA SERIE Y PRESIONE
ENTER" con la instrucción MOV DX, OFFSET
CAN introducir el número de sucesiones de la
serie por teclado utilizando la interrupción MOV
AH, 0AH, y de esta manera definir los términos
de la sucesión de la serie con la interrupción.
Figura 26. Segmento de código inicial

En este segmento de datos, además de las


variables del segmento de código, se definen los
mensajes que se mostrarán en la pantalla después
de emular el programa.

El segmento de código consta de varias etiquetas


que se explicarán a continuación:

Figura 28. Segmento de código etiqueta MI1ENTRAS

En la etiqueta MIENTRAS1 tiene un ciclo para


empezar a hacer las sumas necesarias de la serie
Fibonacci, en su suma tienes el número de
elementos en hexadecimal y con la sentencia AX
MOV, TRSERIE obtiene la suma de estos
elementos en hexadecimal entonces con MOV
BL,2 y DIV BL divide el resultado de la suma
en 2, el resultado de esta división se carga en
MIT y se añade 1 esto se hace con las
instrucciones MOV MIT, AL y ADD MIT,1
finalmente los términos se cargan para hacer la
Figura 27. Segmento de código de etiqueta suma MOV AX,TERM1, MOV BX,TERM2, se
NEW_SERIE decrementa la variable TRSERIE ya que antes se
imprimió en pantalla el término cero.
En la etiqueta NEW_SERIE tiene la inicialización
de la pantalla y las variables TERM,
TERM1,TERM2, TERM3 se cargan con cero
excepto TERM2 al que se le asigna 1 para
comenzar con la suma de la serie, de lo contrario
sólo se resumen los ceros, Con la instrucción

Laboratorio de Microprocesadores 2020-1 Página 17


UNIVERSIDAD PEDAGÓGICA Y TECNOLÓGICA DE COLOMBIA
LUGAR SECCIONAL DE SOGAMOSO
ESCUELA DE INGENIERÍAELECTRÓNICA
LABORATORIO DE MICROPROCESADOR

Esto se debe a la velocidad de simulación del


software. Por tanto, se recomienda paciencia a la
hora de ejecutar el código, o realizar la ejecución
en el DOS_box.

Por funcionalidad los resultados esperados son


satisfactorios ya que se cumple con los requisitos
impuestos en la práctica tanto para la aplicación
uno y tres.

En las figuras 31 y 32 se puede observar las


simulaciones en el emulador emu 8086 del punto
Figura 29. Segmento de código etiqueta MIENTRAS uno y tres respectivamente.

Una vez que la suma se realiza en hexadecimal,


los resultados obtenidos para mostrar los valores
elegidos de la serie se pasan a valores decimales
en la pantalla función call imprime.
- Serie Fibonacci

El máximo resultado que puede calcular la serie


de Fibonacci para este código es menor o igual a
65535 (resultado máximo de 16 bits).

Además con la tecla N me permite Salir de la


aplicación, de lo el programa esperara a que digite
nueva cantidad de términos, que depende del
resultado final para su correcta impresión en
pantalla.
Figura 30. Segmento de código etiqueta SIGUE
Los resultados de la emulación se pueden observar
Una vez finalizada la serie Fibonacci, se muestra en la figura 52 de los anexos.
la opción de continuar con otra serie o salir del
programa (letra N) para esto es la etiqueta SIGUE
8. Conclusiones
7. Análisis de resultados  Emu8086 cuenta con un amplio conjunto
de instrucciones que permiten la
Punto 1 y 3: producto Punto y sumatoria manipulación de datos para lograr
operaciones con matrices, vectores,
Al ejecutar los programas se ingresó los cinco operaciones aritméticas entre otros.
valores correspondientes de cada vector (1 y 2 o X  La arquitectura del procesador 8086 debe
y Y), cabe resaltar que la ejecución del programa conocerse para poder hacer un uso
en el emulador emu 8086 es bastante lenta, adecuado de la memoria del
microprocesador y de cada una de sus
cuando el resultado del producto punto o el de la
instrucciones.
sumatoria es un número considerable (resultados  Las interrupciones desempeñan un papel
por el orden de los veinte mil). clave en el microprocesador, ya que se
observó a lo largo del desarrollo del

Laboratorio de Microprocesadores 2020-1 Página 18


UNIVERSIDAD PEDAGÓGICA Y TECNOLÓGICA DE COLOMBIA
LUGAR SECCIONAL DE SOGAMOSO
ESCUELA DE INGENIERÍAELECTRÓNICA
LABORATORIO DE MICROPROCESADOR

laboratorio contribuyen a la gestión de [5].https://www.matesfacil.com/ESO/progresi


diferentes herramientas ones/sucesion-Fibonacci-formulas-
 Cuando. ejecutando los programas se
introdujeron los cinco valores problemas-resueltos-suma-espiral-
correspondientes de cada vector (1 y 2 o triangulo-Pascal.html
X e Y), entered, cabeseñalar que la
ejecución del programa en el [6]. Carl Hamacher, Zvonko Vranesic, Safwat
emuladoremu emu 8086 es bastante Zaky, Naraig Manjikian, Computer
lenta, cuando el resultado del punto del Organization and Embedded Systems,
producto o el de la suma es un número McGraw-Hill, 2011.
considerable (resultados en el orden de
veinte mil). [7]. Guías de laboratorio de microprocesador
Esto se debe a la simulación de
softwarevelocidad. Por lo tanto, se
recomienda paciencia al ejecutar el
código o al ejecutarse en el DOS_box..

9. Referencias

[1]. Barry B. Bray, Los microprocesadores


Intel 8086/8088, 80186/80188, 80286, 80386,
80486, Pentium Pro, Pentium II, Pentium III,
Pentium 4 y Core2 con extensiones de 64
bits: arquitectura, programación e interfaz. 8a
ed.2009

[2]. Barry B. Bray, The Intel


Microprocessors, Fourth Edition, Prentice
Hall

[3].
http://kipirvine.com/asm/debug/Debug_Tu
torial.pdf

[4].https://www.superprof.es/apuntes/escolar/
matematicas/analitica/vectores/producto-
punto.html

Laboratorio de Microprocesadores 2020-1 Página 19

También podría gustarte