📄 3.asm
字号:
PORT_A EQU 208H
PORT_B EQU 209H
PORT_C EQU 20AH
PORT_CW EQU 20BH
TRUE EQU 0FFH
FALSE EQU 0
DISP_BITN EQU 00111000B
DISP_BITM EQU 00000111B
EXIT_KEY EQU 11111111B ; K8
DATA SEGMENT
SEG7CODE DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,98H
DB 88H,83H,0C6H,0A1H,86H,8EH
DISP_BIT DB 0
N DB ?
M DB ?
EXIT_FLAG DB 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DX,PORT_CW
MOV AL,89H
OUT DX,AL
NEXT: CALL KEYINPUT
MOV AL,N
MOV DISP_BIT,DISP_BITN
CALL DISP
CALL DELAY
MOV AL,M
MOV DISP_BIT,DISP_BITM
CALL DISP
CALL DELAY
CMP EXIT_FLAG,TRUE
JNZ NEXT
MOV AH,4CH
INT 21H
KEYINPUT:
MOV DX,PORT_C
IN AL,DX
MOV N,0
MOV M,8
MOV CX,8
KEYINPUT_NEXT: SHL AL,1
ADC N,0
LOOP KEYINPUT_NEXT
MOV AL,M
SUB AL,N
MOV M,AL
CMP AL,0
JNZ KEYINPUT_EXIT
MOV EXIT_FLAG,TRUE
KEYINPUT_EXIT: RET
; INPUT: AL
DISP:
LEA BX,SEG7CODE
AND AL,0FH
XLAT
MOV DX,PORT_B
OUT DX,AL
MOV AL,DISP_BIT
MOV DX,PORT_A
OUT DX,AL
RET
DELAY:
PUSH BX
PUSH CX
MOV BX,5000
NEXT2: MOV CX,0FFFFH
NEXT1: DEC CX
JNZ NEXT1
DEC BX
JNZ NEXT2
POP CX
POP BX
RET
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -