Я отредактировал свою программу, как показано ниже, и она работает так, как я хочу сейчас.Спасибо.
Моя программа генерирует случайное число, выполняет над ним некоторые операции и выдает несколько выходных данных.
org 100h
#START=LED_DISPLAY.EXE#
;#MAKE_BIN#
NAME "TIMER"
MOV AX,SECOND
OUT 199,AX
GO:
CALL TIMER_DISPLAY
MOV AL,0
MOV ROW,AL
CALL COORDINATE
CALL CLEAR_SCREEN
CALL RANDOM_NUMBER
MOV AL,R
AND AL,5
MOV KEY,AL
MUL R
ADD AL,5
MOV DL,5
DIV DL
MOV KEY1,AH
CMP KEY1,0
JNE GO
LEA BX,M1
CALL DISPLAY_MESSAGE
MOV AL,KEY
OR AL,R
MOV KEY2,AL
CMP KEY2,0
JE GO
CALL COORDINATE
LEA BX,M2
CALL DISPLAY_MESSAGE
MOV AL,KEY
ADD AL,R
SAR AL,2
MOV KEY3,AL
CMP KEY3,0
JE GO
CALL COORDINATE
LEA BX,M3
CALL DISPLAY_MESSAGE
MOV AL,KEY
XOR AL,R
MOV KEY4,AL
CMP KEY4,0
JE GO
CALL COORDINATE
LEA BX,M4
CALL DISPLAY_MESSAGE
MOV AL,KEY
MOV DL,R
MUL DL
MOV KEY5,AL
CMP KEY5,0
JE GO
CALL COORDINATE
LEA BX,M5
CALL DISPLAY_MESSAGE
ret
M1 DB 'LOCK 1 WAS OPENED', '$'
M2 DB 'LOCK 2 WAS OPENED', '$'
M3 DB 'LOCK 3 WAS OPENED', '$'
M4 DB 'LOCK 4 WAS OPENED', '$'
M5 DB 'LOCK 5 WAS OPENED AND I AM OUT ', 01, '$'
R DB ?
KEY DB ?
KEY1 DB ?
KEY2 DB ?
KEY3 DB ?
KEY4 DB ?
KEY5 DB ?
ROW DB 0
SECOND DW 120
Здесь есть процедура длягенерировать случайные числа
; -- RANDOM NUMBER GENERATION PROCEDURE --
RANDOM_NUMBER PROC
MOV AH,00H ; INTERRUPTS TO GET SYSTEM TIME
INT 1AH ; CX:DX NOW HOLD NUMBER OF CLOCK TICKS
MOV AX,DX
XOR DX,DX
MOV CX,10
DIV CX
MOV R,DL
MOV AX,0
RET
RANDOM_NUMBER ENDP
Процедуры для установки координат, отображения сообщений и очистки экрана.
; -- DISPLAY MESSAGE --
DISPLAY_MESSAGE PROC
MOV AL,0
MOV AH,09H
MOV DX,BX
INT 21H
RET
DISPLAY_MESSAGE ENDP
; -- SET COORDINATE --
COORDINATE PROC
MOV AH,2H
MOV BH,0
MOV DH,ROW
MOV DL,0
INT 10H
INC ROW
RET
COORDINATE ENDP
; -- CLEAR SCREEN --
CLEAR_SCREEN PROC
MOV AH,7
MOV AL,0
MOV CX,0
MOV DX,184FH
MOV BH,7
INT 10H
RET
CLEAR_SCREEN ENDP
Процедуры для вызова отображения таймера исинхронизировать его с реальным временем.
; -- TIMER DISPLAY --
TIMER_DISPLAY PROC
DEC SECOND
MOV AX,SECOND
CMP AX,0
JE X1
CALL SYNCHRONIZE_TIMER_DISPLAY
OUT 199,AX
JMP EXIT
X1:
CALL SYNCHRONIZE_TIMER_DISPLAY
OUT 199,AX
HLT
EXIT:
RET
TIMER_DISPLAY ENDP
; -- SYNCHRONIZE TIMER DISPLAY --
SYNCHRONIZE_TIMER_DISPLAY PROC
PUSH AX
MOV CX, 0FH
MOV DX, 4240H
MOV AH, 86H
INT 15H
POP AX
RET
SYNCHRONIZE_TIMER_DISPLAY ENDP