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

📄 interrupt.txt

📁 多种汇编语言程序设计案例
💻 TXT
字号:
CODE 	  SEGMENT
              ASSUME   CS: CODE 
NEW_INT:                            ;接收字符的中断处理程序
              STI                            ;CPU开中断
              MOV DX , 3F8H    ;接收字符
              IN  AL , DX
              MOV DL , AL         ;显示接收字符
              MOV AH , 2
              INT 21H
              CMP DL , 0DH       ;判断是否为回车
              JNZ L2                    ;不是,转L2处
              MOV DL , 0AH      ;若是,加显示一个换行符
              MOV AH , 2
              INT 21H
L2: 
              MOV AL , 20H       ;发中断结束命令(EOI)
              OUT   20H , AL
              IRET

START:                                 ;主程序部分
              MOV AH , 35H   
              MOV AL , 0CH
              INT 21H                  ;读取原0CH号中断服务程序的地址
              PUSH BX
              PUSH ES               ;以上地址入栈保存(以便在程序退出时再恢复中断矢量表中的内容)
              MOV AX , CS
              MOV DS , AX
              MOV DX , OFFSET NEW_INT
              MOV AH , 25H
              MOV AL , 0CH
              INT 21H             ;修改中断矢量表,将NET_INT位置登记为0CH号中断服务程序的地址
              ;以下初始化8250
              MOV DX , 3FBH   ;指向线路控制寄存器
              MOV AL , 80H       ;位7置1
              OUT DX , AL         ;发送此字节
              MOV DX , 3F9H    ;指向波特率除数的高字节
              MOV AL , 0            ; 1200 BPS对应的高字节
              OUT DX , AL         ;发送此字节
              DEC DX                  ;指向波特率除数的低字节
              MOV AL , 60H       ; 1200 BPS对应的低字节
              OUT DX , AL         ;发送此字节
              MOV AL , 1BH       ;数据长度为8位 , 1个奇偶校验位 , 偶校验 , 1个停止位
              MOV DX , 3FBH   ;指向线路控制寄存器
              OUT DX , AL         ;发送此字节
              MOV DX , 3FCH   ;设置MODEM控制寄存器
              MOV AL , 0BH      ;允许8250发中断
              OUT DX , AL
              MOV DX ,  3F9H  ;指向中断允许寄存器
              MOV AL ,  1          ;允许数据接收准备好中断
              OUT DX , AL        ;发送此字节
              CLI                          ;关中断,以便对中断控制器8259A进行操作
              IN AL , 21H            ;读取中断屏蔽寄存器的内容
              AND AL , 0EFH    ;将COM1中断(即IRQ4引脚)的对应位置0,允许中断。
              OUT 21H , AL       ;写入中断控制器8259A中
              STI                          ;开中断
L1:                                         ;  主程序循环,等待收到字符的中断发生。
              MOV AH , 0
              INT 16H                 ;读取键盘字符
              CMP AL , 03          ;比较是否为CTRL-C键
              JNZ L1                   ;若不是,继续循环
EXIT:                                    ;退出处理
              MOV AH , 25H
              MOV AL , 0CH
              POP DS
              POP DX
              INT 21H                 ;恢复中断矢量表中0CH号中断服务程序的原地址。
              MOV AH , 4CH
              INT 21H                 ;返回DOS
CODE  ENDS
             END   START

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -