MOV AL,n ;取中断入口 MOV AH,35H INT 21H PUSH ES ;存原中断入口 PUSH BX PUSH DS MOV AX,SEG INTRAD MOV DS,AX MOV DX,OFFSET INTRAD MOV AL,n ;中断类型号 MOV AH,25H;设置中断入口 INT 21H POP DS : POP DX ;恢复原中断入口 POP DS MOV AL,n MOV AH,25H INT 21H RET INTRAD: : 中断服务子程 IRET 我没懂这段代码,可以具体讲讲吗
时间: 2023-06-17 15:04:55 浏览: 142
这段代码是一个在 DOS 系统下设置中断处理程序的例子。下面是具体解释:
1. MOV AL, n:将中断类型号 n 存储在 AL 寄存器中,表示要设置的中断类型。
2. MOV AH, 35H:将 35H 存储在 AH 寄存器中,表示要获取当前中断类型的入口地址。
3. INT 21H:调用 DOS 的中断 21H,将当前中断类型的入口地址存储在 ES:BX 中,其中 ES 是段寄存器,BX 是基址寄存器。
4. PUSH ES:将当前中断类型的入口地址保存到栈中。
5. PUSH BX:将 BX 寄存器的值也保存到栈中。
6. PUSH DS:将 DS 寄存器的值保存到栈中。
7. MOV AX, SEG INTRAD:将 INTRAD 标签所在的段地址存储在 AX 寄存器中。
8. MOV DS, AX:将 AX 寄存器中的值存储到 DS 寄存器中,这样 DS 寄存器就指向了 INTRAD 标签所在的段。
9. MOV DX, OFFSET INTRAD:将 INTRAD 标签的偏移地址存储在 DX 寄存器中,这样 DX 寄存器就指向了 INTRAD 标签处的代码。
10. MOV AL, n:将中断类型号 n 存储在 AL 寄存器中,表示要设置的中断类型。
11. MOV AH, 25H:将 25H 存储在 AH 寄存器中,表示要设置中断处理程序的入口地址。
12. INT 21H:调用 DOS 的中断 21H,将中断处理程序的入口地址设置为 INTRAD。
13. POP DS : POP DX:从栈中弹出 DS 和 DX 寄存器的值,恢复原中断处理程序的入口地址。
14. POP DS:从栈中弹出 DS 寄存器的值,恢复 DS 寄存器的值。
15. MOV AL, n:将中断类型号 n 存储在 AL 寄存器中,表示要设置的中断类型。
16. MOV AH, 25H:将 25H 存储在 AH 寄存器中,表示要设置中断处理程序的入口地址。
17. INT 21H:调用 DOS 的中断 21H,将中断处理程序的入口地址设置为原来的值。
18. RET:返回到调用此函数的程序中。
INTRAD: 中断服务子程:这是一个标签,表示中断服务子程序的开始,即中断处理程序的代码。
IRET:这是一个指令,表示中断处理程序的结束,将栈中保存的 IP、CS 和 FLAGS 寄存器的值恢复到原来的状态,并返回到中断调用处。
综上所述,这段代码的作用是:设置指定中断类型的中断处理程序为 INTRAD,执行完 INTRAD 中的代码后,再恢复原来的中断处理程序。
阅读全文