2、系统中一故障源存在瞬时故障和永久故障两种可能。当故障发生时,CPU响应中断请求转入中断服务程序。首先采用延时1秒的方法判断是哪种故障(调用自行编写的延时子程序DELAY,紧接着检查故障是否还在。在即永久故障,否则瞬时故障),若为瞬时故障不做任何处理直接返回,否则置FAULT字节单元为全1。故障源寄存器AL(用输入指令IN AL, 20H,其中20H为故障源端口地址)最高位(第7位)为故障记录位,该位为1表明故障发生。 要求编写完成上述故障判断的中断服务程序。 emu8086
时间: 2024-02-06 22:10:56 浏览: 63
以下是中断服务程序的汇编代码:
```
; 延时子程序
DELAY PROC NEAR
; 设置延时计数器初值
MOV DX, 1000H
L1:
DEC DX
JNZ L1
RET
DELAY ENDP
; 中断服务程序
FAULT_ISR PROC
; 保存现场
PUSH AX
PUSH DX
; 延时1秒钟
CALL DELAY
; 检查故障是否还在
IN AL, 20H
TEST AL, 80H
JZ FAULT_ISR_END
; 置FAULT字节单元为全1
MOV BYTE PTR FAULT, 0FFH
; 设置故障记录位
OR AL, 80H
OUT 20H, AL
FAULT_ISR_END:
; 恢复现场
POP DX
POP AX
; 结束中断服务程序
IRET
FAULT_ISR ENDP
```
在该中断服务程序中,首先保存现场,然后调用延时子程序延时1秒钟。接着使用输入指令IN读取故障源寄存器AL的值,并通过TEST指令检查最高位是否为1,如果为0,则说明是瞬时故障,直接返回。否则,将FAULT字节单元置为全1,并使用OR指令设置故障记录位。最后,恢复现场并使用IRET指令结束中断服务程序。
相关问题
系统中一故障源存在瞬时故障和永久故障两种可能。当故障发生时,CPU响应中断请求转入中断服务程序。首先采用延时1秒的方法判断是哪种故障(调用自行编写的延时子程序DELAY,紧接着检查故障是否还在。在即永久故障,否则瞬时故障),若为瞬时故障不做任何处理直接返回,否则置FAULT字节单元为全1。故障源寄存器AL(用输入指令IN AL, 20H,其中20H为故障源端口地址)最高位(第7位)为故障记录位,该位为1表明故障发生。 要求编写完成上述故障判断的中断服务程序。
下面是可能的中断服务程序代码示例:
```
; 中断服务程序
ISR:
push ax ; 保存寄存器状态
push bx
push cx
push dx
; 延时1秒钟
call DELAY
; 检查故障是否还在
in al, 20h ; 读取故障源寄存器
test al, 80h ; 检查最高位是否为1
jnz permanent_fault ; 若最高位为1,则为永久故障
; 瞬时故障,不做任何处理
pop dx ; 恢复寄存器状态
pop cx
pop bx
pop ax
iret ; 返回中断返回指令
permanent_fault:
; 设置故障记录位
or al, 80h ; 将最高位设置为1
out 20h, al ; 写回故障源寄存器
; 存储故障信息
pop dx ; 恢复寄存器状态
pop cx
pop bx
pop ax
iret ; 返回中断返回指令
```
其中,`DELAY` 是自行编写的延时子程序,可根据具体情况实现。故障信息的存储方式可以根据实际需求决定。
、系统中一故障源存在瞬时故障和永久故障两种可能。当故障发生时,CPU响应中断请求转入中断服务程序。首先采用延时1秒的方法判断是哪种故障(调用自行编写的延时子程序DELAY,紧接着检查故障是否还在。在即永久故障,否则瞬时故障),若为瞬时故障不做任何处理直接返回,否则置FAULT字节单元为全1。故障源寄存器AL(用输入指令IN AL, 20H,其中20H为故障源端口地址)最高位(第7位)为故障记录位,该位为1表明故障发生。 要求编写完成上述故障判断的中断服务程序。
中断服务程序的代码如下:
```
; 中断服务程序
INTERRUPT:
CALL DELAY ; 延时1秒
IN AL, 20H ; 读取故障源寄存器AL
AND AL, 80H ; 检查最高位是否为1
JZ RETURN ; 若最高位为0,表示瞬时故障,直接返回
MOV BYTE PTR FAULT, FFH ; 否则为永久故障,置FAULT字节单元为全1
OR AL, 80H ; 将最高位置为1,表示故障记录
OUT 20H, AL ; 将修改后的值写入故障源寄存器AL
RETURN:
IRET ; 中断服务程序结束,返回
```
说明:
1. 中断服务程序首先调用延时子程序 `DELAY`,延时1秒,等待故障持续时间,以便判断故障类型。
2. 然后使用输入指令 `IN AL, 20H` 读取故障源寄存器AL的值,检查最高位是否为1,如果为1,则表示永久故障,否则为瞬时故障。
3. 如果是瞬时故障,不做任何处理,直接返回。
4. 如果是永久故障,将FAULT字节单元置为全1,表示故障,同时将故障记录位设置为1,然后将修改后的值写入故障源寄存器AL。
5. 最后使用 `IRET` 指令结束中断服务程序,返回到原来的程序继续执行。
阅读全文