简介:这份《微机原理与接口技术》知识点总结整理文档,面向计算机、电子及相关专业的学生与备考人员,帮助系统梳理课程核心概念与复习重点。内容围绕数制与码制、信息编码、微机组成原理及8086微处理器展开,涵盖十进制与二进制、十六进制转换方法,原码、反码、补码的表示规则与8位二进制取值范围,压缩与非压缩BCD码、ASCII码编码方式,以及冯·诺依曼结构、系统总线分类等基础理论。8086部分详细整理了BIU与EU结构、13个16位寄存器、9位标志位、引脚功能与寻址方式等高频考点,适合期末复习、考研初试或课程查漏补缺。资源包共1个docx文件,约678KB,内容以章节笔记形式组织,条理清晰,便于打印背诵与快速检索。目前已有237人学习下载,可作为微机原理课程配套的轻量级复习资料使用。
1. 从一道补码题说起:这份总结到底解决什么问题
很多人复习 8086 时卡在同一个地方:课本讲补码用两页纸,做题时却要在一分钟内判断10000000到底是 -128 还是 -0。这份《微机原理与接口技术知识点总结整理》的价值不在于把教材抄一遍,而在于把散落在各章的判定规则、指令格式、寻址计算压缩成可查表、可套用的形式。它覆盖数制与码制、8086 内部结构、七种数据寻址方式、完整指令系统、伪指令与汇编程序结构,适合正在备考、做 8086 汇编上机、或者用 Proteus 搭 8255A 控制 LED 时需要快速回查指令语义的人。下面按“数据表示 → 硬件结构 → 寻址与指令 → 汇编落地”的顺序拆开讲,每个环节都给出可验证的计算过程和代码。
2. 数制转换与补码运算的判定规则
2.1 三种码制的定义与 8 位表示范围
符号数在机器里有原码、反码、补码三种表示。正数三者完全相同;负数的差异集中在数值位是否取反、是否加一。把定义写成可执行逻辑,比背文字可靠:
| 码制 | 正数 | 负数 | 8 位范围 | 0 的表示 |
|---|---|---|---|---|
| 原码 | 符号位 0 + 绝对值 | 符号位 1 + 绝对值 | -127 ~ +127 | 不唯一(+0/-0) |
| 反码 | 同原码 | 符号位不变,数值位取反 | -127 ~ +127 | 不唯一 |
| 补码 | 同原码 | 反码 + 1 | -128 ~ +127 | 唯一 00000000 |
特殊数10000000是高频考点:原码解释为 -0,反码解释为 -127,补码解释为 -128,无符号数解释为 128。判断时先看题目问的是哪种码制,再套上表,不要混用。
2.2 数制转换的取余取整流程
非十进制转十进制按权展开求和;十进制转二进制整数部分除 2 取余、小数部分乘 2 取整;二进制与十六进制之间按 4 位一组直接对应。用 Python 验证一遍转换逻辑,比手算更容易发现进位错误:
def dec_to_base(n, base): """十进制整数转任意进制,返回字符串""" digits = "0123456789ABCDEF" if n == 0: return "0" result = [] while n > 0: result.append(digits[n % base]) # 取余得到当前最低位 n //= base # 整除进入下一位 return "".join(reversed(result)) # 验证:十进制 200 转二进制与十六进制 print(dec_to_base(200, 2)) # 11001000 print(dec_to_base(200, 16)) # C8n % base取当前位,n // base推进到高位,最后反转拼接。小数部分则用n * base取整数部分、保留小数部分循环,直到小数部分为 0 或达到精度要求。二进制转十六进制时从右往左每 4 位分组,不足补 0,这是后面看机器码和端口地址时最常用的操作。
2.3 补码加减与溢出判断
补码的核心优势是减法可以转成加法:A - B = A + [-B]补。溢出判断看符号位——两个同号数相加,结果符号与操作数相反即溢出,此时OF=1。进位CF和溢出OF是两回事:CF看最高位是否产生进位/借位,OF看有符号数结果是否超出范围。做ADD BX, 8046H这类题时,先按二进制逐位加,再分别判断CF、ZF、SF、OF、AF、PF六个状态标志,不要只算数值。
提示:
INC和DEC不影响CF,这是和ADD/SUB最容易混淆的地方,做标志位判断题时优先排除。
3. 8086 内部结构与寄存器分工
3.1 BIU 与 EU 的并行取指机制
8086 内部由总线接口部件 BIU 和执行部件 EU 组成,两者异步工作。BIU 负责取指令、取操作数、算物理地址,EU 负责译码执行。BIU 里有一个 6 字节指令队列,EU 执行当前指令时 BIU 已经在预取下一条,这就是流水线的雏形。理解这一点,才能解释为什么JMP之后队列要被清空——跳转目标变了,预取的指令作废。
3.2 13 个寄存器的用途归类
8086 有 13 个 16 位寄存器和 9 位标志位,按用途分四类:
- 通用寄存器 AX/BX/CX/DX:可拆成 8 个 8 位寄存器,各有习惯用法。AX 是累加器,所有 I/O 指令必须通过 AX 与端口交换;BX 常作基址;CX 作循环计数;DX 在 32 位乘除中存高 16 位,在间接 I/O 中存端口地址。
- 指针与变址 SP/BP/SI/DI:SP 指向栈顶,BP 默认配 SS 段,SI/DI 用于串操作和变址。
- 段寄存器 CS/DS/SS/ES:分别指向代码段、数据段、堆栈段、附加段。
- IP 与标志寄存器:IP 存下一条指令偏移地址;标志寄存器分状态标志(CF/AF/OF/ZF/SF/PF)和控制标志(IF/TF)。
3.3 物理地址计算与段超越
8086 地址总线 20 位,寻址空间 1MB,但寄存器只有 16 位,所以用段基址 × 16 + 偏移地址合成物理地址。默认段搭配是硬规则:BX/SI/DI配DS,BP/SP配SS,取指令用CS。需要跨段时加段超越前缀,例如MOV AX, ES:[2A00H]。计算物理地址时先确认默认段,再决定要不要加前缀,这是寻址题出错最多的地方。
4. 七种数据寻址方式与指令系统实战
4.1 七种寻址方式的有效地址计算
数据寻址方式按有效地址 EA 的来源区分,掌握这张表基本能覆盖所有寻址题:
| 寻址方式 | 操作数形式 | EA 计算 | 默认段 |
|---|---|---|---|
| 立即寻址 | 常数 | 无 | 无 |
| 寄存器寻址 | 寄存器 | 无 | 无 |
| 直接寻址 | [2A00H] | 16 位偏移 | DS |
| 寄存器间接 | [BX] | (BX) | DS(BP 则 SS) |
| 寄存器相对 | [BX+8] | (BX)+位移 | DS |
| 基址变址 | [BX][SI] | (BX)+(SI) | DS |
| 相对基址变址 | DATA[DI][BX] | (BX)+(DI)+位移 | DS |
同一组内的寄存器不能同时出现,[BX][BP]和[SI][DI]都是非法组合,因为基址和变址必须来自不同组。计算物理地址时把段基址左移 4 位再加 EA,例如(DS)=8000H, (BX)=2000H, (SI)=1000H,则物理地址= 80000H + 2000H + 1000H = 83000H,低字节从83000H取,高字节从83001H取。
4.2 数据传送与算术指令的关键约束
MOV有七条使用规则,违反任何一条汇编器都会报错:IP 不能作目的、不允许 mem←mem、不允许 segreg←segreg、立即数不能作目的、不允许 segreg←立即数、源目类型要一致、单字节立即数送内存必须用PTR说明。例如MOV [BX], 12H错误,要写成MOV BYTE PTR [BX], 12H。
算术指令里几个易错点:MUL/IMUL的源不能是立即数,8 位乘结果在 AX,16 位乘结果在 DX:AX;DIV/IDIV要求被除数是除数的两倍字长,不满足要用CBW(字节扩展为字)或CWD(字扩展为双字)先扩展;NEG求补相当于 0 减操作数,可用来取负数绝对值。
4.3 BCD 调整指令的配合顺序
BCD 运算必须“先算后调”,调整指令紧跟算术指令。压缩 BCD 加法用DAA,非压缩用AAA;减法对应DAS和AAS。以压缩 BCD 加法为例:
MOV AL, 47H ; 压缩BCD 47 ADD AL, 35H ; 直接相加得 7CH,不是合法BCD DAA ; 调整:低4位>9,加6得 82H,即BCD 82DAA的调整逻辑是:低 4 位大于 9 或AF=1则加 6,高 4 位大于 9 或CF=1则加 60H。DAA影响除OF外的所有标志,DAS对OF无定义。写 BCD 程序时如果忘了调整,结果在显示时会出现 A~F 这类非法数字。
4.4 移位实现乘除与循环控制
SAL/SHL左移一位等价乘 2,SAR/SHR右移一位等价除 2,移位位数大于 1 时放在CL中。用移位和加法可以实现常数乘法,例如乘 10:
MOV CL, 3 SAL AL, 1 ; AL = 2x MOV AH, AL ; 保存 2x SAL AL, 1 ; AL = 4x SAL AL, 1 ; AL = 8x ADD AL, AH ; 8x + 2x = 10x循环控制用LOOP,它等价于DEC CX加JNZ,循环次数放CX,转移范围 -128~+127,且不影响标志位。条件转移指令分单标志位(JZ/JNZ/JS/JO等)和组合条件(JA/JB判无符号,JG/JL判有符号),判断有符号数大小要用SF⊕OF的结果,不能只看CF。
5. 汇编程序结构与上机调试技巧
5.1 伪指令与 CPU 指令的区别
伪指令是给汇编程序的命令,汇编阶段处理,不产生目标代码;CPU 指令是给 CPU 的命令,运行时执行,每条对应一段机器码。数据定义用DB/DW/DD,?只保留单元不赋初值,DUP用于重复,$表示地址计数器当前值。EQU定义后不可重定义,=允许重定义。PTR用于临时指定操作数类型,单操作数指令操作数为基址、变址或基址加变址时必须用PTR说明。
5.2 标准汇编程序骨架
段定义、ASSUME、ORG三件套构成汇编程序的基本结构,下面是一个可直接汇编链接的骨架:
DATA SEGMENT X DB 5 Y DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA BGN: MOV AX, DATA ; 数据段基址送 AX MOV DS, AX ; 再送 DS,段寄存器不能直接送立即数 MOV AL, X CMP AL, 0 JGE BIG ; 有符号比较,>=0 跳转 MOV Y, -1 JMP EXIT BIG: JE EQUL ; 等于 0 MOV Y, 1 JMP EXIT EQUL:MOV Y, 0 EXIT:MOV AH, 4CH ; DOS 功能调用,返回 INT 21H CODE ENDS END BGNMOV AX, DATA再MOV DS, AX是固定套路,因为段寄存器不能直接接收立即数。ASSUME只告诉汇编器段与寄存器的对应关系,并不真正加载段值,真正加载靠上面两条MOV。END BGN指定程序入口。
5.3 用 MASM 与 Proteus 验证
上机时常见做法是用 MASM 汇编成.obj,再链接成.exe,在 DOSBox 或实机调试。涉及 8255A 控制 LED 的题目,通常在 Proteus 里搭 8086 最小系统加 8255A,把编译好的程序加载进去观察端口输出。调试时重点看三处:段寄存器是否加载正确、端口地址是否与硬件译码一致、IN/OUT是否通过AL/AX且端口号大于 255 时是否先送DX。IN AL, 80H是直接端口寻址,MOV DX, 220H后IN AL, DX是间接端口寻址,后者端口范围可达 64K。
注意:
OUT指令的目的操作数是端口,源是累加器,写反了汇编器会直接报错,别在调试时反复怀疑硬件。
5.4 标志位与条件转移的对照速查
判断两个数大小时,先确定是有符号还是无符号,再选指令组。无符号用JA/JB/JAE/JBE,依据CF和ZF;有符号用JG/JL/JGE/JLE,依据SF⊕OF和ZF。CMP执行减法但不保存结果,只改标志位,是配合条件转移的标准做法。TEST执行与运算但不保存结果,常用于位测试,例如TEST AL, 80H后JNZ判断最高位是否为 1。把这两条指令和标志位的对应关系记牢,分支程序基本不会写错。
本文还有配套的精品资源,点击获取