📄 rjexp19.asm
字号:
CRLF MACRO
MOV AH,02H
MOV DL,0DH
INT 21H
MOV AH,02H
MOV DL,0AH
INT 21H
ENDM
DATA SEGMENT
HANDLE DW ?
NAMEBUF DB 49
DB ?
DB 50 DUP (?)
DATBUF DB 200 DUP(?)
INTRO DB 0DH,0AH,'ENTER PATHNAME:$'
EMESS DB 'ERROR $'
DATA ENDS
STACK SEGMENT
STA DW 32 DUP (?)
TOP DW ?
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV SP,TOP
MOV AH,09H
MOV DX,OFFSET INTRO
INT 21H
MOV AH,0AH
MOV DX,OFFSET NAMEBUF
INT 21H
CRLF
MOV SI,OFFSET NAMEBUF
MOV BL,[SI+1]
MOV BH,0
MOV BYTE PTR [NAMEBUF+BX+2],0
MOV AH,3DH
MOV AL,0
MOV DX,OFFSET NAMEBUF+2
INT 21H
MOV BX,AX
JC ERROR
MOV HANDLE,AX
TTT: MOV AH,3FH
MOV BX,HANDLE ;文件代号
MOV CX,200 ;读取字节数
MOV DX,OFFSET DATBUF ;缓冲区首址
INT 21H ;读文件
MOV BX,AX ;读文件出错转ERROR
JC ERROR
CMP AX,0
JE EXIT ;读取字符数为0,则到文件尾,转EXIT
MOV CX,AX ;字符数
MOV BX,OFFSET DATBUF ;BX指向传输缓冲区首址
JJJ: MOV AH,2 ;显示字符的功能调用
MOV DL,[BX] ;取字符
CMP AL,1AH
JE EXIT ;若为文件结束符则转EXIT
INT 21H ;显示
INC BX ;指向下一个字符
LOOP JJJ ;循环
JMP TTT ;读取文件下一部分
EXIT: MOV AH,3EH
MOV BX,HANDLE ;关闭文件
INT 21H
MOV BX,AX
JC ERROR ;关闭出错转ERROR
MOV AX,4C00H
INT 21H ;返回DOS
ERROR:MOV AH,09H
MOV DX,OFFSET EMESS ;显示出错信息
INT 21H
CALL BINIHEX ;显示出错代号
JMP EXIT
BINIHEX PROC NEAR
MOV CH,04
ROT: MOV CL,04
ROL BX,CL
MOV AL,BL
AND AL,0FH
ADD AL,30H
CMP AL,3AH
JL PRINT
ADD AL,27H ;参见实验18的程序清单
PRINT:MOV DL,AL
MOV AH,02
INT 21H
DEC CH
JNZ ROT
RET
BINIHEX ENDP
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -