8086中如果采用中断方式应该如何设计中断服务子程序
时间: 2023-10-03 15:07:00 浏览: 59
8086 中断服务子程序的设计一般包括以下几个步骤:
1. 保存被中断的程序的现场(即 CS、IP、FLAGS 等寄存器的值)。
2. 执行中断服务子程序需要完成的任务。
3. 恢复被中断程序的现场,使其可以继续执行。
下面是一个简单的中断服务子程序的示例,它可以在调用 INT 21H 中断时显示一个字符串:
```
; 定义中断服务子程序的入口点
int21:
push ax ; 保存 ax 寄存器的值
push bx ; 保存 bx 寄存器的值
push cx ; 保存 cx 寄存器的值
push dx ; 保存 dx 寄存器的值
mov ah, 09h ; 设置 ah 寄存器为显示字符串的功能码
mov dx, offset msg ; 设置 dx 寄存器为字符串的地址
int 21h ; 调用 DOS 中断 21H
pop dx ; 恢复 dx 寄存器的值
pop cx ; 恢复 cx 寄存器的值
pop bx ; 恢复 bx 寄存器的值
pop ax ; 恢复 ax 寄存器的值
iret ; 返回被中断程序,iret 会恢复 CS、IP、FLAGS 等寄存器的值
msg db 'Hello, world!', 0 ; 定义一个字符串
```
在这个中断服务子程序中,我们首先使用 push 指令保存了 ax、bx、cx、dx 四个寄存器的值,然后设置 ah 寄存器为显示字符串的功能码,dx 寄存器为字符串的地址,调用 DOS 中断 21H 来显示字符串。之后使用 pop 指令恢复了四个寄存器的值,最后使用 iret 返回被中断的程序。