📄 jieshou.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 'PLEASE INPUT FILENAME:',10,13,'$'
ERRMSG DB 'FILE ACCESS ERROR!',10,13,'$'
BUFFER DB 100 DUP(0) ;建立100个接收数据缓冲区
BUFFER1 DW 0 ;取数指针
BUFFER2 DW 0 ;存数指针
DATA ENDS
CODE SEGMENT PARA PUBLIC 'CODE'
START PROC FAR
ASSUME CS:CODE,DS:DATA,ES:DATA
PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV ES,AX
MOV DS,AX
MOV DX,OFFSET DTA ;建立磁盘缓冲区首址
MOV AH,1AH
INT 21H
PLE: CALL SETFCB ;键入文件标示符并填入FCB
MOV DX,OFFSET FCB ;建立文件
MOV AH,16H
INT 21H
CMP AL,0
JNZ PLE
MOV WORD PTR FCB+0CH,0 ;顺序写文件初始化
MOV WORD PTR FCB+0EH,1
MOV FCB+20H,0
CLI
MOV AX,0 ;在中断向量表中设中断向量
MOV ES,AX
MOV DI,0CH*4
MOV AX,OFFSET RECEIVE
CLD
STOSW
MOV AX,CS
STOSW
MOV AL,2CH ;8259A初始化
OUT 21H,AL
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,3FBH
MOV AL,0AH
OUT DX,AL ;置传送数据格式
MOV DX,3FCH
MOV AL,0BH ;置中断
OUT DX,AL
MOV DX,3F9H
MOV AL,01H ;允许接受数据准备好中断
OUT DX,AL
STI
WRITE: MOV BX,BUFFER1 ;察看数据接收区
CMP BX,BUFFER2 ;若有字符,取入DTA
JZ WRITE
MOV AL,[BUFFER+BX]
MOV DTA,AL
PUSH AX
MOV BX,OFFSET FCB ;顺序写文件
MOV AH,15H
INT 21H
CMP AL,0
JNZ ERROR
POP AX
CMP AL,1AH ;若为文件结束符,转EOF
JZ EOF
CALL DISPCHAR
MOV BX,BUFFER1 ;调整取数指针
CMP BX,99
JNZ ADN
MOV BUFFER1,0
JMP WRITE
ADN: INC BUFFER1 ;继续写文件
JMP WRITE
ERROR: MOV DX,OFFSET ERRMSG ;显示错误信息
MOV AH,9
INT 21H
RET
EOF: MOV DX,OFFSET FCB ;关闭文件,返回
MOV AH,10H
INT 21H
RET
RECEIVE PROC NEAR ;接收数据中断服务程序
PUSH AX
PUSH BX
PUSH DX
PUSH DS
MOV DX,3FDH ;检查接收的数据是否出错,有错,转ERR
IN AL,DX
TEST AL,1EH
JNZ ERR
MOV DX,32F8H ;读入数据,存入数据接收区
IN AL,DX
AND AL,7FH
MOV BX,BUFFER2
MOV [BUFFER+BX],AL
CMP BX,99 ;调整存数指针
JZ SETO
INC BUFFER2
JMP RTN1
SETO: MOV BUFFER2,0
RTN1: MOV AL,20H ;发中断结束命令给8259A
OUT 20H,AL
POP DS
POP DX
POP BX
POP AX
STI
IRET
ERR: MOV AL,'?' ;显示错误提示符'?'
MOV BX,0
MOV AH,14
INT 10H
JMP RTN1
RECEIVE ENDP
SETFCB PROC NEAR
SETFCB ENDP
DISPCHAR PROC NEAR
DISPCHAR ENDP
START ENDP
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -