📄 3_4test.asm
字号:
DATAS SEGMENT
CHAR DB ?
NUM DB 0,0,0
DIS DW ?
WIN_ULR DB 5,5,18
WIN_ULC DB 10,50,15
WIN_LRR DB 15,15,22
WIN_LRC DB 30,70,65
WIN_WIDTH DB 20,20,50
WR DB 15,15,22
WC DB 10,50,15
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
MAIN PROC FAR
START:
MOV AX,DATAS
MOV DS,AX
CALL CLEAR
CALL RIGHT
MOV AX,4C00H
INT 21H
MAIN ENDP
SCROLL PROC NEAR ;书P332
MOV AH,6
MOV AL,1
LEA SI,WIN_ULR
ADD SI,DIS
MOV CH,[SI]
LEA SI,WIN_ULC
ADD SI,DIS
MOV CL,[SI]
LEA SI,WIN_LRR
ADD SI,DIS
MOV DH,[SI]
LEA SI,WIN_LRC
ADD SI,DIS
MOV DL,[SI]
MOV BH,7
INT 10H
MOV BX,DIS
MOV NUM[BX],0
MOV DH,WIN_LRR[BX]
MOV WR[BX],DH
MOV DH,WIN_ULC[BX]
MOV WC[BX],DH
RET
SCROLL ENDP
CLEAR PROC NEAR ;书p330
MOV AH,6
MOV AL,0
MOV BH,7
MOV CH,0
MOV CL,0
MOV DH,24
MOV DL,79
INT 10H
MOV DX,0
MOV AH,2
INT 10H
RET
CLEAR ENDP
GET_CHAR PROC NEAR ;书P332
MOV AH,0
INT 16H
CMP AH,1
JE TO_EXIT
JNE CMPL
TO_EXIT: CALL EXIT
CMPL:
CMP AH,4BH
JE TO_LEFT
JNE CMPR
TO_LEFT:
CALL LEFT
CMPR:
CMP AH,4DH
JE TO_RIGHT
JNE NEXT
TO_RIGHT:
CALL RIGHT
NEXT:
MOV DL,AL
MOV AH,2
INT 21H
MOV CHAR,AL
ADD [SI],1
MOV BX,DIS
ADD NUM[BX],1
MOV CL,WIN_WIDTH[BX]
CMP NUM[BX],CL
JE TO_SCROLL
JNE RET1
TO_SCROLL:
CALL SCROLL
RET1:
RET
GET_CHAR ENDP
DIS_PLAY PROC NEAR ;书P333
MOV AH,9
MOV AL,CHAR
MOV BH,0
MOV BL,7
MOV CX,1
INT 10H
ADD [SI],1
ADD NUM+2,1
CMP NUM+2,50
JE TO_SCROLL2
JNE RET2
TO_SCROLL2:
CALL SCROLL
RET2:
RET
DIS_PLAY ENDP
POSE_CURSE PROC NEAR ;光标定位 书P331下
MOV AH,2
LEA SI,WR
ADD SI,DIS
MOV DH,[SI]
LEA SI,WC
ADD SI,DIS
MOV DL,[SI]
MOV BH,0
INT 10H
RET
POSE_CURSE ENDP
RIGHT PROC NEAR
AGAIN:
MOV DIS,1
CALL POSE_CURSE
CALL GET_CHAR
CALL DOWN
JMP AGAIN
RET
RIGHT ENDP
LEFT PROC NEAR
AGAIN1:
MOV DIS,0
CALL POSE_CURSE
CALL GET_CHAR
CALL DOWN
JMP AGAIN1
RET
LEFT ENDP
DOWN PROC NEAR
MOV DIS,2
CALL POSE_CURSE
CALL DIS_PLAY
RET
DOWN ENDP
EXIT PROC NEAR
MOV AH,2
MOV DH,0
MOV DL,0
MOV BH,0
INT 10H
MOV AX,4C00H
INT 21H
EXIT ENDP
CODES ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -