5 假设微机系统外扩了如下的一个“单脉冲发生器”,该“单脉冲发生器”电路受一个自复开关K的控制,每按一次K,该电路输出一个正脉冲,输入到系统机从8259的IR1作为外部中断请求。 要求:每按一次K,屏幕上显示一行字符串“Welcome!”。主机键盘按任意键,程序结束,返回DOS,要求写出完整的源程序。
时间: 2024-02-18 11:01:41 浏览: 67
下面是一个示例程序实现上述功能。
```assembly
; 定义数据段
DATA SEGMENT
MSG DB 'Welcome!', 0
DATA ENDS
; 定义代码段
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
; 初始化
START:
MOV AX, DATA
MOV DS, AX
; 初始化8259芯片
MOV AL, 20H
OUT 20H, AL
MOV AL, 0
OUT 21H, AL
; 安装中断处理程序
MOV AX, CODE
MOV DS, AX
MOV AX, OFFSET INT_PROC
MOV [IVT+1*4], AX
MOV BYTE PTR [IVT+1*4+2], 0
; 循环检测键盘输入
LOOP:
MOV AH, 01H
INT 21H
JNZ EXIT
; 程序结束,返回DOS
EXIT:
MOV AH, 4CH
INT 21H
; 中断处理程序
INT_PROC PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
; 显示字符串
MOV DX, OFFSET MSG
MOV AH, 9
INT 21H
; 结束中断
MOV AL, 20H
OUT 20H, AL
MOV AL, 0
OUT 21H, AL
POP DX
POP CX
POP BX
POP AX
IRET
INT_PROC ENDP
; 中断向量表
IVT LABEL WORD
DW 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; 其他中断
DW OFFSET INT_PROC, CODE ; IR1外部中断
; 结束程序
END START
CODE ENDS
```
上述程序首先初始化了数据段和代码段,然后初始化了8259芯片,并安装了中断处理程序。在循环中,程序通过检测键盘输入来判断是否退出程序。中断处理程序会在每次按下K时被触发,显示字符串并结束中断。
阅读全文