buenas luego de algunos intentos aun no he dado con la solucion para este trabajo que me dejaron
el programa consiste en sensar 1 bit en el puerto 379 el cual haria que el numero(inicialmente cero )se incremente y lo muestre por el puerto 378
y otro bit que haria que este numero disminuya en 1 y luego se muestre
el findel programa llegaria cuando el numero llege a 25(base 10)
hasta ahora esto es lo que tengo :
.MODEL SMALL
.STACK 64h ; reserva 100 bytes en la pila
.DATA ; Segmento de datos (no hay datos)
.CODE
MAIN PROC FAR
MOV AX, @Data ; Inicializa segmento de datos
MOV DS, AX ; Para que apunte a mi segmento "Data"
;comienzo bucle
l1: mov dx,379h
in al,dx
and al,10h ;el bit normalmente en 1
xor al,10h ;el pulsador lo volveria 0
cmp al,10h
je l2
jmp sube
l2: mov dx,379h
in al,dx
and al,20h
xor al,20h
cmp ah,20h
je l1
jmp baja
mov bl,0h
sube: inc bl
mov dx,378h
mov al,bl ;;
out dx,al
cmp bx,18h
je fin ;si = a 18h finalizar
;
jmp l1
baja: sub bl,1h ;;
mov dx,378h
mov al,bl ;;
out dx,al
jmp l1
fin:
MOV AH,4CH
INT 21H
MAIN ENDP
;=====================================================================
;*************************Generacion del Retardo**********************
;=====================================================================
DELAY PROC NEAR ; Retardo de 300msg
PUSH CX
MOV CX,100
P1: PUSH CX
MOV CX,0FFFFH
P2: LOOP P2
POP CX
LOOP P1
POP CX
RET
;
DELAY ENDP
;---------------------------------------------------------------------
END MAIN
mi metodo era aprovechar un bucle infinito para leer 2 bits independientemente y que este se rompa cuando detecte que 1 ha sido cambiado, direccionando a la parte correspondiente (si sube o baja)
Lo malo es que parece que la instruccion je (cercana) no es efectiva si se usa para direccionar a partes relativamente lejanas del programam , o quiza este no sea el caso
bueno eso es todo... si alguien me puede ayudar a terminar esto se lo agradeceria mucho