PARCIAL

 avatar
unknown
assembly_x86
4 years ago
1.6 kB
21
Indexable
; MOSTRAR EN PANTALLA EL MENSAJE Y LEER UN CARACTER. SI NO CORRESPONDE
; A UN NUMERO DEL 1 AL 9 DEBE VOLVER A LEER. LUEGO ESPERA A QUE SE APRETE F10
; SI EL NUMERO NO ES PAR IMPRIMIR "NO ES PAR" SINO IMPRIMIR NUMEROS PARES MEDIANTE LA PIO
; HASTA EL 8 DESDE EL NUMERO. NUM DEBE PASARSE A LA RUTINA POR REFERENCIA

EOI EQU 20H
IMR EQU 21H
INT0 EQU 24H
INT1 EQU 25H
IDF10 EQU 10
CONT EQU 10H
COMP EQU 11H

PA EQU 30H
PB EQU 31H
CA EQU 32H
CB EQU 33H

ORG 1000H

MSJ DB "Ingrese un numero del 1 al 9"
END_MSJ DB ?

MSJ_ODD DB "NO ES PAR"
ODD_END DB ?

NUM DB ?
ON_F10 DB 0

ORG 3000H

F10: MOV ON_F10, 1
  
  MOV DL, [BX]
  
  CMP DL, 1
  JZ EVEN
  
  MOV BX, OFFSET MSJ_ODD
  MOV AL, OFFSET ODD_END - MSJ_ODD
  INT 7
  
  MOV AL, 20H
  OUT EOI, AL
  IRET

EVEN: MOV BX, DX
POLL: IN AL, PA
  AND AL, 1
  JNZ POLL
  
  MOV AL, DL
  OUT PB, AL
  IN AL, PA
  OR AL, 2
  OUT PA, AL
  
  IN AL, PA
  AND AL, 0FDH
  OUT PA, AL
  
  ADD DL, 2
  
  CMP DL, 38H
  JNS EVEN
  
  MOV AL, 0FCH
  OUT IMR, AL
  IRET

ORG 2000H

 MOV BX, 40
 MOV AX, F10
 MOV [BX], AX

 CLI ;-----------PIC------------
 
  MOV AL, 0FCH
  OUT IMR, AL
  
  MOV AL, IDF10
  OUT IMR, AL
 
 STI;---------------------------

 READ: MOV BX, OFFSET MSJ
  MOV AL, OFFSET END_MSJ - OFFSET MSJ
  INT 7
  
  MOV BX, OFFSET NUM
  INT 6
  CMP NUM, 31H
  JS READ
  CMP NUM, 39H
  JNS READ
  
  MOV AL, 0FDH
  OUT CA, AL
  
  MOV AL, 0
  OUT CB, AL
  
  MOV BX, OFFSET NUM
  
 LOOP: CMP ON_F10, 0
  JZ LOOP
  
 INT 0

END
Editor is loading...