[Intel汇编-MASM]外中断

1. 外中断的概念:

    1) 之前叙述过,外中断基本上都是外设引发的,而外设和CPU通信的桥梁就是端口;

    2) 外中断分为可屏蔽中断和不可屏蔽中断两种:

        i. 可屏蔽中断:几乎所有由外设引发的外中断都是可屏蔽的,即在程序可以通过设置IF标志位决定是否允许在当前程序中被外中断打断;

           *1. sti:set interrupt flag,将IF置1,表示可以允许外中断;

           *2. cld:clean interrupt flag,将IF置0,表示不允许外中断;

           *3. 还记得中断过程吗?其中有一步就是讲IF置0,这样进入中断处理程序后就可以接受外中断了,但是你可以根据具体需求在中断处理程序中通过指令sti或cli来设置是否允许外中断;

        ii. 不可屏蔽中断:

           *1. 所有中断类型码为2的都是不可屏蔽中断;

           *2. 即不管IF是什么值都无法屏蔽必须执行的中断;

           *3. 因此这类中断都是用来处理极端紧急且重要的情况;

           *4. 由于不可屏蔽,因此中断过程中不用在识别中断类型码(即比普通中断过程少掉第一步),不可屏蔽中断本质是由硬件实现的;

           !所有的中断过程本身就都是由硬件控制的;


2. 使用BIOS进行键盘I/O:

    1) 9号中断——键盘输入:

        i. 键盘中有一块扫描芯片,可以对键盘上每一个键的开关状态进行扫描,当一个键被按下或被松开时都会产生一个扫描码,按下时产生通码,松开时产生断码,且断码 = 通码 + 80H;

        ii. 产生的扫描码会送到60H号端口,一旦扫描码达到端口就会向CPU发出9H可屏蔽外中断信息,如果此时IF=1就会立即执行该中断处理程序;

        iii. int 9中断处理的过程:

            *1. 从60H处读出扫描码;

            *2. 将扫描码进行转换,对于字符码(A~z0~9?!等)会转化成相应的ASCII码并用一个字保存(高8位放扫描码,低8位放相应的ASCII码),然后将其放入BIOS键盘缓冲区(该缓冲区是BIOS在开机时在内存中划的一块专门用于存放键盘输入的缓冲区,最多可以存放15个按键)

你可能感兴趣的:([Intel汇编-MASM]外中断)