I/O端口基本知识

     1.什么是I/O端口? CPU使用什么指令与外设进行数据交换?
  答:CPU与I/O设备通过硬件接口或控制器相连接,这些接口或控制器都有数量不等的端口,这些端口有统一的地址编码,CPU通过这些端口使用输入输出指令IN、OUT与外设进行数据交换。

  2.CPU为什么不能用MOV指令进行I/O数据传输?
  答:在80x86微机系统中,I/O端口编址在一个独立的地址空间中,它和存储器是完全分离的。因此,对于存储器的存取操作使用MOV指令,而与端口进行信息交换的操作使用专门的I/O指令,二者不能混淆。

  3.使用查询方式进行输入输出的优缺点是什么?
  答:使用查询方式编程可直接在端口级上输入输出信息,数据的传送速度和吞吐量比较高,另外在控制多个设备的I/O时,可在程序中安排它们的优先级,最先查询的设备,其工作的优先级也最高。修改程序中的查询次序,实际上也就修改了设备的优先级,这样以最简便的方法实现了对设备优先级的控制。查询方式的缺点主要是在查询过程中,要反复的查询等待,浪费了CPU原本可执行大量指令的时间,而且由询问转向相应的处理程序的时间较长,尤其在设备比较多的情况下。

  4.什么是中断?
  答:计算机在执行程序过程中,遇到需要处理的事件时,暂停当前正在运行的程序,转去执行有关的服务程序,处理完后自动返回原程序,这个过程称为中断(interrupt)。中断在现代计算机系统中是一种非常重要的技术,输入输出设备和主机交换数据、分时操作、实时系统、多处理机系统、计算机网络和分布式计算机系统都要用到这种技术。

  5.中断分为几类?
  答:中断可分为内中断和外中断。内中断是由计算机内部原因引起的中断,内中断又称为软中断,它通常由三种情况引起:
  (1) 由中断指令INT引起;
  (2) 由于CPU的某些错误而引起,如溢出中断、除法错中断等;
  (3) 为调试程序(DEBUG)设置的中断,如单步中断、断点中断;外中断指由外部事件引起的中断,又称为硬中断。
  硬件中断主要有两种来源:
  (1) 非屏蔽中断(NMI),如电源故障中断、实时钟中断等。
  (2) 可屏蔽中断,一般是由于各种外部设备请求CPU提供服务所引起的中断。

  6.什么是中断类型?
  答:80x86中断系统能处理256种中断,每种中断都安排一个编号,称之为中断类型。256种中断类型号排列为00~0FFH。

  7.中断向量表的作用是什么?
  答:为了提高响应中断的速度,通常把所有中断处理程序的入口地址(或称为中断向量)汇集在中断向量表中,当CPU响应中断时,根据中断源的中断类型号,直接从中断向量表中得到相应的入口地址,并从该地址开始执行中断处理程序。

  8.中断向量表一般安排在存储器的什么位置?
  答:存储器最低的1K字节,地址从00000 ~ 03FFH存放中断向量。中断向量表中的256项中断向量对应256种中断类型,每项占用四个字节,其中两个字节存放中断处理程序的段地址(16位),另两个字节存放偏移地址(16位)。

  9.某外设能否得到CPU的中断服务取决于什么控制条件?
  答:从外设发出中断请求到CPU响应中断,有两个控制条件是起决定性作用的:
  (1) 该外设的中断请求是否被屏蔽,这个条件由8259A的中断屏蔽寄存器(端口地址为21H)控制;
  (2) CPU是否允许响应中断,这由标志寄存器(FLAG)中的中断允许位IF控制。但CPU不能禁止非屏蔽中断,对于非屏蔽中断CPU总会响应。

  10.什么是开中断和关中断?如何控制开中断和关中断?
  
答:允许CPU响应外设的中断请求叫做开中断,此时IF=1;不允许CPU响应外设的中断请求叫做关中断,此时IF=0。有两条指令能控制开、关中断:STI 开中断(IF=1)CLI 关中断(IF=0)

  11.CPU响应中断的过程是怎样的?
  答:(1)取中断类型号N
    (2)寄存器(FLAG)内容入栈
    (3)当前代码段寄存器(CS)内容入栈
    (4)当前指令计数器(IP)内容入栈
    (5)禁止硬件中断和单步中断(IF=0, TF=0)
    (6)从中断向量表中取4?N的字节内容送IP,取4?N+2中的字节内容送CS
    (7)转中断处理程序

  12.为什么产生中断后,要清除IF和TF位?
  答:在中断发生时,CPU自动清除了IF位和TF位,这样设计的目的是使CPU转入中断处理程序后,不允许再产生新的中断,包括单步执行。如果在执行中断处理程序的过程中,还允许外部的中断,可通过STI指令再把IF置为1。

  13.当多个中断源同时向CPU请求中断时,CPU应如何处理?
  答:各种中断源事先安排有中断优先级,当多个中断源同时申请中断时,CPU先比较他们的优先级,,然后从优先级高到优先级低的次序来依次处理各个中断源的中断请求。

  14.在中断处理程序中,如何发出EOI命令?
  答:EOI命令即中断结束命令,用两条指令完成: MOV AL,20H ;EOI位为1的命令码 OUT 20H,AL ;命令码送中断命令寄存器(端口地址为20H)

  15.中断程序的编写方法是什么?
  答:在主程序中要为中断做如下准备工作:
  (1)设置中断向量(使用INT 21H的25H功能)
  (2)设置中断设备的屏蔽位(I/O端口21H)
  (3)开中断(STI)
  中断处理程序的编写步骤:
  (1)保存工作寄存器的内容
  (2)如允许中断嵌套,则开中断(STI)
  (3)中断处理功能
  (4)关中断 (CLI)
  (5)送中断结束命令(EOI)给中断命令寄存器(I/O端口20H)
  (6)恢复工作寄存器内容
  (7)返回被中断的程序(RET)

  16.什么是中断嵌套?处理中断嵌套时应注意什么?
  
答:中断嵌套是指正在运行的中断处理程序,又被其它中断源中断的情况。一个正在执行的中断处理程序,在开中断(IF=1)的情况下,能被优先级高于它的中断源中断,但如果要被同级或低级的中断源中断,则必须发出EOI命令,清除正在执行的中断请求,才能响应同级或低级的中断。80X86没有规定中断嵌套的深度(中断程序又被中断的层次),但在实际使用时,多重的中断嵌套要受到堆栈容量的限制,所以在编写中断程序时,一定要考虑有足够的堆栈单元来保存多次中断的断点及各寄存器的内容。

  17.什么情况下中断处理子程序需要结束中断(EOI)? 结束中断指令起什么作用?
  答:在外中断处理程序之中或在结束之前,发出中断结束命令EOI能清除当前正在处理的中断请求,以便能够在该处理程序的过程中或结束之后,再响应同级或低级的中断。

  18.系统提供的INT 1CH的中断处理程序是怎样的?为什么?
  答:系统提供的INT 1CH的中断处理程序中只有一条指令:IRET。实际上这是系统为用户设置的一个中断类型号,用户可以用自己设计的中断处理代码来代替原1CH程序。如果用户有某种定时周期性的工作需要完成,就可以利用系统定时器的中断间隔(约每秒中断18.2次),嵌套调用1CH的中断处理程序,并用计数的方法控制时间周期。如,需要10秒钟的周期,则将计数值设置为182。定时器中断程序每调用一次INT 1CH,计数值减1,当计数值为0时,说明已到10秒。

posted @ 2010-04-28 22:24 灰鸽子 阅读(...) 评论(...) 编辑 收藏