首页章节笔记习题解答PDF 下载

第7章 输入/输出和中断 习题与解答

来源:ch7_v2020(2020版)为主,页码指其 Slide 编号;ch7_v2008 为子集,无独有题目。 收录说明:课件 p107–111 为混入的第二、三章作业答案,非本章习题,不予收录;p99「例2 P203」仅指向教材页码、课件无题面,无法收录。其余课件例题/示例全部收录(题1–题11),另补 7 题(题12–题18)。

一、课件原题

题1(课件 p42)

中断类型码为 20H(32) 的中断源,其中断服务程序首址存放在哪些单元?若 0080H~0083H 四个单元中存放的值分别为 10H、20H、30H、40H,求该中断服务程序的入口地址。

解答: 1. 向量地址指针 = 4 × 类型码 = 4 × 20H = 80H,即存放在 0000:0080H 开始的 4 个单元(0080H~0083H)。 2. 低字为 IP:(0080H)=10H 为低字节、(0081H)=20H 为高字节 → IP = 2010H。 3. 高字为 CS:(0082H)=30H 为低字节、(0083H)=40H 为高字节 → CS = 4030H。 4. 入口地址 = 4030:2010H。(若求物理地址:4030H×16 + 2010H = 40300H + 2010H = 42310H。)

题2(课件 p65)

某级联系统中从片接在主片的 IR5 引脚上,写出主片和从片的 ICW3。

解答: 1. 主片 ICW3 的 D7~D0 对应 IR7~IR0,接从片的引脚置 1:仅 IR5 → 00100000B = 20H。 2. 从片 ICW3 的 D7~D3=0,D2D1D0 = 所接主片引脚编号 = 5 = 101B → 00000101B = 05H。 3. 存疑:课件原文写「从片的 ICW3=00000110B=05H」,课件原文如此,存疑:00000110B=06H(对应 IR6),与 05H 不符;按 IR5 应为 00000101B=05H, hex 值 05H 正确。

题3(课件 p72)

(1) 写出一般 EOI 命令字及中断返回前的程序段;(2) 若要求复位 ISR4,写出特殊 EOI 命令字及程序段(8259A 偶地址 20H)。

解答: (1) 一般 EOI:R=0、SL=0、EOI=1,其余 0 → 00100000B = 20H。

MOV AL, 00100000B   ; 20H,一般EOI:清当前最高ISR位
OUT 20H, AL         ; OCW2 写偶地址
IRET                ; 中断返回

(2) 特殊 EOI:R=0、SL=1、EOI=1,L2L1L0=100(指定 ISR4)→ 01100100B = 64H。

MOV AL, 01100100B   ; 64H,特殊EOI:复位ISR4
OUT 20H, AL
IRET

要点:一般 EOI 不指定级别(清最高),特殊 EOI 用 L2~L0 指定级别。

题4(课件 p73)

当前 IR4 优先级最高(正在服务),执行 MOV AL,10100000B / OUT 20H,AL 后,8259A 的 ISR 与优先级次序如何变化?

解答: 1. 0A0H = 10100000B → R=1、SL=0、EOI=1:一般 EOI + 优先级自动循环。 2. EOI 使当前服务的 ISR4 清 0。 3. 自动循环使刚服务完的 IR4 降为最低,其余顺移:优先级(高→低)= IR5 IR6 IR7 IR0 IR1 IR2 IR3 IR4。 4. 补充:R=0,SL=0,EOI=0(00H)可取消自动循环、恢复固定优先级。

题5(课件 p74)

执行 MOV AL,11100011B / OUT 20H,AL,说明命令字含义与执行结果。

解答: 1. 0E3H = 11100011B → R=1、SL=1、EOI=1,L2L1L0=011:特殊 EOI + 优先级特殊循环。 2. 特殊 EOI 按 L 码复位指定 ISR 位 → ISR3 清 0。 3. 特殊循环把 L 码指定的 IR3 设为最低优先级,其余循环排定(IR4 最高)。 4. 结果:ISR3=0,IR3 优先级最低。

题6(课件 p76–77)

PC/XT 正为 IR3 中断服务,现希望响应比 IR3 低的中断。补全下列程序中的命令字并说明各步作用。

CLI                  ; 关中断,便于设置命令
MOV AL, ①           ; 写OCW3设置特殊屏蔽方式
OUT 20H, AL
IN  AL, 21H          ; 读IMR状态
OR  AL, ②           ; 写OCW1暂时屏蔽IR3
OUT 21H, AL
STI                  ; 开中断,低级中断请求可被响应
…
CLI
IN  AL, 21H
AND AL, ③           ; 写OCW1解除对IR3的屏蔽
OUT 21H, AL
MOV AL, ④           ; 写OCW3复位特殊屏蔽方式
OUT 20H, AL
STI
…
IRET

解答: ① = 68H(01101000B:D6D5=11 设置特殊屏蔽,D3=1 为 OCW3 识别位);② = 08H(00001000B,IMR 的 D3 置 1 屏蔽 IR3);③ = 0F7H(11110111B,清 D3 解除屏蔽);④ = 48H(01001000B:D6D5=10 撤销特殊屏蔽)。 各步作用与原理: 1. 特殊屏蔽方式下,用 OCW1 屏蔽本级 IR3 后,IMR 的 D3=1 且 ISR 的 D3 被清 0;8259A 认为本级已不在服务,于是比 IR3 低级的中断也能被响应(高级本来就可嵌套)。 2. 顺序不可颠倒:必须先 OCW3 设特殊屏蔽、再 OCW1 屏蔽本级,两个控制字都写入后才生效。 3. 退出时先解除 IMR 屏蔽(AND 0F7H),再写 OCW3=48H 撤销特殊屏蔽,恢复普通屏蔽/全嵌套管理,最后 IRET。

题7(课件 p78、p93)

写出读 8259A 的 ISR 和 IRR 内容的程序段(偶地址 20H、奇地址 21H),并说明如何读 IMR。

解答: 读 ISR:OCW3 令 RR=1、RIS=1(D1D0=11)、P=0 → 00001011B = 0BH。

MOV AL, 0BH      ; P=0,RR=1,RIS=1:下一个RD读ISR
OUT 20H, AL      ; OCW3 写偶地址
NOP              ; 稍延时
IN  AL, 20H      ; AL = ISR 内容

读 IRR:RR=1、RIS=0(D1D0=10)→ 00001010B = 0AH。

MOV AL, 0AH      ; P=0,RR=1,RIS=0:下一个RD读IRR
OUT 20H, AL
NOP
IN  AL, 20H      ; AL = IRR 内容

读 IMR:不需要 OCW3,直接对奇地址读:IN AL,21H。

题8(课件 p85)

若要求设置 IR5 为最低优先权,写出 OCW2 命令字,并说明此时哪个中断源优先级最高。

解答: 1. 特殊循环:R=1、SL=1;只改优先级不发结束命令 → EOI=0;D4D3=00。 2. 最低优先级编码 L2L1L0 = 5 = 101B。 3. OCW2 = 110 00 101B = C5H,写偶地址(MOV AL,0C5H / OUT 20H,AL)。 4. IR5 最低,则其下一个 IR6 优先级最高;次序(高→低):IR6 IR7 IR0 IR1 IR2 IR3 IR4 IR5。

题9(课件 p95–97,例6-1)

对 IBM PC/XT 中的 8259A 初始化编程:单片、端口 20H/21H、边沿触发、缓冲方式、正常 EOI、全嵌套、8 级类型码 08H–0FH。并写出:(1) 只允许时钟、键盘、COM1 中断的屏蔽字程序;(2) 中断服务程序结束前的命令。

解答: 逐字推导: - ICW1:D4=1;LTIM=0(边沿);SNGL=1(单片);IC4=1 → 00010011B = 13H,写偶地址 20H。 - ICW2:类型码高5位 = 00001(08H 的高5位)→ 08H,写奇地址 21H;IR0~IR7 自动得 08H~0FH。 - 单片 → 不写 ICW3。 - ICW4:SFNM=0(全嵌套)、BUF=1(缓冲)、M/S=1(主片)、AEOI=0(正常EOI)、μPM=1 → 00001101B = 0DH,写 21H。

MOV AL, 13H      ; ICW1
OUT 20H, AL
MOV AL, 08H      ; ICW2
OUT 21H, AL
MOV AL, 0DH      ; ICW4
OUT 21H, AL

(1) 时钟=IR0、键盘=IR1、COM1=IR4(见 p95 连接图),允许则 IMR 对应位=0,其余=1 → 11101100B = 0ECH:

MOV AL, 0ECH     ; OCW1:开IR0/IR1/IR4,屏蔽其余
OUT 21H, AL

(2) 正常 EOI:返回断点前发一般 EOI:

MOV AL, 20H      ; OCW2 一般EOI
OUT 20H, AL
IRET

存疑:p95 硬件图 SP/EN 接 +5V 为非缓冲主片接法(对应 ICW4=01H),与文字「缓冲方式、0DH」矛盾;课件原文如此,存疑。本题按课件文字要求作答。

题10(课件 p98,例1)

8086 系统中 8259A 端口地址为 1CE0H、1CE2H,电平触发、单片、中断类型号高5位为 00010、中断源接 IR3、不用特殊全嵌套、非自动结束、非缓冲。编写初始化程序。

解答: - ICW1:D4=1、LTIM=1(电平)、SNGL=1、IC4=1 → 00011011B = 1BH,写偶地址 1CE0H。 - ICW2:高5位 00010,低3位任意(课件取 011)→ 00010011B,写奇地址 1CE2H。(IR3 类型码 = 00010‖011 = 13H。) - 单片 → 无 ICW3。 - ICW4:SFNM=0、BUF=0、M/S 无关(取0)、AEOI=0、μPM=1 → 00000001B = 01H,写 1CE2H。

MOV DX, 1CE0H        ; 8259A偶地址
MOV AL, 00011011B    ; ICW1:电平触发、单片、需ICW4
OUT DX, AL
MOV AL, 00010011B    ; ICW2:类型码高5位00010
MOV DX, 1CE2H        ; 8259A奇地址
OUT DX, AL
MOV AL, 00000001B    ; ICW4:非缓冲、正常EOI、全嵌套、8086
OUT DX, AL

(端口地址 >FFH,必须用 DX 间接寻址。)

题11(课件 p99–104,例3)

PC/XT 中一片 8259A,端口 20H/21H,边沿触发、缓冲方式、非自动结束、全嵌套,类型码 08H–0FH。利用 IR2 使 8259A 中断 10 次,每次依次输出 'ABC'。对 8259A 初始化并编写主程序与中断服务程序。

解答: 命令字:ICW1=13H(边沿、单片、需ICW4);ICW2 应使 IR2 类型码=0AH → 高5位 00001 → 08H;ICW4=0DH(缓冲、主片、正常EOI、全嵌套);OCW1=FBH(11111011B,只开 IR2);OCW2=20H(一般EOI)。 存疑:课件 p99 给 ICW2=00001010B=0AH,课件原文如此,存疑:若 ICW2=0AH 则 IR0=0AH、IR2=0CH,与「类型码08H–0FH」及程序用 0AH 作 IR2 向量矛盾;自洽组合为 ICW2=08H、IR2=0AH(下面程序按此写)。若坚持课件 ICW2=0AH,则程序中 350AH/250AH 应改为 350CH/250CH。

DATA SEGMENT
M1  DB 'ABC$'          ; 待显示字符串
M2  DW 1 DUP(?)        ; 保存原向量段址
M3  DW 1 DUP(?)        ; 保存原向量偏移
DATA ENDS              ; 课件p100误印为DATA SEGMENT,应为DATA ENDS
STACK SEGMENT
DQQ DB 100 DUP(?)
STACK ENDS
CODE SEGMENT
    ASSUME CS:CODE, DS:DATA, SS:STACK
START:
    MOV AX, DATA       ; 装数据段
    MOV DS, AX
    MOV AX, STACK      ; 装堆栈段
    MOV SS, AX
    MOV SP, SIZE DQQ
    MOV AL, 13H        ; ICW1:边沿、单片、需ICW4
    OUT 20H, AL
    MOV AL, 08H        ; ICW2:IR0~IR7=08H~0FH(课件写0AH,见存疑)
    OUT 21H, AL
    MOV AL, 0DH        ; ICW4:缓冲、主片、正常EOI、全嵌套
    OUT 21H, AL
    CLI                ; IF=0,改向量期间关中断
    MOV AX, 350AH      ; DOS 35H功能:取原0AH号中断向量
    INT 21H            ; 返回 ES:BX = 原入口
    MOV AX, ES
    MOV M2, AX         ; 存原段址
    MOV M3, BX         ; 存原偏移
    PUSH DS
    MOV DX, SEG INT2   ; 新向量段址
    MOV DS, DX
    MOV DX, OFFSET INT2; 新向量偏移
    MOV AX, 250AH      ; DOS 25H功能:装新0AH号向量
    INT 21H
    POP DS
    IN  AL, 21H        ; 读IMR
    AND AL, 0FBH       ; 清D3,开放IR2中断
    OUT 21H, AL
    MOV BX, 0AH        ; 中断次数=10
LL: STI                ; IF=1,开中断
    HLT                ; 停机等待中断(RESET/NMI/INTR可唤醒)
    DEC BX             ; 每被中断一次计数减1
    JNZ LL             ; 不足10次继续等待
    PUSH DS            ; 恢复原0AH号向量
    MOV DX, M3
    MOV AX, M2
    MOV DS, AX
    MOV AX, 250AH
    INT 21H
    POP DS
    MOV AX, 4C00H      ; 返回DOS
    INT 21H
INT2 PROC              ; IR2 中断服务程序
    MOV DX, OFFSET M1  ; 显示'ABC'
    MOV AH, 09H
    INT 21H
    MOV AL, 20H        ; OCW2 一般EOI,清ISR2
    OUT 20H, AL
    IRET               ; 恢复断点与FR
INT2 ENDP
CODE ENDS
    END START

要点解析:① 改向量前用 35H 保存、退出前用 25H 恢复;② 开放设备中断是 AND 清 IMR 位;③ STI+HLT 循环等待 10 次中断;④ 服务程序末尾必须发 EOI 再 IRET(正常EOI方式)。⑤ 课件服务程序未用 PUSH/POP 保护现场,属简化写法,严格作答宜加保护;课件在服务程序内调用 INT 21H 亦为教学简化。

二、考点补充题

题12【补充·考点:I/O接口与端口概念、IN/OUT指令】

填空与选择: (1) 接口中可供 CPU 读写的寄存器称为____;按功能分为____、、三类端口。 (2) CPU 与外设交换的信息分、、____三类;模拟量需经____转换后才能输入计算机。 (3) 下列指令合法的是( )。A. IN BX,21H B. OUT 201H,AL C. IN AL,DX D. OUT DX,BX

解答: (1) I/O 端口;数据端口、状态端口、控制端口(课件 p2)。 (2) 数据信息、状态信息、控制信息;A/D(课件 p4)。 (3) 选 C。逐项排除:A 错,IN 的目的操作数只能 AL/AX,不能 BX;B 错,直接端口地址只能 8 位(≤FFH),201H 必须经 DX 间接;D 错,OUT 的源操作数只能 AL/AX;C 对,DX 间接、AL 接收,合法(课件 p5)。

题13【补充·考点:查询传送方式编程】

某输入设备数据端口地址 30H,状态端口地址 31H,状态字 D0=1 表示数据就绪。用查询方式从该设备读入 100 个字节存入 BUF 缓冲区,编写完整程序。

解答:

DATA SEGMENT
BUF DB 100 DUP(?)      ; 100字节输入缓冲区
DATA ENDS
CODE SEGMENT
    ASSUME CS:CODE, DS:DATA
START:
    MOV AX, DATA       ; 初始化DS
    MOV DS, AX
    LEA DI, BUF        ; DI指向缓冲区首址
    MOV CX, 100        ; 计数=100
POLL:
    IN  AL, 31H        ; 读状态端口
    TEST AL, 01H       ; 测试D0(READY)
    JZ  POLL           ; D0=0未就绪,踏步再查
    IN  AL, 30H        ; 就绪:读数据端口
    MOV [DI], AL       ; 存入缓冲区
    INC DI             ; 指向下一单元
    LOOP POLL          ; CX-1,未完继续查询
    MOV AX, 4C00H      ; 返回DOS
    INT 21H
CODE ENDS
    END START

评分要点:先读状态口再判位(TEST/JZ 或 AND/JZ);就绪后才读数据口;循环计数正确;若加超时判断(如用 CX 双重计数或计时器)防死循环更佳(课件 p10 流程)。

题14【补充·考点:中断向量表地址计算】

(1) 类型码 1CH 的中断向量存放在哪四个单元?(2) 若 (0070H)=34H、(0071H)=12H、(0072H)=00H、(0073H)=F0H,求该中断服务程序入口地址。(3) NMI 的中断向量存放在哪个地址开始的单元?

解答: (1) 指针 = 4 × 1CH = 4 × 28 = 112 = 0070H,即 0000:0070H~0073H。 (2) 低字 IP:34H 低字节、12H 高字节 → IP=1234H;高字 CS:00H 低字节、F0H 高字节 → CS=F000H;入口 = F000:1234H。 (3) NMI 类型码 2 → 4×2 = 8 → 00008H 开始(0008H~000BH)(课件 p41、p46)。

题15【补充·考点:中断响应过程排序】

将下列可屏蔽中断响应动作排序:A.CS压栈 B.第一个INTA周期 C.从向量表读IP D.FR压栈并清IF、TF E.第二个INTA周期取类型码并×4 F.IP压栈 G.从向量表读CS。并问:NMI 和软件中断响应时省去哪些步骤?清 IF、TF 的目的是什么?

解答: 1. 顺序:B → E → D → A → F → C → G(课件 p50–51 的⑴~⑺)。 2. NMI 与软件中断的类型码自动形成(NMI=2),不需 INTA 取码,省去 B、E 两步,从 D 执行到 G(5 个总线周期)。 3. 清 IF:禁止响应过程中其他可屏蔽中断进入;清 TF:禁止中断过程中出现单步中断(课件 p50)。

题16【补充·考点:四种传送方式对比与选用】

简答:(1) 列表比较无条件、查询、中断、DMA 四种传送方式(控制者、是否经 CPU、CPU 效率、适用场合);(2) 为下列场景选方式并说明理由:① 始终就绪的开关量输入;② 随机按键的键盘;③ 磁盘到内存的高速成块数据。

解答: (1)(课件 p6–21)

方式 控制者 数据路径 CPU 效率 适用
无条件 CPU 程序 经 CPU 寄存器 低 总是就绪的简单外设
查询 CPU 程序 经 CPU 寄存器 低(踏步等待) 不总就绪、中低速
中断 CPU 程序(请求驱动) 经 CPU 寄存器 高 随机、中低速外设
DMA DMAC 硬件 外设↔内存直接 最高(仅让总线) 高速成块传送

(2) ① 无条件:外设总是准备好,无需状态检测,软硬件最简。② 中断:按键随机、速率低,查询浪费 CPU,中断实时性好。③ DMA:高速成块数据若经 CPU 程序传送受指令速度限制(几十 KB/s),DMA 由 DMAC 直接控制总线传送,速度最快。 评分要点:前三者均属 PIO(经 CPU),DMA 不经 CPU;中断与查询的区别在于「谁主动」。

题17【补充·考点:8259A命令字综合设计】

某 8086 系统单片 8259A,偶地址 40H、奇地址 42H。要求:电平触发、类型码 50H~57H、全嵌套、非缓冲、正常 EOI。(1) 写出 ICW1、ICW2、ICW4 及初始化程序;(2) 只允许 IR3 和 IR5 中断,写 OCW1 程序;(3) 写出服务程序结束前的 EOI 程序。

解答: (1) ICW1:D4=1、LTIM=1、SNGL=1、IC4=1 → 00011011B = 1BH;ICW2:50H 高5位=01010 → 50H(IR0=50H…IR7=57H);单片无 ICW3;ICW4:SFNM=0、BUF=0、AEOI=0、μPM=1 → 01H。

MOV AL, 1BH      ; ICW1:电平、单片、需ICW4
OUT 40H, AL      ; 偶地址
MOV AL, 50H      ; ICW2:类型码50H~57H
OUT 42H, AL      ; 奇地址
MOV AL, 01H      ; ICW4:非缓冲、正常EOI、全嵌套、8086
OUT 42H, AL

(2) 允许 IR3、IR5 → IMR 的 D3、D5=0,其余=1 → 11010111B = D7H。

MOV AL, 0D7H     ; OCW1:只开IR3、IR5
OUT 42H, AL      ; OCW1写奇地址

(3) 正常 EOI:

MOV AL, 20H      ; OCW2一般EOI
OUT 40H, AL      ; 偶地址
IRET

题18【补充·考点:8259A级联与特殊全嵌套(拔高)】

主片端口 20H/21H、ICW2=08H;从片 A 的 INT 接主片 IR3、ICW2=70H;从片 B 的 INT 接主片 IR6、ICW2=78H。主片工作于特殊全嵌套方式。(1) 写出主片、从片 A、从片 B 的 ICW3;(2) 从片 B 的 IR2 请求的中断类型码是多少?其中断向量存放在什么地址?(3) 从片 B 的某中断服务结束时,若读得其 ISR=0,应如何发 EOI?为什么?

解答: (1) 主片 ICW3:接从片的引脚 IR3、IR6 置 1 → 01001000B = 48H;从片 A ICW3:接主片 IR3 → ID=011 → 03H;从片 B ICW3:接主片 IR6 → ID=110 → 06H(均写各自奇地址)。 (2) 从片 B 的类型码由从片自己的 ICW2 决定:IR2 = 78H + 2 = 7AH(与主片无关)。向量地址 = 4 × 7AH = 4 × 122 = 488 = 01E8H(01E8H~01EBH)。 (3) 应连发两个 EOI:先向从片 B 偶地址发 20H,再向主片偶地址 20H 发 20H。原因:特殊全嵌套下主片不封锁同一从片的更高级请求,从片 ISR=0 说明该从片已无其他中断在服务,主片上对应 IR6 的 ISR 位也应结束;只发一个 EOI 只清从片 ISR,主片 ISR6 仍为 1,会错误屏蔽主片同级及以下中断(课件 p82)。