📄 dosk.asm
字号:
;==========================================;
;THE PROGRAM FOR SIMULATED THE ORDER DOSKEY;
;WRITER: GUANJIBIN CLASS:3 COMPUTER 01 ;
;E_MAIL:JACKQUEN@SINA.VIP.COM ;
;QQ:45899323 ;
;===========================================
TITLE DOSK.ASM
;THE PROGRAM FOR SIMULATED THE ORDER DOSKEY;
;=============================================================================
DATA SEGMENT
FILENAME DB 'D:\MYFILE.TXT',0
HANDLE DW ?
REC_BUFF DB ?
FILE_BUFF DB 20 DUP(?),'$',0AH,0DH
X DB ?
RESULT DB 1 ;YES=0,NO=1
P DB 20 DUP('B')
T DB 20 DUP('$')
PATH DB 30 DUP(?)
ALLPATH DB 20 DUP('$')
CAL DB 0AH,0DH,'$'
CAL1 DB 0DH,'$'
BLANK DB 20 DUP(' '),'$'
OPUT DB 'INPUT ENTER TO GET NEW ORDER!','$'
DATA ENDS
;=============================================================================
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
CALL CREAT
CALL OPEN
CALL INIT
CALL WRITE_BEGIN
LOP: CALL DISPATH
; CALL MOVE_END
MOV AH,00H
INT 16H
CMP AL,0
JZ UP
CALL DISPCHAR
CALL WRITE_ONLY
CALL WRITE
CALL CALF
JMP LOP
UP: CMP AH,48H
JZ UP2
UP1: CMP AH,4BH
JNZ DOWN
UP2: CALL CHECK
CMP RESULT,0
JZ LOP
CALL OUTPUT
CALL UP_MOVE
CALL OPUT_BLANK
CALL CALF1
JMP LOP
DOWN: CMP AH,50H
JZ DOWN2
DOWN1: CMP AH,4DH
JNZ PULSE
DOWN2: CALL DOWN_MOVE
CALL OUTPUT
CALL UP_MOVE
CALL OPUT_BLANK
CALL CALF1
PULSE: CMP AH,4FH
JZ QUIT
JNZ PP
JMP LOP
PP: CALL CALF1
JMP LOP
QUIT:
CLOSE: MOV BX,HANDLE
MOV AH,3EH
INT 21H
DONE: MOV AH,4CH
INT 21H
;=============================================================================
CREAT PROC
MOV AX,SEG FILENAME
MOV DS,AX
MOV DX,OFFSET FILENAME
MOV CX,00H
MOV AH,3CH
INT 21H
RET
CREAT ENDP
;=============================================================================
INPUTCHAR PROC
MOV AH,00H
INT 16H
RET
INPUTCHAR ENDP
;==============================================================================
OPEN PROC
MOV DX,OFFSET FILENAME
MOV AL,02H
MOV AH,3DH
INT 21H
MOV HANDLE,AX
RET
OPEN ENDP
;==============================================================================
INIT PROC
MOV BX,HANDLE
MOV CX,0
MOV DX,0
MOV AL,02H
MOV AH,42H
INT 21H
RET
INIT ENDP
;==============================================================================
;DELF PROC
; MOV AX,SEG FILENAME
; MOV DS,AX
; MOV DX,OFFSET FILENAME
; MOV AH,13H
; INT 21H
; RET
;DELF ENDP
;==============================================================================
DISP PROC NEAR
MOV AH,09H
LEA DX,PATH
INT 21H
RET
DISP ENDP
;==============================================================================
GETPATH PROC
MOV DL,0
LEA SI,PATH
MOV AH,47H
INT 21H
RET
GETPATH ENDP
;==============================================================================
DISPATH PROC
CALL GETPATH
LEA DI,ALLPATH
MOV AH,60H
INT 21H
MOV AH,09H
LEA DX,ALLPATH
INT 21H
MOV AH,02H
MOV DL,'>'
INT 21H
RET
DISPATH ENDP
;==============================================================================
DISPWORD PROC
MOV AH,09H
LEA DX,OPUT
INT 21H
CALL MOVE_END
RET
DISPWORD ENDP
;==============================================================================
MOVE_END PROC
MOV BX,HANDLE
MOV CX,0
MOV DX,0
MOV AL,03H
MOV AH,42H
INT 21H
RET
MOVE_END ENDP
;==============================================================================
CLEAN PROC
MOV SI,0
MOV CX,23
L: MOV FILE_BUFF[SI],'$'
INC SI
LOOP L
RET
CLEAN ENDP
;=============================================================================
OUTPUT PROC NEAR
PUSH BX
PUSH CX
PUSH DX
CALL CLEAN
MOV BX,HANDLE
MOV CH,0
MOV CL,20
LEA DX,FILE_BUFF
MOV AH,3FH
INT 21H
MOV DX,OFFSET FILE_BUFF
MOV AH,09H
INT 21H
POP DX
POP CX
POP BX
RET
OUTPUT ENDP
;==============================================================================
DISPCHAR PROC
; PUSH AX
CMP AL,0DH
JNZ JJ
PUSH AX
MOV AH,2
MOV DL,0AH
INT 21H
POP AX
CALL DISPWORD
JJ:
MOV AH,2
MOV DL,AL
INT 21H
RET
DISPCHAR ENDP
;=============================================================================
UP_MOVE PROC
MOV BX,HANDLE
MOV AH,0FFH
MOV AL,0FFH
SUB AL,20
INC AX
MOV CX,0FFFFH
MOV DX,AX
MOV AL,01H
MOV AH,42H
INT 21H
RET
UP_MOVE ENDP
;=============================================================================
OPUT_BLANK PROC
LEA DX,BLANK
MOV AH,09H
INT 21H
RET
OPUT_BLANK ENDP
;=============================================================================
DOWN_MOVE PROC
MOV BX,HANDLE
MOV CX,0
MOV DX,20
MOV AL,01H
MOV AH,42H
INT 21H
RET
DOWN_MOVE ENDP
;============================================================================
CHECK PROC
CALL UP_MOVE
MOV BX,HANDLE
MOV CX,20
LEA DX,FILE_BUFF
MOV AH,3FH
INT 21H
MOV AL,FILE_BUFF[0]
CALL CLEAN
CMP AL,'B'
JNZ W
MOV RESULT,0
CALL CALF1
JMP W1
W: MOV RESULT,1
CALL UP_MOVE
W1: RET
CHECK ENDP
;=======================================================================
CALF PROC
LEA DX,CAL
MOV AH,09H
INT 21H
RET
CALF ENDP
;=======================================================================
CALF1 PROC
LEA DX,CAL1
MOV AH,09H
INT 21H
RET
CALF1 ENDP
;=========================================================================
WRITE PROC
MOV SI,0
CIRCLE: CALL INPUTCHAR
CMP AL,0DH
JZ QUITE
CALL DISPCHAR
MOV REC_BUFF,AL
MOV BX,HANDLE
MOV CX,0
MOV CL,1
MOV DX,OFFSET REC_BUFF
MOV AH,40H
INT 21H
INC SI
JMP CIRCLE
QUITE: MOV BX,HANDLE
MOV CH,0
MOV CL,19
MOV AX,SI
MOV AH,0
SUB CL,AL
LEA DX,T
MOV AH,40H
INT 21H
RET
WRITE ENDP
;=========================================================================
WRITE_ONLY PROC
MOV X,AL
MOV BX,HANDLE
MOV CH,0
MOV CL,1
LEA DX,X
MOV AH,40H
INT 21H
RET
WRITE_ONLY ENDP
;========================================================================
WRITE_BEGIN PROC
MOV BX,HANDLE
MOV CX,20
LEA DX,P
MOV AH,40H
INT 21H
RET
WRITE_BEGIN ENDP
;========================================================================
;INPUT PROC
; MOV DX,OFFSET INBUF
; MOV AH,0AH
; INT 21H
; RET
;INPUT ENDP
;=========================================================================
DO: LEA DX,START
INT 21H
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -