|
发表于 2017-1-11 18:44:37
|
显示全部楼层
本帖最后由 auyhin丶 于 2017-1-11 18:57 编辑
我回头写了下这个.要跟你作用一样的。 但是为什么我写到往上滚动那行代码的时候却实现不了。
一按F就成这样了。
它不会向上滚动...
- DATAS SEGMENT
- ;此处输入数据段代码
- DATAS ENDS
- STACKS SEGMENT
- ;此处输入堆栈段代码
- STACKS ENDS
- CODES SEGMENT
- ASSUME CS:CODES,DS:DATAS,SS:STACKS
- ML DB 160 DUP(?),'Please enter a command',58 DUP (?),' ;后面有$
- HH DB 'A=clear,S=char color,D=char background color,F=roll a line,G=exit',' ;后面有$,这个显示不出来..
- ;A=1E,S=1F,D=20H,F=21H,G=22H扫描码, A是清屏。S设置前景色。D设置背景色。F滚动一行。按G退出。
- START:
- MOV AX,CS
- MOV DS,AX
-
- MOV DI,0
- LEA DX,ML
- MOV AH,9
- INT 21H
- LEA DX,HH
- MOV AH,9
- INT 21H
- MOV AX,0B800H
- MOV ES,AX
- MOV DL,0
-
- A: IN AL,60H
- CMP AL,1EH
- JNE NEXT1
- CALL CLEAR
-
- NEXT1:
- CMP AL,1FH
- JNE NEXT2
- CALL CHAR1
-
- NEXT2:
- CMP AL,20H
- JNE NEXT3
- CALL CHAR2
-
- NEXT3:
- CMP AL,21H
- JNE NEXT4
- CALL ROLL
- NEXT4:
- CMP AL,22H
- JE P
-
- JMP A
- P: MOV AH,4CH
- INT 21H
-
- CLEAR:
- PUSH CX
- PUSH ES
- PUSH DI
-
-
- MOV CX,2000
- S1: MOV BYTE PTR ES:[DI],20H
- MOV BYTE PTR ES:[DI+1],0
- INC DI
- INC DI
- LOOP S1
- POP DI
- POP ES
- POP CX
- RET
-
- CHAR1:
- PUSH CX
- PUSH ES
- PUSH DI
- INC DL
- AND DL,00000111B
- MOV DI,1
- MOV CX,2000
- S2: MOV BYTE PTR ES:[DI],DL
- INC DI
- INC DI
- LOOP S2
- POP DI
- POP ES
- POP CX
- RET
-
- CHAR2:
- PUSH CX
- PUSH ES
- PUSH DI
- ADD DL,00010000B
- AND DL,01110000B
- MOV DI,1
- MOV CX,2000
- S3: MOV BYTE PTR ES:[DI],DL
- INC DI
- INC DI
- LOOP S3
- POP DI
- POP ES
- POP CX
- RET
-
- ROLL:
- PUSH CX
- PUSH ES
- PUSH DI
- MOV AX,0B800H
- MOV DS,AX
- MOV SI,160
- MOV ES,AX
- MOV DI,0
- MOV CX,160*3
- CLD
- REP MOVSB
- MOV CX,160
- MOV DI,160
- S4: MOV BYTE PTR ES:[DI],20H
- ADD DI,2
- LOOP S4
- POP DI
- POP ES
- POP CX
- RET
-
- CODES ENDS
- END START
复制代码 |
-
|