简介:这份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,补码 11111111;+36 三码相同为 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,也就是复位后第一条指令的取指地址。很多人只记“CS=FFFFH”却忘了 IP=0,结果物理地址算错。
段地址与偏移地址的合成公式是物理地址 = 段基地址 × 16 + 偏移地址。习题里 1230H:0045H 对应 12345H,1000H: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]是寄存器间接,[BX+SI]是基址变址,[BX+SI+disp]是相对基址变址,[disp]是直接寻址,[BX+disp]是相对基址寻址。习题里“寄存器寻址,寄存器寻址”“寄存器寻址,立即数寻址”这类成对答案,说明一道题里两个操作数要分别判断,不能只看一个。
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~01FFFH;2114 需 16 片,每 2 片一组共 8 组,地址范围从 00000H~003FFH 一路排到 01C00H~01FFFH。这类题的计算链条是:先算总容量,再除以单芯片容量得片数,再按数据线位宽决定并联组数,最后按片选译码推出每组的起止地址。
| 芯片 | 单片容量 | 所需片数 | 分组方式 | 地址范围示例 |
|---|---|---|---|---|
| 6116 | 2K×8 | 4 | 2 片一组 | 00000H~007FFH |
| 2716 | 2K×8 | 4 | 单片一组 | 00000H~01FFFH |
| 2114 | 1K×4 | 16 | 2 片一组 | 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 章 ICW1=12H 或 16H、ICW2=70H,初始化程序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 接 START,PC1 接 OE,PB0 接 EOC。逻辑是先给启动脉冲,再轮询 EOC,最后给输出允许并读数。易错点是启动脉冲需要先置 1 再清 0,只写一次高电平很多转换器不认。
6. 易漏点与易错点:五条血泪经验
易漏点一:补码范围端点写错。为什么漏:只记“8 位有符号 -128~127”,到了 16 位就顺手写成 -32767~32767。怎么补:记住补码负数端比原码多一个,8 位是 -128,16 位是 -32768,做题时先写位宽再写范围。
易漏点二:物理地址合成忘乘 16。为什么漏:段地址和偏移地址直接相加,忘了段基地址要左移四位。怎么补:每次写公式PA = 段基址 × 10H + 偏移,算完用两个不同段偏移指向同一地址来验算。
易漏点三:寻址方式只看一个操作数。为什么漏:题目里两个操作数各有一种寻址方式,只判断了源操作数。怎么补:养成“源、目的分别标注”的习惯,答案写成“源:X,目的:Y”。
易漏点四:控制字与端口地址对不上。为什么漏:8255A、8253、8259A 的控制口地址相近,写程序时把 343H 写成 340H。怎么补:初始化前先把“控制口、数据口”地址列在草稿纸上,每写一条 OUT 就核对一次。
易漏点五:溢出判断混用 CF 与 OF。为什么漏:无符号减法借位和有符号溢出都看最高位,容易一概而论。怎么补:题目出现“有符号”就看 OF,出现“无符号”就看 CF,两者都问就分别写结论和依据。
7. 复习清单:按章节查漏补缺的落地方法
复习这门课最有效的方式不是从头再读一遍,而是拿一张白纸默写每章的“动作链”。我的做法是分四轮:第一轮只画知识地图,六层主干每层写三个关键词;第二轮按章做参数表,把数制转换、寄存器复位值、寻址方式、芯片控制字各列一张表;第三轮只做错题,把习题里判“错”的指令逐条写出错误原因;第四轮模拟考场,限时默写三段程序——排序、十进制输出、8255A 查询。
| 复习轮次 | 目标 | 产出物 | 时间建议 |
|---|---|---|---|
| 第一轮 | 建立地图 | 六层主干关键词 | 半天 |
| 第二轮 | 参数记忆 | 四张参数表 | 一天 |
| 第三轮 | 错题归因 | 错误原因清单 | 半天 |
| 第四轮 | 程序默写 | 三段可运行片段 | 一天 |
查漏补缺时优先看三类题:一是答案里出现“错”字的判断题,它们集中暴露指令限制;二是带地址范围的存储器扩展题,计算链条最长;三是接口初始化程序,控制字和端口地址最容易对不上。每道错题不要只抄正确答案,要在旁边写一句“我当时为什么这么想”,这句话才是下次不再翻车的后悔药。
注意:默写程序段时关掉参考答案,写完再对照,重点看条件转移指令的方向和循环计数器初值,这两处是玄学高发区。
从那以后我每次复习接口芯片,都强制走一遍“先列端口地址表、再写控制字、最后核对初值”的三步流程,哪怕题目再眼熟也不跳步。希望这份梳理能帮到你,把散落的习题答案变成一张真正能带进考场的地图。
本文还有配套的精品资源,点击获取