el puerto paralelo esta dividido en 3 direcciones
0378 salida de 8 bits de datos
0379 entrada de 5 bits
037a entrada o salida de 4 bits
En el registro DX se coloca la direccion del puerto y en el registro AL el dato que se quiere enviar (si estamos recibiendo en AL se guarda el dato recibido)"ESTO ES ASI SIEMPRE SIN EXCEPCION", asi si tu tienes los datos que quieres enviar de la direccion 0500 a la 0600
tienes que hacer lo siguiente
mov bx,0500 ;cargas en bx la direccion inicial
ot: mov al,[bx] ;guardas en AL lo que tiene adentro de la 0500 (dato a enviar)
mov dx,0378 ;pones la direccion del puerto (salida)
out dx,al ;sacas el dato por el puerto de salida
mov cx,00fff ;esto es un retraso que colocamos para darle tiempo
at loop at ; al receptor de recibir el dato
inc bx ;incrementamos bx para pasarnos a la siguiente direccion
cmp bx,0600 ;verificamos si ya enviamos todos los caracteres que estaban
; en la 0500 a la 0600
jnz ot ; si no es asi nos vamos a ot (seguimos enviando)
int 20 ;fin del programa
ahora si quieres recibir tienes que hacer lo siguiente
mov dx,0379; direccion del puerto que funciona como entrada
in al,dx ; guardas en AL el dato recibido
pero esto es si los datos que vas a recibir son solo de 4 bits, si son de ocho tienes que hacer otro paso mas
mov dx,037a
in al,dx ;con esto capturas los otros cuatro bits