简介:这份《微机原理与接口技术》知识点总结整理文档,面向高校计算机、电子及自动化专业学生,以及备考相关课程考试或考研复习的读者,帮助系统梳理课程核心概念与易混淆考点。资源包内含1个docx文件,大小约678KB,以文字笔记形式呈现,便于打印或电子设备随时查阅。内容覆盖数制与码制转换、原码反码补码的表示范围与特殊数、BCD码与ASCII码编码规则、冯·诺依曼结构及系统总线分类,并重点展开8086微处理器的内部结构、BIU与EU异步工作机制、13个16位寄存器与9位标志位的功能划分、引脚定义及寻址方式等高频考点。文档按章节组织,条理清晰,适合作为期末复习提纲或课堂笔记补充。目前已有237人学习下载,对需要快速建立知识框架、查漏补缺的读者具有较高参考价值。
1. 从一份“完整版”复习文档说起:微机原理到底该背什么
很多人第一次打开《微机原理与接口技术知识点总结整理》这类文档,第一反应是“字太多、图太少、背不下来”。但真正做过 8086 汇编上机、用 Proteus 连过 8255A 点 LED 的人会发现,这门课的知识点不是散装记忆题,而是一条从 CPU 内部寄存器到外部接口芯片的完整数据通路。文档里那些看似零碎的条目——14 个寄存器、寻址方式、伪指令、8255A 控制字——其实都在回答同一个问题:一条指令从内存取出、在 CPU 里运算、再通过接口芯片驱动外设,中间每一步靠什么机制衔接。这份总结整理的价值,不在于把课本压缩成几页,而在于把“寄存器—指令—总线—接口”串成可复现的链路。适合正在备考、准备汇编上机,或者要用 Proteus 仿真 8086 控制 LED 的读者。下面按这条链路逐层拆开,每个环节都给出能直接抄的参数和代码。
2. 8086 的 14 个寄存器与寻址方式:先建立数据通路的坐标系
2.1 14 个寄存器分组与各自职责
8086 的寄存器常被笼统说成“14 个”,实际按功能分四组:通用寄存器 AX/BX/CX/DX、指针与变址寄存器 SP/BP/SI/DI、段寄存器 CS/DS/SS/ES、控制寄存器 IP/FLAGS。通用寄存器还能拆成高 8 位和低 8 位,比如 AX 拆 AH/AL,这是 8086 兼容 8 位操作的关键设计。
| 寄存器 | 全称 | 典型用途 | 可否拆 8 位 |
|---|---|---|---|
| AX | 累加器 | 乘除、I/O 数据传送 | 是(AH/AL) |
| BX | 基址寄存器 | 存放数据段偏移地址 | 是(BH/BL) |
| CX | 计数寄存器 | 循环计数、串操作计数 | 是(CH/CL) |
| DX | 数据寄存器 | 乘除高位、I/O 端口地址 | 是(DH/DL) |
| SP | 堆栈指针 | 指向栈顶 | 否 |
| BP | 基址指针 | 访问堆栈段数据 | 否 |
| SI | 源变址 | 串操作源地址 | 否 |
| DI | 目的变址 | 串操作目的地址 | 否 |
| CS | 代码段 | 指令段基址 | 否 |
| DS | 数据段 | 数据段基址 | 否 |
| SS | 堆栈段 | 堆栈段基址 | 否 |
| ES | 附加段 | 附加数据段基址 | 否 |
| IP | 指令指针 | 下一条指令偏移 | 否 |
| FLAGS | 标志寄存器 | 状态与控制标志 | 否 |
记忆时不要孤立背名字,要绑定“谁和谁配对”。比如串操作里 SI 配 DS、DI 配 ES,这是硬件固定搭配,考试和上机都绕不开。
2.2 七种寻址方式与物理地址计算
8086 的物理地址 = 段基址 × 16 + 偏移地址,这是所有寻址方式的底层公式。七种寻址方式里,立即寻址和寄存器寻址最快,存储器寻址要算有效地址 EA。
; 立即寻址:操作数在指令里 MOV AX, 1234H ; 寄存器寻址:操作数在寄存器 MOV BX, AX ; 直接寻址:EA 就是位移量 MOV AX, [2000H] ; DS:2000H ; 寄存器间接寻址:EA 在 BX/BP/SI/DI 中 MOV AX, [BX] ; DS:BX ; 寄存器相对寻址:EA = 寄存器 + 位移 MOV AX, [SI+10H] ; DS:SI+10H ; 基址变址寻址:EA = 基址寄存器 + 变址寄存器 MOV AX, [BX+SI] ; DS:BX+SI ; 相对基址变址:EA = 基址 + 变址 + 位移 MOV AX, [BX+SI+20H] ; DS:BX+SI+20H逻辑说明:前两种不访问内存,后五种要算 EA 再送地址总线。参数上注意 BP 默认配 SS,其余配 DS,这是段超越前缀的由来。上机时如果发现取数取错段,先查这里。
2.3 用 DEBUG 验证寄存器与寻址
光看表格记不住,用 DEBUG 跑一遍最直接。
DEBUG -A 100 MOV AX, 1234 MOV [2000], AX MOV BX, [2000] -R -T-A 100从 CS:100 开始汇编,-R看寄存器初值,-T单步执行。每执行一步观察 AX、BX 变化,就能把“指令—寄存器—内存”三者对应起来。常见坑是忘了 DS 初值,导致[2000]指向错误段,先用-R确认 DS 再执行。
3. 汇编语言伪指令与上机流程:从源码到可执行
3.1 常用伪指令与段定义结构
伪指令不生成机器码,只告诉汇编器怎么组织代码。MASM 里最核心的是段定义、数据定义和过程定义。
DATA SEGMENT LED_TAB DB 01H, 02H, 04H, 08H ; 定义 LED 流水数据 COUNT DW 4 ; 循环次数 DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX MOV CX, COUNT LEA SI, LED_TAB NEXT: MOV AL, [SI] INC SI LOOP NEXT MOV AH, 4CH INT 21H CODE ENDS END START逻辑说明:DB定义字节、DW定义字,ASSUME只做段约定不实际赋值,所以必须用MOV AX,DATA和MOV DS,AX真正装载 DS。END START指定入口。参数上COUNT用 DW 是因为循环计数可能超过 255,用 DB 会溢出。
3.2 MASM 汇编链接与 IO.lib 的使用
上机常见流程是编辑、汇编、链接、运行四步。如果用到 I/O 库,链接时要带上 IO.lib。
MASM LED.ASM; LINK LED.OBJ+IO.lib; LED.EXE分号表示用默认参数,避免逐项回车。+IO.lib是把 I/O 库一起链接,缺了它调用库函数会报 unresolved external。常见坑是 OBJ 和 LIB 路径不对,链接器找不到文件,先把工作目录切到源码所在目录再执行。
3.3 汇编上机常见报错与定位
| 报错 | 原因 | 处理 |
|---|---|---|
| A2006 undefined symbol | 标号或变量未定义 | 检查拼写和段归属 |
| A2004 symbol type conflict | 同名符号类型不一致 | 统一 DB/DW 定义 |
| L2029 unresolved external | 缺库或函数名错 | 补 IO.lib 或核对函数名 |
| 运行结果全 0 | DS 未正确装载 | 补 MOV DS,AX |
定位顺序建议:先看汇编器报错行号,再看链接器 unresolved,最后用 DEBUG 单步查运行时。不要一上来就改代码,先分清是汇编期、链接期还是运行期问题。
4. Proteus 仿真 8086 控制 8255A 点 LED:接口实战
4.1 8255A 控制字与三种工作方式
8255A 有三个端口 A、B、C 和一个控制寄存器。控制字最高位 D7=1 表示方式设置,D7=0 表示 C 口位操作。方式 0 是基本 I/O,方式 1 是选通 I/O,方式 2 是双向总线。点 LED 用方式 0 输出即可。
控制字计算:A 口方式 0 输出、B 口方式 0 输出、C 口输出,则 D7=1,D6D5=00,D4=0,D3=0,D2=0,D1=0,D0=0,即 80H。
; 8255A 初始化:A/B/C 全部方式 0 输出 MOV DX, 0606H ; 控制口地址,按 Proteus 连接调整 MOV AL, 80H OUT DX, AL ; A 口输出流水灯 MOV DX, 0600H ; A 口地址 MOV AL, 01H OUT DX, AL逻辑说明:OUT DX,AL把 AL 写到 DX 指定的端口。参数上端口地址由 Proteus 里 8086 与 8255A 的片选译码决定,常见是 0600H 起。如果 LED 不亮,先量片选和读写信号,再查控制字是否写对。
4.2 Proteus 连线与端口地址确认
Proteus 里放 8086、8255A、LED 和地址译码器。8255A 的 CS 接译码输出,A0、A1 接 8086 的 A0、A1,RD、WR 接对应控制线。端口地址由 CS 有效时的地址线决定,A 口偏移 0、B 口偏移 1、C 口偏移 2、控制口偏移 3。
提示:仿真里 8086 需要加载 EXE 或 BIN 文件,编译后把可执行文件路径填进 8086 属性,否则跑的是空程序。
4.3 流水灯完整代码与仿真验证
CODE SEGMENT ASSUME CS:CODE START: MOV DX, 0606H MOV AL, 80H OUT DX, AL ; 初始化 8255A MOV DX, 0600H MOV AL, 01H LOOP1: OUT DX, AL ; 输出当前灯 CALL DELAY ROL AL, 1 ; 循环左移 JMP LOOP1 DELAY: MOV CX, 0FFFFH D1: LOOP D1 RET CODE ENDS END START逻辑说明:ROL AL,1让 1 在 8 位里循环左移,形成流水效果。DELAY用空循环拖时间,CX 越大越慢。参数上 0FFFFH 是 16 位最大值,仿真里可能太快或太慢,按需调整。验证时看 LED 是否依次点亮,若全亮或全灭,查控制字和端口地址。
5. 进阶技巧:用 DEBUG 与仿真联动排查接口时序
5.1 用 DEBUG 观察 OUT 指令前后寄存器
接口调试最怕“代码没错但灯不亮”。这时用 DEBUG 单步到OUT前后,看 AL 和 DX 是否符合预期。
DEBUG LED.EXE -U -T-U反汇编看指令,-T单步。执行到OUT DX,AL前确认 DX=0600H、AL=01H,执行后如果灯不亮,问题就在硬件连线或译码,不在程序。
5.2 8255A 控制字回读验证
8255A 控制口一般不可回读,但可以回读端口状态判断方式是否生效。更可靠的做法是先用方式 0 输出固定值 0FFH,量所有 LED 引脚电平。
| 检查项 | 预期 | 异常处理 |
|---|---|---|
| CS 片选 | 低有效 | 查译码器输入 |
| A0/A1 | 对应端口 | 查地址线连接 |
| WR | 写时低脉冲 | 查 8086 WR 连接 |
| 控制字 | 80H | 重写并复位 |
5.3 仿真速度与真实硬件的差异
Proteus 仿真不体现真实总线负载和时序余量,空循环延时在仿真里可能偏快。技巧是把延时循环单独封装,仿真时用小值,上真实硬件时改大。另一个技巧是先用固定输出验证通路,再加流水逻辑,这样出错时能快速定位是接口问题还是算法问题。最后一行技术内容:把ROL换成ROR或带进位循环,就能在同一套接口代码上验证不同灯效,不必重连硬件。
本文还有配套的精品资源,点击获取