Sei sulla pagina 1di 11

Contenido

Objetivo.............................................................................................................. 2
Desarrollo del Programa...................................................................................... 2
Antes de Programar......................................................................................... 2
Programacin................................................................................................... 3
Compilacin..................................................................................................... 5
Ejemplo............................................................................................................... 7
Conclusiones....................................................................................................... 8
Recomendaciones............................................................................................... 8
Objetivo
Realizar un programa en lenguaje ensamblador que permita simular el
funcionamiento de la herramienta virtual device Traffic Lights utilizando
EMU8086.

Desarrollo del Programa


Antes de Programar
Primero se abre el software y se escoge la opcin new.

Figura 1 IDE EMU8086

Luego marcaremos la opcin empty worspace y daremos click en Ok.

Figura 2 Seleccin de Espacio de Programacin

Se abrir la ventana donde se podr empezar a programar.


Figura 3 Editor de cdigo de EMU8086

Programacin
Para explicar el programa se presentara primeramente el diagrama de bloques
general (Figura 3) y se explicara cada bloque, este diagrama de bloques esta
realizado en base a la programacin realizada para dicho programa.

Figura 4 Diagrama de Bloques General

Antes de los bloques se realiz un arreglo para que sea ms visual, en el cual
enviaremos al puerto de salida 199 (LCD) el cero para saber que empieza
desde cero el programa.

Bloque Ingreso de Datos


Posteriormente el programa avanza a la primera subrutina llamada INGRESO,
esta subrutina se explica en el presente bloque. Se ingresara un dato
externamente al programa a travs de los puertos de entrada del EMU8086.
Para esto se utiliza la siguiente instruccin:
in ax, 110
Con esta instruccin se indica que en el Registro Acumulador se guarde lo que
este en el puerto 110. En este caso debido a que existen solo 7 combinaciones
para mover los autos se valida el ingreso de opcin de 0 al 6. As que se salta a
la subrutina valid:
jmp valid
Bloque Seleccin y Validacin
a) Sub-Bloque Validacin
En el presente bloque ya que son opciones especificas se ah validad y a la vez
seleccionado estas opciones desde el ingreso las instrucciones sern las
mismas solo cambiara el nmero de opcin con el que se compara (como ya se
explic las opcin son del 0 al 6) as que solo se explicara una.
Se compara el valor del acumulador con la siguiente instruccin:
cmp ax,0
La siguiente instruccin analiza la comparacin y si A=0 entonces salta a la
subrutina horizontal
je horizontal
Si no fuese igual comparara con la siguiente opcin que seria 1 as
sucesivamente hasta llegar a la opcin 6, en caso de que ninguna de estas
opciones sea igual al nmero ingresado entonces saltara de a la subrutina
pausa para esperar otra opcin vlida.
jmp Pausa
b) Sub-Bloque Seleccin
Como observamos anteriormente salto a la instruccin horizontal, en la cual se
enviara la combinacin correcta para hacer mover los autos horizontalmente.
En este caso la combinacin para horizontal es 0861.
mov ax, 0861H
Enviamos este dato al puerto de salida 4.
out 4,ax
Luego guardamos el nmero 015E en C para generar una pausa
mov cx,015EH
Y saltamos a la subrutina Pausa para esperar a que el usuario ingrese otra
opcin.
jmp Pausa
Para cada opcin se realiza el mismo procedimiento.
A continuacin una tabla donde se resumir esto.

Opcin Combinacin Direccin Nombre Subrutina


0 0861 Dos autos horizontales Horizontal
1 030C Dos autos verticales Vertical
2 0261 Horizontal de izq. hacia Hor1
dcha.
3 0849 Horizontal de dcha. Hor2
hacia izq.
4 0309 Vertical de arriba hacia Ver1
abajo
5 024C Vertical de abajo hacia Ver2
arriba
6 0249 Todos los autos parados Parado
Tabla 1 Tabla de resumen de Seleccin

Bloque de Pausa
El presente bloque explica cmo se gener la pausa, el nmero ingresado en C
despus de enviar el dato al puerto de salida ser un contador el cual ira
disminuyendo, el tiempo que tarde en llegar a cero ser el tiempo de pausa para
que el usuario ingrese otra opcin. Dentro de esta subrutina primero ejecutara
el no operation.
nop
Luego se ejecutara la instruccin de disminucin de C y salto a Pausa.
loop (Pausa)
Finalmente cuando C sea cero entonces se saltara nuevamente a la subrutina
ingreso.
jmp ingreso

Compilacin
Una vez finalizado el programa se debe guardar y luego emular ya que aqu
compila y ejecuta si no hay errores. Y para esto daremos en el botn emualte.

Figura 5 Ejecucin y Compilacin de Programa


Una vez el programa sea compilado correctamente aparecer dos ventanas de
ejecucin una donde ser vera el cdigo y que instruccin se ejecuta y otra
donde se visualiza los registros.

Figura 6 Ventanas de Ejecucin

Luego debemos abrir los puertos por donde se ingresaran los datos y por
donde saldrn los datos as que en la ventana que muestra los registros damos
click en la barra de herramientas en la opcin virtual devices y escogemos las
opciones Traffic Ligths y Simple. En Traffic Lights se observara el movimiento
de los autos (Puerto de Salida) y en Simple se opcion deseado.

Figura 7 Seleccin de Dispositivos Virtuales

Los dispositivos que aparecen son:


Figura 8 Puerto de Salida Traffic Lights

Figura 9 Puerto de Entrada Simple

Ejemplo
Se Ingresa por el puerto Simple la opcin 1 para mover los dos autos de forma
vertical.

Figura 10 Ingreso de Opcin 1


Como se observa los autos con esa opcin se mueven de forma vertical.

Figura 11 Direccin Vertical de Autos

Conclusiones
Se concluye que en la mayora de operaciones que se realiza, el un
operando es el acumulador.
A pesar de que las operaciones se puede ver el signo en las banderas
tambin se puede representar en los registros.
Los saltos pueden ser usados para validaciones de nmeros que se
desee.
La instruccin CMP es til al comprar restando sin guardar el resultado
en el acumulador.
Se puede visualizar en los puertos de salida como si fueran dispositivos
externos conectados.
A diferencia con el IDE z80 aqu se puede realizar resta entre registro lo
que nos puede ahorrar pasos.
Tienen ms instrucciones para facilitar la programacin en comparacin
al Z80.
Si se necesita hacer comparaciones exactas para pocos nmero se
puede comparar con cada uno caso contrario se debe barrer un rango
con los saltos.
Se pueden mover los autos mientras se utilice las combinaciones
correctas.

Recomendaciones
Se recomienda usar banderas para realizar los saltos a otras funciones.
Si se desea realizar un programa en un orden especfico se recomienda
retornar al final de las subrutinas y realizar las llamadas al inicio del
programa.
Se recomienda tener en cuenta la estructura de programacin por
ejemplo, las instrucciones no van desde el inicio de la lnea, sino
despus de un espacio, mientras que los nombres de las subrutinas si se
debe escribir desde el inicio de la lnea donde se escriba.
Se recomienda guardar los datos ingresados por puerto en registros
auxiliares a fin de que no se pierdan los datos que se ingres.
Se recomienda validar, esto debido a que al simular un ascensor este
tendr un nmero finito de pisos.

Anexos
ingreso:
in ax,110 ;Ingresa en A el valor
;del puerto 110
jmp valid ;Salta a subrutina valid

valid: ;Compara A con 0


cmp ax,0
je horizontal ;Si A=0 salta a Subrutina horizontal
cmp ax,1 ;Compara A con 1
je vertical ;Si A=1 salta a Subrutina vertical
cmp ax,2 ;Compara A con 2
je hor1 ;Si A=2 salta a Subrutina hor1
cmp ax,3 ;Compara A con 3
je hor2 ;Si A=1 salta a Subrutina hor2
cmp ax,4 ;Compara A con 4
je ver1 ;Si A=1 salta a Subrutina ver1
cmp ax,4 ;Compara A con 5
je ver2 ;Si A=1 salta a Subrutina vert2
cmp ax,6 ;Compara A con 6
je parado ;Si A=1 salta a Subrutina parado
mov cx,015EH ;Guarda el numero 015E en C
jmp Pausa ;Salta a Pausa

horizontal:
mov ax, 0861H ;Guarda 0861 en A
nop
out 4,ax ;Envia al puerto 4 el valor de A
nop
mov cx,015EH ;Guarda el numero 015E en C
jmp Pausa

vertical:
mov ax, 030CH ;Guarda 030C en A
nop
out 4,ax ;Envia al puerto 4 el valor de A
nop
mov cx,015EH ;Guarda el numero 015E en C
jmp Pausa
hor1:
mov ax, 0261H ;Guarda 0261 en A
nop
out 4,ax ;Envia al puerto 4 el valor de A
nop
mov cx,015EH ;Guarda el numero 015E en C
jmp Pausa ;Salta a Pausa

hor2:
mov ax, 0849H ;Guarda 0849 en A
nop
out 4,ax ;Envia al puerto 4 el valor de A
nop
mov cx, 015EH ;Guarda el numero 015E en C
jmp Pausa ;Salta a Pausa

ver1:
mov ax, 0309H ;Guarda 0309 en A
nop
out 4,ax ;Envia al puerto 4 el valor de A
nop
mov cx, 015EH ;Guarda el numero 015E en C
jmp Pausa ;Salta a Pausa

ver2:
mov ax, 024CH ;Guarda 024C en A
nop
out 4,ax ;Envia al puerto 4 el valor de A
nop
mov cx, 015EH ;Guarda el numero 015E en C
jmp Pausa ;Salta a Pausa

parado:
mov ax, 0249H ;Guarda 0249 en A
nop
out 4,ax ;Envia al puerto 4 el valor de A
nop
mov cx, 015EH ;Guarda el numero 015E en C
jmp Pausa ;Salta a Pausa

;Esta pausa se genera para que el usuario


;ingrese otra opcion
Pausa:
loop (Pausa) ;Realiza un bucle de nop
jmp ingreso ;Salta a Ingreso

hlt

Potrebbero piacerti anche