微型计算机原理与接口技术:知识地图与习题解析 简介这份PDF是尹建华《微型计算机原理与接口技术》教材的配套习题答案面向学习微机原理与接口技术的高校学生、考研备考者及需要巩固底层硬件知识的工程师帮助读者在课后练习与复习中核对思路、查漏补缺。压缩包内共1个PDF文件约23KB篇幅精炼按教材章节顺序组织答案。内容覆盖数制转换与补码运算、8086寄存器与总线周期、各类寻址方式辨析、存储器全译码与部分译码及芯片扩展、I/O端口查询与中断控制以及MOV、XOR、SAL、条件转移等常用指令的程序分析并给出排序、除法转换等典型汇编题目的参考代码。已有675人学习适合作为课程作业对照与期末、考研复习的辅助材料便于快速定位章节知识点并验证解题过程。1. 从一份习题答案看整门课微型计算机原理的知识地图长什么样很多人翻开《微型计算机原理与接口技术》的第一反应是数制转换、寻址方式、指令系统、存储器扩展、中断、定时器、并行接口、串行接口、A/D 转换一章一个世界学完像捡了一地零件拼不成一台机器。这份习题答案的价值恰恰在于它把这些零件按“数据怎么表示 → CPU 怎么组织 → 指令怎么寻址 → 程序怎么写 → 存储器怎么扩 → 外设怎么接”串成了一条线。整门课的主干其实只有六层数制与码制是地基8086 结构与总线是骨架寻址与指令是动作汇编程序是表达存储器与接口芯片是外设落地。复习时如果只背答案考场上换个参数就翻车只有把这条线画出来才知道每道题在考哪一层。这份笔记适合正在系统学、准备期末或考研复习的人拿来当一张可查漏补缺的地图。2. 数制与码制进制转换、原反补码与溢出的复习重点2.1 进制转换的固定套路与常见参数数制这一块看着简单真正丢分往往丢在小数部分和进制后缀上。整数部分用“除基取余、逆序排列”小数部分用“乘基取整、顺序排列”这两句话必须变成肌肉记忆。习题里 156D 10011100B 9CH、79D 1001111B 4FH 都是整数转换的标准结果0.675D 0.1011B 0.BH 则提醒我们十进制小数转二进制常常是无限循环的题目给到几位就取几位不要自己脑补。37.164D 100101.0011B 25.3H 是整数与小数分开算再拼接的典型。转换方向方法习题示例易错点十进制整数 → 二进制除 2 取余逆序136D 10001000B余数顺序写反十进制小数 → 二进制乘 2 取整顺序0.468D 0.0111B取整位数不够二进制 → 十六进制四位一组从右往左111010.111B 3A.EH小数部分从左往右分组二进制 → 八进制三位一组110010.11B 62.6Q补零位置搞错十六进制 → 二进制一位拆四位0AE7.D2H 101011100111.11010010B漏拆小数位八进制后缀用 Q 或 O十六进制后缀用 H且以字母开头时前面要补 0比如 0AE7.D2H这个细节在填空题里很常见。157Q 06FH、133Q 91 这类题考的是八进制与十六进制之间的间接转换稳妥做法是先转二进制再分组不要试图心算。2.2 原码、反码、补码符号位与位宽的坑机器数的三种表示是整门课第一个真正的难点。习题里 1 的原码、反码、补码都是 00000001-1 的原码是 10000001反码 11111110补码 1111111136 三码相同为 00100100-36 原码 10100100反码 11011011补码 11011100。-128 是特殊值原码写成 1000000010000000 这种超位宽形式补码则是 10000000这说明 8 位补码能表示 -128 而原码不能。梳理下来会发现三条规律必须记牢正数三码相同负数反码是原码符号位不变、数值位取反补码是反码加一补码的表示范围比原码反码多一个负数。习题第 8 问给出 8 位无符号数 0~255、8 位有符号数 -127~127、16 位有符号数 -32767~32768这里 -32768 的写法要特别注意16 位补码最小值为 -32768不要写成 -32767。提示求补码时先确定位宽再动符号位。位宽不同同一个十进制数的机器数完全不同这是后面做加法溢出判断的前提。2.3 溢出判断看符号位还是看进位习题第 11 问 34H 89H 无溢出、0AFH 45H 无溢出、76H - 0FEH 无溢出考的是有符号数运算的溢出判断。判断方法有两种一是看两个同号数相加结果是否变号二是看最高位进位与次高位进位是否一致。减法可以转成加补码来做。最容易忽略的是无符号数运算看的是进位标志 CF有符号数看的是溢出标志 OF两者不能混用。题目说“无溢出”时要确认它指的是有符号溢出还是有符号与无符号都不溢出答题时把判断依据写出来比只写结论更稳。3. 8086 结构与总线寄存器、段地址与总线周期的考点3.1 复位状态与寄存器初值第二章的题集中暴露了一个高频考点8086 复位后各寄存器的状态。习题给出的复位状态是 FR 0000H、IP 0000H、CS FFFFH、DS 0000H、SS 0000H、ES 0000H指令队列清空其它寄存器 0000H。这里最反直觉的是 CS 为 FFFFH 而 IP 为 0000H两者拼起来形成物理地址 FFFF0H也就是复位后第一条指令的取指地址。很多人只记“CSFFFFH”却忘了 IP0结果物理地址算错。段地址与偏移地址的合成公式是物理地址 段基地址 × 16 偏移地址。习题里 1230H:0045H 对应 12345H1000H:2345H 对应 12345H两个不同的段偏移组合指向同一物理地址这正是分段存储的特点。90000H~9FFFFH 这段地址范围对应段基地址 9000H、偏移 0000H~FFFFH反过来给范围求段地址也是常见题型。3.2 总线周期、等待周期与空闲周期习题第 11 问要求解释等待周期和空闲周期。等待周期是 8086 与慢速存储器或 I/O 设备交换信息时为防止数据丢失在总线周期的特定阶段之间插入的时钟周期期间总线信息与控制信号保持不变。空闲周期是两个总线周期之间 BIU 不执行任何操作的时钟周期。这两个概念容易混区别在于等待周期属于某个总线周期内部是为配合慢设备拉长的空闲周期是两个总线周期之间的空档CPU 没有总线操作。注意答题时不要只写“等待就是等”要写出“插入位置在总线周期内、总线信息保持不变”这两个采分点。3.3 1MB 空间与 64KB 段长的关系习题第 2 问 1MB、64KB 这组数字对应 8086 的 20 位地址总线2^20 1MB和 16 位段内偏移2^16 64KB。第 3 问“不能”通常指段与段之间可以重叠、一个物理地址可由多个段偏移表示因此不能简单认为段是互不重叠的固定分区。第 4 问 4、1、时钟涉及 8086 的引脚与时钟关系复习时把最小模式与最大模式的引脚差异列成表比死记硬背强。4. 寻址方式与指令系统从 MOV 到串操作的易错点4.1 七种寻址方式的识别第三章第 1 问几乎把寻址方式考了个遍寄存器寻址、立即数寻址、相对基址变址寻址、基址变址寻址、直接寻址、寄存器间接寻址、相对基址寻址。识别寻址方式的关键是看操作数写在方括号里的形式[BX]是寄存器间接[BXSI]是基址变址[BXSIdisp]是相对基址变址[disp]是直接寻址[BXdisp]是相对基址寻址。习题里“寄存器寻址寄存器寻址”“寄存器寻址立即数寻址”这类成对答案说明一道题里两个操作数要分别判断不能只看一个。4.2 指令合法性判断类型匹配是核心第 2 问连续多个“错”最集中的错误原因是类型不匹配和目的操作数类型无法判断。比如立即数不能直接送段寄存器、两个操作数不能同时为存储器、操作数位宽必须一致。第 8 小问明确写“错类型不匹配”第 11 小问写“错目的操作数类型无法判断”这两条是汇编题判断对错的高频理由。复习时把“MOV 指令的五条限制”单独抄一遍不许内存到内存、不许段寄存器直接送立即数、不许立即数作目的、两操作数位宽一致、不许 CS 作目的。4.3 常用指令组合与程序段套路习题里出现了几组必须会默写的程序段。清零用MOV AX, 0或XOR AX, AX后者更短且影响标志位。求绝对值用CMP配合条件转移第 7 问的MOV AL, X / MOV BL, Y / CMP AL, BL / JGE L / XCHG AL, BL / L: SUB AL, BL / MOV Z, AL是典型的两数相减取绝对值结构。三个数排序用连续比较交换CMP AL, BL / JB L1 / XCHG AL, BL反复三轮。冒泡排序段用双重循环外层DEC DI / JNZ L1内层LOOP L2注意字数组每次ADD BX, 2。; 三个连续单字节数排序SI 指向首地址 MOV AL, [SI] ; 取第一个数 INC SI MOV BL, [SI] ; 取第二个数 INC SI MOV CL, [SI] ; 取第三个数 CMP AL, BL JB L1 ; 若 AL BL 跳过交换 XCHG AL, BL L1: CMP AL, CL JB L2 XCHG AL, CL L2: CMP BL, CL JB L3 XCHG BL, CL L3: MOV DI, OFFSET RESULIT MOV [DI], AL ; 存最小值 INC DI MOV [DI], BL ; 存中间值 INC DI MOV [DI], CL ; 存最大值这段代码的逻辑是冒泡思想的三元素版本先比较前两个再比较当前最小值与第三个最后比较后两个。参数说明SI 为源数组首地址DI 为目标结果首地址RESULIT 为结果变量。易错点是JB与JAE的方向升序排列时若前小于后则跳过交换写反就变成降序。4.4 乘除与移位SAL、IMUL、DIV 的配合第 7 问第 3 小问用SAL AX, CL左移两位实现乘 4再用IMUL C做有符号乘法最后用CWD把 AX 符号扩展到 DX:AX再SUB CX, AX / SBB BX, DX做 32 位减法。这一串动作考的是多字节有符号运算的完整链条移位、扩展、乘、减、存。第 9 问把 369 逐位除 10 压栈再弹出输出DIV BL后PUSH AX、MOV AH, 0、LOOP L1输出时POP AX / MOV DL, AH / ADD DL, 30H / MOV AH, 2 / INT 21H这是十进制转字符输出的经典套路注意每次除法后要把余数所在的高位字节取出加 30H。5. 存储器扩展与接口芯片地址范围、控制字与初始化5.1 全译码与部分译码的取舍第五章第 8 问要求区分全译码法和部分译码法。全译码把除片内寻址外的全部高位地址线都接入译码器每片芯片的地址范围唯一且连续便于扩展、不产生地址重叠代价是译码电路复杂。部分译码只用一部分高位地址线译码会出现地址重叠和地址不连续浪费地址空间但电路简单。答题时把“唯一确定、连续、无重叠”与“重叠、不连续、浪费”这两组关键词对应写清楚基本不会丢分。5.2 芯片数量与地址范围的计算第 11 问 6116 芯片需 4 片每 2 片一组一组接数据线低字节、一组接高字节片内译码线并接片选由译码电路产生第 1 组地址 00000H~007FFH第 2 组 00800H~00FFFH。第 12 问 2716 需 4 片地址范围依次 00000H~007FFH、00800H~00FFFH、01000H~017FFH、01800H~01FFFH2114 需 16 片每 2 片一组共 8 组地址范围从 00000H~003FFH 一路排到 01C00H~01FFFH。这类题的计算链条是先算总容量再除以单芯片容量得片数再按数据线位宽决定并联组数最后按片选译码推出每组的起止地址。芯片单片容量所需片数分组方式地址范围示例61162K×842 片一组00000H~007FFH27162K×84单片一组00000H~01FFFH21141K×4162 片一组00000H~003FFH提示算地址范围时先确定每组占多少字节再用起始地址加容量减一得末地址十六进制减法容易借位出错建议转成十进制验算一遍。5.3 8255A、8253、8259A 的初始化套路接口芯片的题几乎都是“写控制字 送初值”两步。8255A 第 10 章程序段先MOV AL, 92H / OUT PORTC, AL写方式控制字再通过 C 口发启动和停止信号IN AL, PORTB / RCR AL, 00H / JNC WW查询 EOC 状态。8253 第 9 章初始化先写方式控制字 14H 到 343H再送计数初值到 340H控制字 9AH 对应方式与进制选择。8259A 第 7 章 ICW112H 或 16H、ICW270H初始化程序MOV AL,13H / OUT 80H,AL / MOV AL,80H / OUT 81H,AL / MOV AL,01H / OUT 81H,AL依次写 ICW1、ICW2、ICW4。第 14 问 OCW2 的 D7 位为 0 说明采用优先级固定方式这个判断依据要记住。; 8255A 查询方式启动 A/D 转换的典型片段 MOV AL, 92H ; 方式控制字A 口输入、B 口输入、C 口输出 OUT PORTC, AL ; 写入控制端口 MOV AL, 01H OUT PORTC, AL ; PC0 置 1发 START 信号 MOV AL, 00H OUT PORTC, AL ; PC0 清 0结束启动脉冲 WW: IN AL, PORTB ; 读 B 口PB0 接 EOC RCR AL, 00H ; 检测最低位 JNC WW ; EOC 未有效则继续查询 MOV AL, 10H OUT PORTC, AL ; PC1 置 1发 OE 允许输出 IN AL, PORTA ; 读 A 口转换结果参数说明PORTCT 为控制口地址PORTC、PORTB、PORTA 分别为 C、B、A 口地址PC0 接 STARTPC1 接 OEPB0 接 EOC。逻辑是先给启动脉冲再轮询 EOC最后给输出允许并读数。易错点是启动脉冲需要先置 1 再清 0只写一次高电平很多转换器不认。6. 易漏点与易错点五条血泪经验易漏点一补码范围端点写错。为什么漏只记“8 位有符号 -128~127”到了 16 位就顺手写成 -32767~32767。怎么补记住补码负数端比原码多一个8 位是 -12816 位是 -32768做题时先写位宽再写范围。易漏点二物理地址合成忘乘 16。为什么漏段地址和偏移地址直接相加忘了段基地址要左移四位。怎么补每次写公式PA 段基址 × 10H 偏移算完用两个不同段偏移指向同一地址来验算。易漏点三寻址方式只看一个操作数。为什么漏题目里两个操作数各有一种寻址方式只判断了源操作数。怎么补养成“源、目的分别标注”的习惯答案写成“源X目的Y”。易漏点四控制字与端口地址对不上。为什么漏8255A、8253、8259A 的控制口地址相近写程序时把 343H 写成 340H。怎么补初始化前先把“控制口、数据口”地址列在草稿纸上每写一条 OUT 就核对一次。易漏点五溢出判断混用 CF 与 OF。为什么漏无符号减法借位和有符号溢出都看最高位容易一概而论。怎么补题目出现“有符号”就看 OF出现“无符号”就看 CF两者都问就分别写结论和依据。7. 复习清单按章节查漏补缺的落地方法复习这门课最有效的方式不是从头再读一遍而是拿一张白纸默写每章的“动作链”。我的做法是分四轮第一轮只画知识地图六层主干每层写三个关键词第二轮按章做参数表把数制转换、寄存器复位值、寻址方式、芯片控制字各列一张表第三轮只做错题把习题里判“错”的指令逐条写出错误原因第四轮模拟考场限时默写三段程序——排序、十进制输出、8255A 查询。复习轮次目标产出物时间建议第一轮建立地图六层主干关键词半天第二轮参数记忆四张参数表一天第三轮错题归因错误原因清单半天第四轮程序默写三段可运行片段一天查漏补缺时优先看三类题一是答案里出现“错”字的判断题它们集中暴露指令限制二是带地址范围的存储器扩展题计算链条最长三是接口初始化程序控制字和端口地址最容易对不上。每道错题不要只抄正确答案要在旁边写一句“我当时为什么这么想”这句话才是下次不再翻车的后悔药。注意默写程序段时关掉参考答案写完再对照重点看条件转移指令的方向和循环计数器初值这两处是玄学高发区。从那以后我每次复习接口芯片都强制走一遍“先列端口地址表、再写控制字、最后核对初值”的三步流程哪怕题目再眼熟也不跳步。希望这份梳理能帮到你把散落的习题答案变成一张真正能带进考场的地图。本文还有配套的精品资源点击获取