Informe Traffic Lights EMU 8086

Contenido Objetivo......................................................................................................

Views 173 Downloads 63 File size 345KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Contenido Objetivo.............................................................................................................. 2 Desarrollo del Programa...................................................................................... 2 Antes de Programar......................................................................................... 2 Programación................................................................................................... 3 Compilación..................................................................................................... 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 opción new.

Figura 1 IDE EMU8086

Luego marcaremos la opción empty worspace y daremos click en Ok.

Figura 2 Selección de Espacio de Programación

Se abrirá la ventana donde se podrá empezar a programar.

Figura 3 Editor de código de EMU8086

Programación 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 programación realizada para dicho programa.

Figura 4 Diagrama de Bloques General

Antes de los bloques se realizó un arreglo para que sea más 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 través de los puertos de entrada del EMU8086. Para esto se utiliza la siguiente instrucción: in ax, 110 Con esta instrucción 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 opción de 0 al 6. Así que se salta a la subrutina valid: jmp valid

 Bloque Selección y Validación a) Sub-Bloque Validación En el presente bloque ya que son opciones especificas se ah validad y a la vez seleccionado estas opciones desde el ingreso las instrucciones serán las mismas solo cambiara el número de opción con el que se compara (como ya se explicó las opción son del 0 al 6) así que solo se explicara una. Se compara el valor del acumulador con la siguiente instrucción: cmp ax,0 La siguiente instrucción analiza la comparación y si A=0 entonces salta a la subrutina horizontal je horizontal Si no fuese igual compararía con la siguiente opción que seria 1 así sucesivamente hasta llegar a la opción 6, en caso de que ninguna de estas opciones sea igual al número ingresado entonces saltara de a la subrutina pausa para esperar otra opción válida. jmp Pausa b) Sub-Bloque Selección Como observamos anteriormente salto a la instrucción horizontal, en la cual se enviara la combinación correcta para hacer mover los autos horizontalmente. En este caso la combinación para horizontal es 0861. mov ax, 0861H Enviamos este dato al puerto de salida 4. out 4,ax Luego guardamos el número 015E en C para generar una pausa mov cx,015EH Y saltamos a la subrutina Pausa para esperar a que el usuario ingrese otra opción. jmp Pausa Para cada opción se realiza el mismo procedimiento. A continuación una tabla donde se resumirá esto. Opción 0 1 2

Combinación 0861 030C 0261

3

0849

Dirección Dos autos horizontales Dos autos verticales Horizontal de izq. hacia dcha. Horizontal de dcha.

Nombre Subrutina Horizontal Vertical Hor1 Hor2

4

0309

5

024C

6

0249

hacia izq. Vertical de arriba hacia abajo Vertical de abajo hacia arriba Todos los autos parados

Ver1 Ver2 Parado

Tabla 1 Tabla de resumen de Selección



Bloque de Pausa

El presente bloque explica cómo se generó la pausa, el número ingresado en C después 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 opción. Dentro de esta subrutina primero ejecutara el no operation. nop Luego se ejecutara la instrucción de disminución de C y salto a Pausa. loop (Pausa) Finalmente cuando C sea cero entonces se saltara nuevamente a la subrutina ingreso. jmp ingreso

Compilación 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 botón emualte.

Figura 5 Ejecución y Compilación de Programa

Una vez el programa sea compilado correctamente aparecerá dos ventanas de ejecución una donde ser vera el código y que instrucción se ejecuta y otra donde se visualiza los registros.

Figura 6 Ventanas de Ejecución

Luego debemos abrir los puertos por donde se ingresaran los datos y por donde saldrán los datos así que en la ventana que muestra los registros damos click en la barra de herramientas en la opción 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 Selección 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 opción 1 para mover los dos autos de forma vertical.

Figura 10 Ingreso de Opción 1

Como se observa los autos con esa opción se mueven de forma vertical.

Figura 11 Dirección Vertical de Autos

Conclusiones         

Se concluye que en la mayoría 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 también se puede representar en los registros. Los saltos pueden ser usados para validaciones de números que se desee. La instrucción 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 más instrucciones para facilitar la programación en comparación al Z80. Si se necesita hacer comparaciones exactas para pocos número 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 específico se recomienda retornar al final de las subrutinas y realizar las llamadas al inicio del programa.



 

Se recomienda tener en cuenta la estructura de programación por ejemplo, las instrucciones no van desde el inicio de la línea, sino después de un espacio, mientras que los nombres de las subrutinas si se debe escribir desde el inicio de la línea 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 número 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