汇编int21h指令以及软中断和硬中断的解释

CPU的设计者必须在中断信息和其处理程序的入口地址之间建立某种联系,使得CPU根据中断信息可以找到要执行的处理程序。

我们知道,中断信息中包含有标识中断源的类型码。根据CPU的设计,中断类型码的作用就是用来定位中断处理程序。

比如CPU根据中断类型码13,就可以找到13号中断的处理程序。

可随之而来的问题是,若要定位中断处理程序,需要知道它的段地址和偏移地址,而如何根据8位的中断类型码得到中断处理程序的段地址和偏移地址呢?

CPU用8位的中断类型码通过中断向量表找到相应的中断处理程序的入口地址。

那么什么是中断向量表呢?

中断向量表就是用来存储中断向量的列表。

中断向量表在内存中保存,其中存放着256个中断源所对应的中断处理程序的入口地址,每个入口地址占4个存储单元。如下图所示:


图一

中断向量表在内存中存放,对于8086PC机,中断向量表指定放在内存地址0处。

从内存0000:0000到0000:03FF的1024个单元中存放着中断向量表。

从上面的讲解中,我们知道,可以用中断类型码,在中断向量表中找到中断处理程序的入口。

找到这个入口地址的最终目的是用它设置CS和IP,使CPU执行中断处理程序。

用中断类型码找到中断向量,并用它设置CS和IP,这个工作是由CPU的硬件自动完成的。

CPU硬件完成这个工作的过程被称为中断过程。

int21h中断例程是DOS提供的中断例程,其中包含了DOS提供给程序员在编程时调用的子程序,DOS中断的功能主要包括:
1、DOS键盘功能调用
2、DOS显示功内能调用
3、DOS打印功能
4、DOS串行口通信功能调用。

因为int21h中断例程对应的中断类型码为21,它的中断处理程序的入口地址应该从21×4地址单元开始存放,段地址存放在21×4+2字单元中,偏移地址存放在21×4字单元中。

经常使用的是int21中断例程的4ch号功能,即程序返回功能,如下:

movah,4ch;程序返回

moval,0;返回值

int21h

(ah)=4ch表示调用第21h号中断例程的4ch号子程序,功能为程序返回,可以提供返回值作为参数。

下面在Int21H指令的基础上,举例说明软中断和硬中断的区别。

图二

图2是一个利用键盘和屏幕进行输入输出的汇编程序,其结果是从键盘输入数字的时候屏幕照样显示数字,输入其他字符的时候则显示‘*’号,输入回车键结束。运行结果如图3所示。程序中分别调用了

int21h的9号功能:字符串显示;7号功能:字符输入;2号功能:字符显示。

图三图二程序的运行结果

内中断的意思是指,CPU不再接着刚执行完的指令向下执行,而是转去处理这个特殊信息。外中断是指CPU在计算机系统中,除了能够执行指令,进行运算以外,还应该能够对外部设备进行控制,接收它们的输入,向它们进行输出。该程序中的语句

movah,7;

int21h

属于DOS中断中的7号功能调用,用来接收键盘输入的信息,属于软中断,也称内中断,其过程是按照int21h指令寻找中断程序入口地址,这一中断程序正是用来读取键盘输入字符的,中断由int21h指令触发;指令

inal,60h

是直接读入60h号端口的信息,而60h号端口的信息同样来自于键盘输入,该指令执行时将触发int9H外中断处理程序,该外中断可以扫描相关键盘上的每一个按键所连接的开关电路状态的变换,从而判断出被按下的ascii码键值,先送入端口60H,再送入寄存器al,这一中断过程属于硬中断(外中断)。外中断是由外部因素引起(某人施加了力量在键盘的按键上,引起了相应开关电路的变化,这种变化触发了某个程序的执行,这个被触发的程序就属于外中断)。这个例子可以理解为inal,60h指令先接通了某个开关,允许int9H中断执行,但这个中断是否执行,要看外部电路是否有变化。

指令

movah,7;

int21h

和指令

inal,60h

可以相互替代。

这三条指令的相互替换很好地解释了软中断和硬中断之间的区别和联系。

发布于 2024-11-19
69
目录

    推荐阅读