标签:工作 调用 ack 移植 style 闪烁 开始 中断处理程序 状态
中断:CPU不再接着(刚执行完的指令)向下执行,而是转去处理中断信息。
assume cs:codesg, ss:stacksg, ds:datasg stacksg segment db 200h dup (0) stacksg ends datasg segment ; ‘$‘: 9 退出显示的格式 ; 13,10:回车换行 szmsg db 13,10,‘hello world!‘,13,10,‘$‘ datasg ends codesg segment start: mov ax,datasg mov ds,ax lea dx, szmsg ; ah寄存器为9:终端号 9 显示信息、显示ds为段地址 dx 位偏移地址的包含信息 ; 会取上面 szmsg 符号的 hello worold! 字符 mov ah,9 int 21h ; ah寄存器为4c:则退出程序,为Dos状态 mov ax,4c00h int 21h codesg ends end start
中断过程由CPU的硬件自动完成;
用中断类型码找到中断向量,并用它设置CS和IP
(1)从中断信息中取得中断类型码
(2)标志寄存器的值入栈——中断过程中要改变标志寄存器的值,需要先行保护
(3)设置标志寄存器的第8位TF 和第9位IF的值为0
(4)CS的内容入栈;
(5)IP的内容入栈;
(6)从中断向量表读取中断处理程序的入口地址,设置IP和CS。
(1)取得中断类型码N;
(2) pushf
(3) TF = 0,IF = 0
TF(Trap Flag): 陷阱标志,用于单步调试;
IF(Interrupt Flag):中断标志;
(4) push CS
(5) push IP
(6)(IP) = (N*4),(CS) = (N*4+2)
CPU随时都可能检测到中断信息,所以中断处理程序必须常驻内存(一直存储在内存某段空间之中)。
中断处理程序的入口地址,即中断向量,必须存储在对应的中断向量表表项中(0000:0000-0000:03FF)。
TF-陷阱标志(Trap flag):用于调试时的单步方式操作。当TF=1时,每条指令执行完后产生陷阱,由系统控制计算机;当TF=0时,CPU正常工作,不产生陷阱。
IF-中断标志(Interrupt flag):当IF=1时,允许CPU响应可屏蔽中断请求;当IF=0时,关闭中断。
CPU在执行完一条指令之后,如果检测到标志寄存器的TF位为1,则产生单步中断(中断类型码为1),引发中断过程,执行中断处理程序。
(1)取得中断类型码1;
(2)标志寄存器入栈,TF、IF设置为0;
(3) CS、IP入栈;
(4)(IP)=(1*4),(CS)=(1*4+2)。
• 中断处理程序也由一条条指令组成的。
• 如果在执行中断处理程序之前,TF=1,则CPU在执行完中断处理程序的第一条指令后,又要产生单步中断,转去执行单步中断的中断处理程序的第一条指令……
• 上面的过程将陷入一个永远不能结束的循环,CPU永远执行单步中断处理程序的第一条指令。
• 所以,在进入中断处理程序之前,设置TF=0。
一般情况下,CPU在执行完当前指令后,如果检测到中断信息,就响应中断,引发中断过程。
在有些情况下,CPU 在执行完当前指令后,即便是发生中断,也不会响应。
例:在执行完向 ss寄存器传送数据的指令后,即便是发生中断,CPU 也不会响应。
原因:ss:sp联合指向栈顶,而对它们的设置应该连续完成。
以此保证对栈的正确操作!
注:栈段 与 栈顶指针 必须连续起来去做。
int格式: int n,n为中断类型码
功能:引发中断过程
CPU 执行int n指令,相当于引发一个 n号中断的中断过程,执行过程如下:
(1)取中断类型码n;
(2)标志寄存器入栈,IF = 0,TF = 0;
(3)CS、IP入栈;
(4)(IP) = (n*4),(CS) = (n*4+2)。 —从此处转去执行n号中断的中断处理程序。
• int 指令的最终功能和call指令相似,都是调用一段程序。
• 一般情况下,系统将一些具有一定功能的子程序,以中断处理程序的方式提供给应用程序调用。
BIOS,是在系统板的ROM中存放着一套程序
BIOS中的主要内容
(1)硬件系统的检测和初始化程序
(2)外部中断和内部中断的中断例程
(3)用于对硬件设备进行I/O操作的中断例程
(4)其他和硬件系统相关的中断例程
使用BIOS功能调用,程序员不用了解硬件操作细节,直接使用指令设置参数,并中断调用BIOS例
程,即可完成相关工作!
使用BIOS功能调用:(1)方便编程;(2)能写出简洁、可读性好、易于移植的程序。
用BIOS的10h中断
(ah)=2时,调用第10h中断例程的2号子程序,设置光标位置
(ah)=9时,调用第10h中断例程的9号子程序,在光标位置显示字符
assume cs:code code segment mov ah,2 ;置光标功能 mov bh,0 ;第0页 mov dh,5 ;dh中放行号 mov dl,12 ;dl中放列号 int 10h mov ah,9 ;显示字符功能 mov al,‘a‘ ;字符 mov bl,11001010b;颜色属性 mov bh,0 ;第0页 mov cx,3 ;字符重复个数 int 10h mov ax,4c00h int 21h code ends end
标签:工作 调用 ack 移植 style 闪烁 开始 中断处理程序 状态
原文地址:https://www.cnblogs.com/xiangsikai/p/12485477.html