《微机原理答案》由会员分享,可在线阅读,更多相关《微机原理答案(11页珍藏版)》请在金锄头文库上搜索。
1、第 8 章 中断系统 习题参考答案 8-1 8086 系统中,用 IRET 指令结束中断服务程序后,标志 IF 的值是 A 。 8-2 执行 8086 的 IRET 中断返回指令后,将从堆栈中弹出 _C_字节数据,存入 相应的寄存器。 8-3 8086 的中断向量表中存放的是 _B_。 8-4 8086 中断向量表的范围是 RAM 地址的 _A_。 8-5 采用中断方式为外部设备服务的优点包括 _C_。 8-6 为了可以实现中断嵌套,在 8086 系统的中断服务程序中,需要写一条 _D_。 8-7 在具有 2 片 8259A 级联的中断系统中,两片 8259A 都设置为非自动结束中 断,以下说
2、法中 正确的是 _ C _ 。 8-8 以下和中断有关的操作中,必须由 CPU 自动完成的是 _ A 8-9 .中断系统可以实现中断嵌套,其最主要的原因是 _C_。 8-10 .在 8086 系统中,一个中断类型号为 0DBH 的中断服务子程序位于从 8100H: 1234H 开始的内存中,在中断向量表中相应的中断向量所在的起始物理地址 为 _ A 。 8-11 .在 8086 系统中,一个中断类型号为 0DBH 的中断服务子程序入口地址是 8100H: 1234H,这个地址在中断向量表中连续 4 个存储单元存放的内容依次为 _ C _ 。 8-12 . 4 片 8259A 构成的级联中断控制
3、系统中,最多可以直接连接的外部中断源 的数目是_D_。 8-13 . 8086 的以下各种中断中,需要硬件提供中断类型号的只有 _ o 8-14 .对于 8086 的软件中断,以下说法中正确的是 _D _ o 8-15 .什么是中断向量?什么是中断向量表? 8086 的中断向量表存放在存储器的哪 个区域?为什么 8086 中断向量表的大小是 1024 个字节? 答:中断向量就是中断服务程序的入口地址。中断向量表存放中断服务程序的入口 地址,或者存放跳转到中断服务程序入口的转移指令 8086 的中断向量表位于 RAM 区的 OOOOOH003FFH 因为 8086 支持 256 个中断,每个中断
4、服务程序的入口地址是 4 个字节,共需要 1024 字节。 8-16 现在有 1O 个外中断源要申请中断,都用软件查询来进行优先级排队,此时 需要为这些中断源准备几个中断服务程序?为什么? 答:只需要一个中断服务程序。 1O 个中断源通过一个或门向 CPU 申请中断。当有 几个中断源同时申请时,在中断服务程序中进行排队查询。再转移到各自的服务程 序段。并不需要为每个中断源准备一个服务程序。 8-17 .如果 8259A 设置为非自动结束中断方式。但是,用户在编写中断服务程序 时,没有向 8259A 发送中断结束命令 EOI。这样的做法会产生什么不好的后果? 答:其结果是 8259 内部的中断服
5、务寄存器中的相应的登记不会撤销。也就不会允 许后续的同级中断的申请。而实际上 CPU 的服务已经结束,应该可以允许中断的 申请。 8-18.执行以下指令后的结果有什么不同: MOV AX,1234H MOV AX,1234H PUSH BX PUSH BX PUSH AX PUSH AX RET IRET 再进一步叙述 IRET 指令和 RET 指令有什么不同。 答:执行左边一组指令后,IP=1234H。执行右边一组指令后, CS=5678H IP=1234H。 RET 指令一般是近调用返回,只将堆栈顶部内容弹出到 IP 。 IRET 指令 一定是远调用的返回,要将栈顶 4 个字节弹出到 CS
6、 和 IP 。还会将自动压入的标 志寄存器的内容出栈到标志寄存器。 8-19 向 8259A 的 A0=1 的端口发送一个命令字,如何可以确定这个命令字是初始 化命令字 ICW2 而不是操作命令字 OCW1? 答:要看前一个命令字是不是 ICW1。如果是 ICW1,则这个命令字是 ICW2 否则就是 0CW1 8-20 8259A 的初始化有几种不同的情况,分别使用在什么条件下?MOV BX,5678H MOV BX,5678H MOV BX, 01C8H 答:1)只使用 ICW1 和 ICW2 :单片 8259,而且不使用 ICW4 2) 使用 ICW1、ICW2 和 ICW3:多片 825
7、9,但不使用 ICW4。 3) 使用 ICW1、ICW2 和 ICW4:单片 8259,但使用 ICW4。 4) 使用 ICW1、ICW2 ICW3 和 ICW4:多片 8259,也使用 ICW4 8-21 8259A 设置为非自动结束中断,级联使用 8259A 时,主 8259A 和从 8259A 的服务程序,在发送中断结束命令方面有什么不同? 答:主 8259 的服务程序要结束主 8259A 的 ISR 寄存器中的登记。从 务程序要结束主 8259A 和从 8259 的 ISR 寄存器中的登记。 8-22 分析以下中断向量表写入程序: MOV AX, 0 MOV ES, AX LEA AX
8、, INTSUB的服务程序 8259 的服 MOV ES: BX, AX MOV AH, 25H MOV AX, SEG INTSUB MOV ES: BX+2,AX 相应中断源的中断类型号是什么?请再用另外一种方式,完成这个中断向量表的写 入程序。 答:中断类型号是 72H。用 DOS 功能调用 25H 来写入: PUSH DS MOV AX, SEG INTSUB MOV DS, AX MOV DX, OFFSET INTSUB MOV AL, 72HMOV DS, AX INT 21H POP DS 8-23 以下的子程序 1 是中断初始化程序,子程序 2 是响应中断的中断服务程 序。O
9、AOH 和 20H 都是 8259A 的端口地址。分析这些程序段,并回答问题: 子程序 1 : INT-P2 PROC FAR PUSH DS PUSH AX PUSH DX MOV DX, OFFSET INT-P1 MOV AX, SEG INT-P1MOV AL, 78H MOV AH, 25H INT 21H POP DX POP AX POP DS RET INT-P2 ENDP 子程序 2 : INT-P1 PROC FAR PUSH AX INC SI MOV AL, 20H OUT 0A0H, AL OUT 20H,AL POP AX IRET INT-P1 ENDP 请问:
10、(1)分配给这个中断的中断类型号是什么? (2)CPU 到中断向量表的哪四个地址单元取得入口地址? ( 3)中断源连接到 8259A 的哪个中断输入,是主 8259A 还是从 8259A? (4) 在该中断处理时能否实现中断嵌套?为什么? 答: 1)中断类型号是 78H (2) 占用中断向量表的地址是: 001E0H, 001E1H, 001E2H, 001E3H (3) 连接到 8259A 的 IR0 输入,是从 8259A (4) 不能中断嵌套。因为再服务程序中,没有 STI 指令 答: 32位的商存放亦 CX:AX,余数在 DX INTOO PROC FAR POP ex :修改返冋地址
11、 ADD CX.2 PUSH ex CMP BX.O JXE NEXT LEA DX.N1ESSAGE ;除数为必显示错误信息 MOV AH.09 INT 21H JMP FINISH NEXT: PUSH AX ;作除法 AX暂存于堆栈 MOV AXDX ;高 16 位改为低 16位 MOV DXO :厲 16 位为 0 DIV BX MOV CX AX ;保存商的島位 POP AX :恢奴低 16位豉除数 AX DIV BX :商 r; CX AX余衣足 DX FINISH IRET INTOO ENDP 中断。入口参数是 BX 作为除数,被除数是指令隐含的。出口参数应该包括 32 位 的商和 16 位的余数。请自己指定具体的出口参数,并完成中断服务程序的编程 8-25 编写一个 4 号溢出中断的服务程序,取代原来系统中的相应程序。新程序 的功能8-24 .修改例 8-6 的中断服务子程序,使得它能够应用于 16 位除数的除法溢出 是显示有关溢出的错误信息,然后,中止程序的执行。编写一个测试程序, 测试新程序的功能。测试程序要完成中断向量表 4 号中断入口地址的改写,并通 过具有溢出结果的运算来进行测试。 答:(阅读程序)