第十五章 外中断

cpu处理有运算能力,还要有I/O(Input/Output,输入/输出)能力。

15.1接口芯片和端口

pc系统的接口卡和主板上,装有各种接口芯片, 这些外设接口芯片的内部有若干的寄存器,cpu把这些寄存器当作端口来访问。

外设的输入不直接送入到内存和cpu,而是送入相关的接口芯片的端口中;cpu向外设的输出业不是直接送入外设,而是先送入到端口中,再由相关的芯片送到外设。cpu还可以向外设输出控制指令,这些控制指令命令也是先送入到相关的芯片卡的端口中,然后在由相关的芯片根据命令对外设进行控制。

可见,cpu通过端口与外部设备进行联系。

15.2外部中断信息

当cpu外部有需要处理的事情发生时,比如外部的输入到达时,相关的芯片向cpu发出相关的中断信息,cpu执行完指令后,可以检测发来的中断信息,引发中断过程,处理外设的输入。

(1)可屏蔽中断

可屏蔽中断是cpu可以不相应的中断。cpu时候响应可屏蔽中断,要看标志寄存器IF的设置。当检测到可屏蔽中断时,如果if是1,cpu执行完当前指令后响应中断;如果if=0,则不响应可屏蔽中断。

现在我们可以知道if标志位的设置为0的原因了,在进入中断处理程序后,禁止其他的可屏蔽中断。

设置if的指令如下:

sti:设置IF=1

std:设置IF=0

(2)不可屏蔽中断

不可屏蔽中断的中断类型码固定是2,所以在中断过程中,不需要去中断类型码。几乎所有外设引发的外中断,都是可屏蔽中断。

15.3pc机键盘的处理过程

(1)键盘输入

按下一个键,开关接通,该芯片久产生一个扫描码,扫面说明了按下的键盘的位置,扫面码被送入到主板上相关的寄存器中,该寄存器的端口地址为60h。

一般来说,按下一个键时产生的扫描码称为通码,松开一个键时产生的扫描码称为断码。扫描码的长度为一个字节,通码的第7位为0,断码的第7位为1.

断码=通码+80h

(2)引发9号中断

键盘的输入到达60h端口时,相关的芯片就会向cpu发出中断类型是9的可屏蔽中断,cpu检测到该中断,如果if=0,则响应中断,引发中断过程,转去执行int 9的中断例程。

(3)执行int 9中断例程

blos提供的int 9中断例程,用来进行基本的键盘输入处理

a.读出60h端口中的扫描码

b.如果是字符键的扫描码,则将该扫描码和它对应的字符送入到内存中的blos缓冲区中,如果是控制键,则转变为状态字节。

c.对键盘系统进行相关的控制

0040:17单元存储键盘状态字节,该字节纪录了控制键和切换键的状态。

0:右shift,置1表示按下右shift键

1:左shift键

2:Ctrl状态

3:Alt状态

4:ScrollLock状态

5:NumLock状态

6:CapsLock状态

7:Insert状态

15.4编写int 9中断例程

键盘输出的处理过程如下:

  1. 键盘产生扫描码
  2. 扫描码送入到60h端口
  3. 引发9号中断
  4. cpu执行int 9中断例程处理键盘输入

15.5安装新的int 9中断例程

指令系统总结

8086CPU 主要提供一下几大类的指令
1.数据传送指令
比如:mov,push,pop,pushf,popf,xchg等都是数据传送指令,这些指令实现寄存器和内存,寄存器和寄存器之间的单个数据传送

2.算术运算指令
比如:add,sub,adc,sbb,inc,dec,cmp,imul,idiv,aaa等都是算术运算指令,这些指令实现寄存器和内存中的数据的算数元算,他们的执行结果也是影响标志位寄存器的sf,zf,of,cf,pf,af位。

3.逻辑指令
比如:and,or,not,xor,test,shl,shr,sal,rol,ror,rcl,rcr等都是逻辑指令,除了nog指令外,其他的执行结果都影响标志位寄存器的相关的标志位。

4.转移指令
可以修改IP或者同时修改CS和IP的指令称为转移指令,转移指令可以分为以下几类:

a.无条件转移指令
b.条件转移指令
c.循环指令
d.过程
e.中断

5.处理机控制指令
这些指令对标志位寄存器或其他处理机状态进行设置,比如:cld,std,cli,sti,nop,clc,cmc,stc,hlt,wait,lock等都是处理机控制指令。

6.串处理指令
这些指令都是对内存中的批量数据进行处理,比如:movsb,movsw,cmps,scas,lods,stos等,若要使用这些指令方便的进行批量数据的处理,则需要和rep,repe,repne等前缀指令配合使用。 

共有 0 条评论

Top