📄 fasong.txt
字号:
STACK SEGMENT PARA STACK 'STACK'
DB 256 DUP(0)
STACK ENDS
DATA SEGMENT PARA PUBLIC 'DATA'
FCB DB 37 DUP(0)
DTA DB 0
COUNT DB 0
INMSG DB 'INPUT FILENAME:'
DB 10,13,'$'
ERRMSG DB 'FILE ACCESS ERROR!'
DB 10,13,'$'
ERR DB 'INPUT ERROR!$'
DATA ENDS
CODE SEGMENT PARA PUBLIC 'CODE'
START PROC FAR
ASSUME CS:CODE,DS:DATA
ASSUME ES:DATA,SS:STACK
PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV ES,AX
MOV DS,AX
MOV DX,3FBH ;8250初始化
MOV AL,80H
OUT DX,AL ;置线路控制寄存器D7为1
MOV DX,3F8H
MOV AL,0C0H
OUT DX,AL ;置波特率因子低位
MOV DX,3F9H
MOV AL,00H
OUT DX,AL ;置波特率因子高位
MOV DX,3F8H
MOV AL,03H
OUT DX,AL ;无中断方式
MOV DX,3F9H
MOV AL,00H
OUT DX,AL ;置中断允许寄存器为零
MOV DX,OFFSET DTA ;建立磁盘传输区首址
MOV AH,1AH ;I/O功能调用
INT 21H
PLE: CALL SETFCB ;接收键盘输入文件名,并填写FCB
MOV DX,OFFSET FCB ;文件在FCB首址
MOV AH,0FH ;打开指定文件
INT 21H
CMP AL,0
JNZ PLE
MOV WORD PTR FCB+0CH,0 ;置当前块号和纪录号为0
MOV WORD PTR FCB+0EH,1 ;纪录长度为1
MOV FCB+20H,0
AGAIN: MOV DX,OFFSET FCB ;顺序读文件(一个字符)
MOV AH,14H
INT 21H
CMP AL,0
JNZ ERROR
SEND: MOV DX,3FDH ;查询线状态寄存器的D5
IN AL,DX
TEST AL,20H
JZ SEND
MOV AL,DTA ;D5=1,发送一个字符
MOV DX,3F8H
OUT DX,AL
CMP AL,1AH ;若是文件结束字符(CTRL-Z),转EOF
JZ EOF
CALL DISPCHAR ;显示该字符
JMP AGAIN
ERROR: MOV DX,OFFSET ERRMSG ;显示错误提示字符串
MOV AH,9
INT 21H
RET
EOF: MOV DX,OFFSET FCB ;关闭文件
MOV AH,10H
INT 21H
RET
START ENDP
SETFCB PROC NEAR ;SETFCB过程
STA: MOV DX,OFFSET INMSG
MOV AH,9
INT 21H
MOV AH,1 ;接收键盘输入磁盘驱动器号
INT 21H
CMP AL,'C' ;C盘
JZ X1
CMP AL,'D' ;D盘
JZ X1
JMP TEST1
X1: SUB AL,40H
MOV FCB+00H,AL ;保护盘号
JMP IN1
TEST1: CMP AL,'c'
JZ X2
CMP AL,'d'
JZ X2
ERROR1: MOV DX,OFFSET ERR ;不是指定的C、D驱动器,显示错误信息
MOV AH,9
INT 21H
JMP STA ;重新输入
X2: SUB AL,60H
IN1: MOV AH,1
INT 21H
CMP AL,':'
JNZ ERROR1
MOV COUNT,1
MOV DI,OFFSET FCB+1
LOP: MOV AH,1 ;接收键入文件名
INT 21H
CMP AL,'.'
JZ SET1
CMP COUNT,9 ;文件名若大于8个字符出错
JZ ERROR1
STOSB
INC COUNT
JMP LOP
SET1: MOV AH,1 ;接收键入文件扩展名的第一个字符
INT 21H
MOV FCB+9,AL
MOV AH,1 ;扩展名第二个字符
INT 21H
MOV FCB+10,AL
MOV AH,1 ;扩展名第三个字符
INT 21H
MOV FCB+11,AL
MOV AL,0DH ;回车
CALL DISPCHAR
MOV AL,0AH ;换行
CALL DISPCHAR
RET
SETFCB ENDP
DISPCHAR PROC NEAR ;调BIOS视频驱动程序,显示(AL)字符
PUSH BX
MOV BX,0
MOV AH,14
INT 10H
POP BX
RET
DISPCHAR ENDP
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -