[Lenguaje ASM] “El Auto Fantástico”

img0281a

Antes de llevar estos cursos de Lógica Digital y Organización y Arquitectura de Computadoras, no sabía las funcionalidades que podría tener el puerto Paralelo o LPT (aunque las PC actuales parece no incluirlos ya)… no daré definiciones porque las pueden encontrar en Wikipedia.

Sin embargo si colocaré código Assembler, uno que quiero compartir con ustedes que hoy aprendí en mi horario de laboratorio… ovbiamente deberán hacer algunos pasos previos para que logre funcionar tu aplicación con el puerto LPT, estos pasos los colocaré al final del post, primero vamos con el código fuente:

DATOS SEGMENT
IND DB ? ;IND es una variable declarada de tipo byte en el segmento completo DATOS
DATOS ENDS

CODEGO SEGMENT
   ASSUME CS: CODEGO, DS:DATOS

ENECIO:
   MOV IND, 0
   MOV DX, 378H
   MOV AL, 0FEH ;11111110
   OUT DX, AL
   ;CALL DLY "Para ver que el programa arranca con el MSB apagado y el resto encendido"
   ;JMP PREGUN
   PREGUN:	CMP IND, 0
   JE SII
   JNE NOO

;*************Rutina para que el Auto fantastico marche para Adelante**************
   SII:	CMP AL,80H ;10000000
   JE SALGO1
   SHL AL,1 ;11111100"11111000;11110000;11100000;11000000;10000000
   OUT DX,AL;11111100"11111000;11110000;11100000;11000000;10000000
   JMP PREPRE

   SALGO1: MOV IND, 1
   JMP PREGUN

;*************Rutina para que el Auto fantastico marche para Atras**************

   NOO:    CMP AL,01H ;00000001
   JE SALGO2
   SHR AL,1 ;01000000;00100000;00010000;00001000;00000100;00000010;00000001
   OUT DX,AL;01000000;00100000;00010000;00001000;00000100;00000010;00000001
   JMP PREPRE

SALGO2: MOV IND, 0
   JMP PREGUN

PREPRE: CALL DLY
   JMP PREGUN

DLY:
   PUSH AX ;Indica a los registros que estan aptos para acumular datos (Registros generales AX,BX,CX,etc.)
   PUSH BX
   PUSH CX
   MOV AX, 1000;Cargan el dato 600 al registro general AX
   P3:	MOV BX, 1000
   P2:	MOV CX, 100
   P1:	DEC CX ; Mientras CX no sea cero se repetira N-veces el lazo P1
   JNZ P1
   DEC BX ; Mientras BX no sea cero se repetira N-veces el lazo P2
   JNZ P2
   DEC AX ; Mientras AX no sea cero se repetira N-veces el lazo P3
   JNZ P3
   POP CX ;Indica a los registros que ya no estan aptos para acumular datos (Registros generales AX,BX,CX,etc.)
   POP BX
   POP AX
   RET ; Retorno de Sub Rutina de la ultima posición en la que se quedo

CODEGO ENDS

END ENECIO

Este Código hace que tus leds se prendan de manera parecida a la consolita del “Auto Fantástico”, pero que leds?… pues ese fue mi proyecto, armar una aplicación con 8 leds de salida que logren conectarse a la PC mediante el Puerto LPT, y aquí está el diagrama del que pueden armar la aplicación que yo armé:

300420090051
Clic en La Imagen para agrandar

Necesitarían un conector LPT Macho, 3 Buffers o circuitos integrados SN74LS245N, Leds como mínimo: 8, cables UTP-8 de preferencia tener 18 hilos para el LPT, Estaño para soldar, uno o dos Protoboards, y alguna manera de conectarlo a 5 voltios :D

Para hacer funcionar (activar) tu puerto LPT descárgate este archivo.

  1. Tienes que colocar el en tu carpeta C:\WINDOWS\System32\drivers el archivo UserPort.sys
  2. Ejecutar UserPort.exe

Luego tendrás que compilar de alguna manera ese código.. pues puedes conseguir cualquier editor Assembler… pero yo recomendaré uno que usa el Profesor de Teoría y que por lo visto es el más practico: El emulador de microprocesador 8086… Descárgalo de aca

Pasos para ejecutar el código:

Una vez que tengas instalado el programa realiza esto…

  1. Colocar el código en el panel de código
  2. Hacer clic en “Compile” y guardarlo con cualquier nombre
  3. Luego te saldrá una ventanita, ubica un botón de nombre “External”, haz clic ahí y luego en “Command Prompt”
  4. Saldrá una ventana de comandos (cmd.exe) ahí teclearas el nombre de tu archivo que nates guardaste como “Archivo.exe” pero sin extensión (osea para el ejemplo sería “Archivo” sin comillas)

Y Luego tendrás el efecto del auto fantástico… más o menos PARECIDO a éste que colgó mi profesor de teoría :D :

NOTA: No es necesario implementar todo lo del diagrama… quizás solo puedas implementar la parte de en medio o el Buffer de en medio que refiere a las salidas… que es donde se mostrará el efecto de lauto fantástico.

Saludos… Luego veré si coloco más ejemplos acerca de este lenguaje ! :mrgreen: