ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

微机原理与接口技术知识点总结:补码、寻址与8086汇编实战

微机原理与接口技术知识点总结:补码、寻址与8086汇编实战 简介这份《微机原理与接口技术》知识点总结整理文档面向计算机、电子及相关专业的学生与备考人员帮助系统梳理课程核心概念与复习重点。内容围绕数制与码制、信息编码、微机组成原理及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]补。溢出判断看符号位——两个同号数相加结果符号与操作数相反即溢出此时OF1。进位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/DISP 指向栈顶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配DSBP/SP配SS取指令用CS。需要跨段时加段超越前缀例如MOV AX, ES:[2A00H]。计算物理地址时先确认默认段再决定要不要加前缀这是寻址题出错最多的地方。4. 七种数据寻址方式与指令系统实战4.1 七种寻址方式的有效地址计算数据寻址方式按有效地址 EA 的来源区分掌握这张表基本能覆盖所有寻址题寻址方式操作数形式EA 计算默认段立即寻址常数无无寄存器寻址寄存器无无直接寻址[2A00H]16 位偏移DS寄存器间接[BX](BX)DSBP 则 SS寄存器相对[BX8](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 位乘结果在 AX16 位乘结果在 DX:AXDIV/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 或AF1则加 6高 4 位大于 9 或CF1则加 60H。DAA影响除OF外的所有标志DAS对OF无定义。写 BCD 程序时如果忘了调整结果在显示时会出现 A~F 这类非法数字。4.4 移位实现乘除与循环控制SAL/SHL左移一位等价乘 2SAR/SHR右移一位等价除 2移位位数大于 1 时放在CL中。用移位和加法可以实现常数乘法例如乘 10MOV 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。把这两条指令和标志位的对应关系记牢分支程序基本不会写错。本文还有配套的精品资源点击获取
返回列表