例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 | ||||