微机原理与接口技术(钱晓捷版)课后习题答案 下载本文

test al,80h jnz status mov al,[bx] out 80h,al ; 输出一个字节 inc bx jmp again ; 循环 done:

〔习题7.10〕

以可屏蔽中断为例,说明一次完整的中断过程主要包括哪些环节? 〔解答〕

中断请求:外设通过硬件信号的形式、向处理器引脚发送有效请求信号。 中断响应:在满足一定条件时,处理器进入中断响应总线周期。 关中断:处理器在响应中断后会自动关闭中断。

断点保护:处理器在响应中断后将自动保护断点地址。 中断源识别:处理器识别出当前究竟是哪个中断源提出了请求,并明确与之相应的中断服务程序所在主存位置。

现场保护:对处理器执行程序有影响的工作环境(主要是寄存器)进行保护。 中断服务:处理器执行相应的中断服务程序,进行数据传送等处理工作。 恢复现场:完成中断服务后,恢复处理器原来的工作环境。 开中断:处理器允许新的可屏蔽中断。

中断返回:处理器执行中断返回指令,程序返回断点继续执行原来的程序。 〔习题7.11〕

什么是中断源?为什么要安排中断优先级?什么是中断嵌套?什么情况下程序会发生中断嵌套? 〔解答〕

计算机系统中,凡是能引起中断的事件或原因,被称为中断源。

处理器随时可能会收到多个中断源提出的中断请求,因此,为每个中断源分配一级中断优先权,根据它们的高低顺序决定响应的先后。

一个中断处理过程中又有一个中断请求、并被响应处理,被称为中断嵌套。 必须在中断服务程序中打开中断,程序才会发生中断嵌套。 〔习题7.12〕

明确如下中断有关的概念:中断源、中断请求、中断响应、关中断、开中断、中断返回、中断识别、中断优先权、中断嵌套、中断处理、中断服务。 〔解答〕

中断源:能引起中断的事件或原因。

中断请求:是外设通过硬件信号的形式、向处理器引脚发送有效请求信号。 中断响应:中断响应是在满足一定条件时,处理器进入中断响应总线周期。 关中断:禁止处理器响应可屏蔽中断。 开中断:允许处理器响应可屏蔽中断。

中断返回:处理器执行中断返回指令,将断点地址从堆栈中弹出,程序返回断点继续执行原来的程序。

中断识别:处理器识别出当前究竟是哪个中断源提出了请求,并明确与之相应的中断服务程序所在主存位置。 中断优先权:为每个中断源分配一级中断优先权,即系统设计者事先为每个中断源确定处理器响应他们的先后顺序。

中断嵌套:在一个中断处理过程中又有一个中断请求被响应处理,称为中断嵌套。 中断处理:接到中断请求信号后,随之产生的整个工作过程,称中断处理。 中断服务:指处理器执行相应的中断服务程序,进行数据传送等处理工作。 〔习题7.13〕

按照图7-10所示的中断查询接口与相应的流程图,编写用于中断服务的程序段。具体要求是,当程序查到中断设备0有中断请求(对应数据线D0),它将调用名为PROC0的子程序;如此,依次去查中断设备1~中断设备3,并分别调用名为PROC1~PROC3的子程序。 〔解答〕 sti push ax push dx ? mov dx,4000h status: in al,dx test al,01h jnz service0 test al,02h jnz service1 test al,04h jnz service2 test al,08h jnz service3 ?

service0: call proc0 jmp done

service1: call proc1 jmp done

service2: call proc2 jmp done

service3: call proc3 jmp done ??

done: pop dx pop ax iret

〔习题7.14〕

什么是DMA读和DMA写?什么是DMA控制器8237A的单字节传送、数据块传送和请求传送? 〔解答〕

DMA读:存储器的数据在DMA控制器控制下被读出传送给外设。 DMA写:外设的数据在DMA控制器控制下被写入存储器。

单字节传送方式:每次DMA传送时仅传送一个字节。传送一个字节之后,DMA控制器释放系统总线,将控制权还给处理器。

数据块传送: DMA传送启动后就连续地传送数据,直到规定的字节数传送完。

请求传送:DMA传送由请求信号控制。如果请求信号一直有效,就连续传送数据;但当请求信号无效时,DMA传送被暂时中止。 〔习题7.15〕

IA-32处理器何时处于开中断状态、何时处于关中断状态? 〔解答〕

在IA-32处理器中,若IF=1,则处理器处于开中断状态。

若IF=0,则处理器处于关中断状态。IF=0关中断的情况有:系统复位后,任何一个中断(包括外部中断和内部中断)被响应后,执行关中断指令CLI后。 〔习题7.16〕

简述IA-32处理器的中断工作过程。 〔解答〕

IA-32处理器获得向量号识别出中断源后,中断或异常接着的工作过程如下:

(1)将标志寄存器EFLAGS压入堆栈,保护各个标志位;将被中断指令的逻辑地址(代码段寄存器和指令指针寄存器内容)压入堆栈,保护断点。

(2)如果有错误代码,将其压入堆栈(有些异常产生错误代码,更具体地表明产生异常的原因)。实地址方式的异常不返回错误代码。

(3)根据向量号获得中断服务程序(中断或异常的处理程序)的段选择器和指令指针,分别传送给代码段寄存器CS和指令指针寄存器EIP。

(4)对于中断,要设置中断允许标志IF为0,即禁止进一步的可屏蔽中断。 (5)控制转移至中断服务程序入口地址(首地址),开始执行中断或异常处理程序。

中断服务程序最后是中断返回指令IRET。中断返回指令IRET将断点地址和标志寄存器出栈恢复,如果压入了错误代码还需要相应增量堆栈指针,于是控制又返回到断点指令继续执行。 〔习题7.17〕

IA-32处理器的中断向量表和中断描述符表的作用是什么? 〔解答〕

IA-32处理器的中断向量表和中断描述符表的作用都是获取中断服务程序的入口地址(称为中断向量),进而控制转移到中断服务程序中。 〔习题7.18〕

说明如下程序段的功能: cli mov ax,0 mov es,ax mov di,80h*4 mov ax,offset intproc ; intproc是一个过程名 cld mov es:[di],ax mov ax,seg intproc mov es:[di+2],ax sti 〔解答〕

设置80H号中断向量。 〔习题7.19〕

中断控制器8259A中IRR,IMR和ISR三个寄存器的作用是什么? 〔解答〕

中断请求寄存器IRR:保存8条外界中断请求信号IR0~IR7的请求状态。Di位为1表示IRi引脚有中断请求;为0表示该引脚无请求。 中断屏蔽寄存器IMR:保存对中断请求信号IR的屏蔽状态。Di位为1表示IRi中断被屏蔽(禁止);为0表示允许该中断。

中断服务寄存器ISR:保存正在被8259A服务着的中断状态。Di位为1表示IRi中断正在服务中;为0表示没有被服务。 〔习题7.20〕

下面是IBM PC/XT机ROM-BIOS中的08号中断服务程序,请说明各个指令的作用。 int08h proc sti push ds push ax push dx

?? ; 日时钟计时 ?? ; 控制软驱马达 int 1ch mov al,20h out 20h,al pop ax pop dx pop ds iret

int08h endp 〔解答〕

int08h proc far ; 远过程 sti ; 开中断 push ds ; 保护现场 push ax push dx ?? ; 日时钟计时 ?? ; 控制软驱马达 int 1ch ; 调用1CH号中断 mov al,20h ; 发送EOI中断结束命令 out 20h,al pop ax ; 恢复现场 pop dx pop ds iret ; 中断返回 int08h endp 〔习题7.21〕

编写一个程序,将例题7-5的INT 80H内部中断服务程序驻留内存。然后在调试程序中或其他程序中执行INT 80H,看能否实现其显示功能。 〔解答〕 ; 代码段 jmp start ; 80H内部中断服务程序:显示字符串(以0结尾);DS∶DX=缓冲区首地址 new80h proc ; 过程定义 sti ; 开中断 push ax ; 保护寄存器 push bx push si mov si,offset intmsg

new1: mov al,cs:[si] ; 获取欲显示字符 cmp al,0 ; 为“0”结束 jz new2 mov bx,0 ; 采用ROM-BIOS调用显示一个字符 mov ah,0eh int 10h inc si ; 显示下一个字符 jmp new1

new2: pop si ; 恢复寄存器