?? interrupt.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 + -