关于杨季文80*86中断处理实例T10-6.ASM的疑问

x8335533 2018-08-28 02:48:16
演示任务的代码段
DemoCodeSEG SEGMENT PARA USE16
ASSUME CS:DemoCodeSEG,DS:DemoDataSEG
DemoBegin:
MOV AX,DemoStack_SEL
MOV SS,AX
MOV SP,DemoStackLEN ;置堆栈
MOV AX,DemoData_SEL
MOV DS,AX ;置数据段
MOV ES,AX
MOV FS,AX
MOV GS,AX
;
MOV AL,11111110B ;置中断屏蔽寄存器
OUT IMREGP,AL ;仅开放时钟中断
STI ;开中断
DemoConti:
CMP FLAG,0 ;判标志
JZ DemoConti ;为0继续
;
CLI ;关中断
;转回临时代码段,准备回实方式
OVER: JUMP16 TempCode_SEL,<OFFSET ToDOS>



;8H号(时钟)中断处理程序的代码段
TICodeSEG SEGMENT PARA USE16
ASSUME CS:TICodeSEG,DS:TIDataSEG
TIBegin:
PUSH EAX
PUSH DS
PUSH FS ;保护现场
PUSH GS
MOV AX,TIData_SEL
MOV DS,AX ;置中断处理程序数据段
MOV AX,EchoData_SEL
MOV FS,AX ;置显示过程数据段
MOV AX,DemoData_SEL
MOV GS,AX ;置演示程序数据段
;
CMP COUNT,0
JNZ TI2 ;计数非0表示未到一秒
MOV COUNT,18 ;每秒约18次
INT 0FEH ;调用0FEH号中断处理程序显示
CMP FS:MESS,'0'
JNZ TI1
MOV GS:FLAG,1 ;显示符号'0'时置标记
TI1: DEC FS:MESS ;调整显示符号
TI2: DEC COUNT ;调整计数
POP GS
POP FS
POP DS
MOV AL,EOICOM
OUT ICREGP,AL ;通知中断控制器中断处理结束
POP EAX
IRETD ;中断返回
TICodeLEN = $ - TICodeSEG
TICodeSEG ENDS

在演示代码段中,调用8h中断的代码是:

STI ;开中断
DemoConti:
CMP FLAG,0 ;判标志
JZ DemoConti ;为0继续
;
CLI ;关中断

那么为什么在8h中断处理程序中,并没有开中断的代码,如果没有的话,cpu在处理中断程序时,不是自动关中断吗,那么我理解8h在运行一次之后,没有开中断的代码,就不能再继续被调用了,有没有大神告知8h中断到底是怎么被调用的呢?
...全文
178 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-08-28
  • 打赏
  • 举报
回复
在DosBox中调试。
x8335533 2018-08-28
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
https://www.baidu.com/s?wd=BIOS%208号中断

这位老师,您给我这个链接我没明白有什么用。在我的这个问题里,已经重写了8h中断,您可以帮忙看一下代码吗?

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧