⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fasong.txt

📁 本文通过汇编语言实现ibm-pc串行口通信的查询发送
💻 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 + -