微机原理与接口技术知识点总结:补码、寻址与8086汇编实战
2026/9/19 19:20:06 网站建设 项目流程

简介:这份《微机原理与接口技术》知识点总结整理文档,面向计算机、电子及相关专业的学生与备考人员,帮助系统梳理课程核心概念与复习重点。内容围绕数制与码制、信息编码、微机组成原理及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)) # C8

n % base取当前位,n // base推进到高位,最后反转拼接。小数部分则用n * base取整数部分、保留小数部分循环,直到小数部分为 0 或达到精度要求。二进制转十六进制时从右往左每 4 位分组,不足补 0,这是后面看机器码和端口地址时最常用的操作。

2.3 补码加减与溢出判断

补码的核心优势是减法可以转成加法:A - B = A + [-B]补。溢出判断看符号位——两个同号数相加,结果符号与操作数相反即溢出,此时OF=1。进位CF和溢出OF是两回事:CF看最高位是否产生进位/借位,OF看有符号数结果是否超出范围。做ADD BX, 8046H这类题时,先按二进制逐位加,再分别判断CFZFSFOFAFPF六个状态标志,不要只算数值。

提示:INCDEC不影响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/DIDSBP/SPSS,取指令用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;减法对应DASAAS。以压缩 BCD 加法为例:

MOV AL, 47H ; 压缩BCD 47 ADD AL, 35H ; 直接相加得 7CH,不是合法BCD DAA ; 调整:低4位>9,加6得 82H,即BCD 82

DAA的调整逻辑是:低 4 位大于 9 或AF=1则加 6,高 4 位大于 9 或CF=1则加 60H。DAA影响除OF外的所有标志,DASOF无定义。写 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 CXJNZ,循环次数放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 标准汇编程序骨架

段定义、ASSUMEORG三件套构成汇编程序的基本结构,下面是一个可直接汇编链接的骨架:

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 BGN

MOV AX, DATAMOV DS, AX是固定套路,因为段寄存器不能直接接收立即数。ASSUME只告诉汇编器段与寄存器的对应关系,并不真正加载段值,真正加载靠上面两条MOVEND BGN指定程序入口。

5.3 用 MASM 与 Proteus 验证

上机时常见做法是用 MASM 汇编成.obj,再链接成.exe,在 DOSBox 或实机调试。涉及 8255A 控制 LED 的题目,通常在 Proteus 里搭 8086 最小系统加 8255A,把编译好的程序加载进去观察端口输出。调试时重点看三处:段寄存器是否加载正确、端口地址是否与硬件译码一致、IN/OUT是否通过AL/AX且端口号大于 255 时是否先送DXIN AL, 80H是直接端口寻址,MOV DX, 220HIN AL, DX是间接端口寻址,后者端口范围可达 64K。

注意:OUT指令的目的操作数是端口,源是累加器,写反了汇编器会直接报错,别在调试时反复怀疑硬件。

5.4 标志位与条件转移的对照速查

判断两个数大小时,先确定是有符号还是无符号,再选指令组。无符号用JA/JB/JAE/JBE,依据CFZF;有符号用JG/JL/JGE/JLE,依据SF⊕OFZFCMP执行减法但不保存结果,只改标志位,是配合条件转移的标准做法。TEST执行与运算但不保存结果,常用于位测试,例如TEST AL, 80HJNZ判断最高位是否为 1。把这两条指令和标志位的对应关系记牢,分支程序基本不会写错。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询