例8.14 编写一个类似TYPE命令的程序,其要求如下:
1)、用键盘输入文件名(可包含路径),若输入的字符串为空,则程序运行结束;
2)、若输入的文件存在,则显示其内容,否则,显示文件不存在的信息。
解: | ||||
.MODEL SMALL .DATA FName DB 30, ?, 30 DUP(?), 0 Fail DB "Not Found", 10, 13, "$" Buff DB 128 dup(?) .CODE |
||||
.STARTUP | ||||
again: | ||||
MOV | AH, 0AH | |||
LEA | DX, FName | |||
INT | 21H | ;输入的文件名 | ||
MOV | BL, FName+1 | |||
CMP | BL, 0 | |||
JZ | over | ;检查文件名是否为空 | ||
XOR | BH, BH | |||
MOV | FName[BX+2], 0 | |||
MOV | DX, Offset FName+2 | |||
MOV | AL, 0H | |||
MOV | AH, 3DH | |||
INT | 21H | ;以只读方式打开文件 | ||
JNC | succ | |||
LEA | DX, Fail | |||
MOV | AH, 9H | |||
INT | 21H | |||
JMP | again | |||
succ: | ||||
MOV | BX, AX | ;把文件句柄赋给BX | ||
read: | ||||
LEA | DX, BUFF | |||
MOV | CX, 128 | |||
MOV | AH, 3FH | |||
INT | 21H | ;从文件中最多一次读取128个字符 | ||
CMP | AX, 0 | |||
JZ | close | ;读取的字符数为0 | ||
JC | close | ;读错误 | ||
PUSH | BX | ;保护文件句柄 | ||
MOV | DX, offset buff | |||
MOV | CX, AX | |||
MOV | BX, 1 | ;屏幕设备的句柄规定为1 | ||
MOV | AH, 40H | |||
INT | 21H | ;把读出的字符显示在屏幕上 | ||
POP | BX | ;恢复文件句柄 | ||
JMP | read | |||
close: | ||||
MOV | AH, 3EH | |||
INT | 21H | |||
JMP | AGAIN | |||
over: | ||||
.EXIT | 0 | |||
END |