⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dosk.asm

📁 用asm编的模拟dos中doskey命令的程序。按上下提取之前在终端输入的命令。
💻 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 + -