系统中一故障源存在瞬时故障和永久故障两种可能。当故障发生时,CPU响应中断请求转入中断服务程序。首先采用延时1秒的方法判断是哪种故障(调用自行编写的延时子程序DELAY,紧接着检查故障是否还在。在即永久故障,否则瞬时故障),若为瞬时故障不做任何处理直接返回,否则置FAULT字节单元为全1。故障源寄存器AL(用输入指令IN AL, 20H,其中20H为故障源端口地址)最高位(第7位)为故障记录位,该位为1表明故障发生。 要求用emu8086编写完成上述故障判断的中断服务程序。
时间: 2024-02-03 15:12:26 浏览: 21
下面是使用emu8086编写的故障判断的中断服务程序:
```
;中断服务程序
INTERRUPT:
PUSH AX ;保存现场
PUSH BX
PUSH CX
PUSH DX
IN AL, 20H ;读取故障源寄存器AL的值
PUSHF ;将标志寄存器压入堆栈
CALL DELAY ;调用延时子程序
POPF ;弹出标志寄存器
CMP AL, 80H ;判断最高位是否为1
JZ FAULT ;如果最高位为1,则为永久故障,跳转到FAULT处理程序
POP DX ;恢复现场
POP CX
POP BX
POP AX
IRET ;返回中断前状态
;延时子程序
DELAY:
PUSH CX ;保存现场
MOV CX, 1000 ;循环计数器
L1:
LOOP L1 ;循环1秒钟
POP CX ;恢复现场
RET ;返回
;永久故障处理程序
FAULT:
MOV BYTE PTR [FAULT], FFH ;置FAULT字节单元为全1
OR AL, 80H ;将最高位设为1,表示故障发生
OUT 20H, AL ;将故障记录写入故障源寄存器AL
POP DX ;恢复现场
POP CX
POP BX
POP AX
IRET ;返回中断前状态
```
其中,DELAY是一个延时子程序,用于延时1秒钟。如果故障是瞬时故障,则不做任何处理直接返回;如果故障是永久故障,则置FAULT字节单元为全1,并将故障记录写入故障源寄存器AL。