1. 从期末考到考研8086汇编到底在考什么如果你正在学《微机原理与接口技术》或者正在准备这门课的期末考试、考研专业课那你大概率已经发现了一个残酷的事实这门课的知识点极其零散教材厚得像砖头但考试翻来覆去就考那么几类题。更让人头疼的是很多人学完一学期连一条完整的汇编程序都写不利索更别说用Proteus做仿真了。我自己当年学这门课的时候也是被各种寻址方式、中断向量、8255、8253这些芯片搞得晕头转向。后来带了几届学弟学妹做课程设计加上自己考研复习的经历慢慢摸出了一套比较系统的复习和实操路子。这篇文章就把8086汇编在期末考试和考研中的常见题型、核心知识点以及用Proteus做仿真的完整流程一次性讲透。不管你是零基础想快速抓住考试重点还是已经有点底子但仿真跑不起来这篇内容都能给你一个可以直接照着做的参考。我会尽量用大白话把底层逻辑讲清楚同时给出具体的操作步骤和代码示例让你看完就能上手。2. 期末与考研的题型分布哪些知识点反复出现2.1 从试卷结构反推复习优先级先说说考试这件事。不管是期末还是考研8086汇编相关的题目基本逃不出下面这几类。我统计过近几年的常见卷面大致分布是这样的题型出现频率主要考查内容选择题/填空题极高寻址方式、指令功能、标志位、芯片引脚简答题高中断响应过程、存储器扩展、接口芯片工作方式程序阅读题极高给一段汇编代码问执行结果或填空程序填空题高补全缺失的指令或操作数程序设计题中高写完整汇编程序如排序、字符串处理综合应用题中存储器/接口电路设计地址译码计算从这个分布能看出来程序阅读和程序填空是绝对的重头戏。很多人复习的时候喜欢背概念但考试真正拉开差距的是你能不能看懂一段汇编代码在干什么。所以复习策略应该是先把指令系统和寻址方式吃透然后大量练习读程序最后再攻程序设计。2.2 寻址方式一切汇编题的根基寻址方式是8086汇编最基础也最容易出错的地方。考试里经常给你一个操作数让你判断它属于哪种寻址方式。我总结了一个快速判断的方法操作数直接写在指令里是立即寻址比如MOV AX, 1234H操作数在寄存器里是寄存器寻址比如MOV AX, BX方括号里是寄存器是寄存器间接寻址比如MOV AX, [BX]方括号里是寄存器加偏移是寄存器相对寻址比如MOV AX, [BX10H]方括号里是两个寄存器是基址变址寻址比如MOV AX, [BXSI]基址变址再加偏移是相对基址变址寻址比如MOV AX, [BXSI10H]这里有个坑很多人踩MOV AX, [BX]和MOV AX, BX看起来差不多但前者取的是内存地址里的内容后者取的是寄存器里的值。考试就爱考这种细节。提示判断寻址方式时先看有没有方括号再看方括号里是什么。没有方括号就是立即或寄存器寻址有方括号就看里面的组合形式。2.3 标志位与条件转移程序阅读题的命门程序阅读题里条件转移指令是高频考点。要读懂这类题必须搞清楚标志位的变化规律。8086的标志位有六个状态标志CF、PF、AF、ZF、SF、OF。考试最常考的是CF、ZF、SF、OF这四个。举个典型例子MOV AL, 7FH ADD AL, 01H执行后AL变成80H这时候SF1因为最高位是1OF1因为正数加正数变成了负数溢出CF0没有进位ZF0。这种题就是考你对标志位的理解。再比如比较指令CMP它实际上做的是减法但不保存结果只影响标志位。后面跟着的条件转移指令就是根据这些标志位来决定跳不跳。JE看ZFJG看SF和OFJA看CF和ZF。这些对应关系必须记牢。2.4 中断系统简答题的常客中断这块考试最爱问的是中断响应过程和中断向量表。8086的中断向量表在内存最低的1KB空间也就是00000H到003FFH一共256个中断向量每个向量占4个字节存放中断服务程序的入口地址段基址和偏移地址各2字节。中断响应过程可以概括为取中断类型号查中断向量表把标志寄存器、CS、IP压栈清除IF和TF然后跳转到中断服务程序。这个过程要能默写出来。还有一个常考的点是可屏蔽中断和不可屏蔽中断的区别。可屏蔽中断受IF标志控制可以通过CLI指令禁止不可屏蔽中断不受IF影响CPU必须响应。这个区别在选择题里经常出现。3. 专周二实战Proteus仿真8086汇编的完整流程3.1 为什么选择Proteus做8086仿真专周二通常要求做一个完整的微机系统设计包括硬件电路和汇编程序。以前大家都是用实验箱接线一大堆出了问题很难排查。用Proteus的好处是电路可以随时改程序可以单步调试还能看到引脚电平的变化特别适合理解硬件和软件的配合。Proteus里做8086仿真核心是找到8086的模型然后配上存储器、地址译码器和接口芯片。下面我按实际操作顺序来讲。3.2 搭建最小系统8086加存储器的电路连接先搭一个最小系统让8086能跑起来。需要的元件有8086 CPU2764或62256存储器ROM或RAM74LS373地址锁存器74LS138地址译码器时钟信号源和复位电路8086的地址线和数据线是复用的AD0到AD15既传地址又传数据。所以必须用地址锁存器把地址锁存下来。ALE信号在地址有效时输出高电平用它来控制74LS373锁存地址。地址译码用74LS138把高位地址线接到译码器的输入端输出端接到存储器的片选信号。比如要让存储器映射到00000H开始的地址空间就把A19到A16接到译码器当这些位全为0时选中存储器。具体连接的时候要注意8086的AD0到AD7接74LS373的输入端74LS373的输出就是低8位地址A0到A7。AD8到AD15直接作为高8位地址A8到A15。数据线方面8086的AD0到AD15通过总线收发器74LS245连接到存储器的数据线。注意Proteus里8086模型的时钟频率可以设置一般设成5MHz或者1MHz都行。频率太高仿真会变慢建议先用1MHz调试。3.3 编写第一个汇编程序从点灯开始硬件搭好后写一个最简单的程序验证系统能不能跑。比如往某个内存地址写数据或者控制一个LED闪烁。; 最简单的8086程序往内存地址写数据 CODE SEGMENT ASSUME CS:CODE START: MOV AX, 0000H MOV DS, AX MOV BX, 1000H MOV AL, 55H MOV [BX], AL JMP START CODE ENDS END START这段程序把数据55H写到内存地址01000H处。在Proteus里你可以打开存储器的内容窗口看这个地址是不是变成了55H。如果是说明CPU、地址锁存、译码、存储器这一整条链路都通了。3.4 在Proteus中加载程序并调试Proteus仿真8086需要把汇编程序编译成二进制文件或者HEX文件然后加载到存储器模型里。具体步骤用MASM或TASM编译汇编源文件生成OBJ文件用LINK连接生成EXE文件用EXE2BIN转换成BIN文件或者直接用工具生成HEX文件在Proteus里双击存储器模型在属性里加载这个HEX文件加载之后点击仿真运行按钮就可以看到程序在跑了。Proteus支持单步调试你可以观察寄存器窗口里AX、BX、IP的变化也可以看标志位的状态。这个功能对理解程序执行流程特别有帮助。我当年做专周的时候最大的收获就是通过单步调试真正搞明白了段地址和偏移地址是怎么组合成物理地址的。以前看书总觉得很抽象实际在Proteus里看IP和CS的变化一下子就清楚了。4. 接口芯片的仿真8255和8253怎么用4.1 8255并行接口的工作方式与编程8255是考试和专周都绕不开的芯片。它有三个端口A、B、C可以通过控制字设置成不同的工作方式。考试常考的是方式0基本输入输出和方式1选通输入输出。控制字的格式要记清楚最高位D7是标志位方式0时D71。D6和D5设置A组端口A和端口C高4位的工作方式D4设置端口A的输入输出方向D3设置端口C高4位的方向。D2设置B组的工作方式D1设置端口B的方向D0设置端口C低4位的方向。比如要让端口A输出、端口B输入、端口C输出控制字就是10000000B也就是80H。往控制口写80H然后往端口A写数据就能看到端口A的引脚电平变化。在Proteus里8255的模型可以直接用。把它的数据线接到8086的数据总线片选接到译码器输出读写信号接到8086的IOR和IOW。然后写程序初始化8255再控制端口输出就能看到接在端口上的LED亮灭。4.2 8253定时器/计数器的仿真要点8253有三个独立的计数器每个计数器有六种工作方式。考试最常考的是方式2分频器和方式3方波发生器。编程的时候先往控制口写控制字选择计数器、读写方式和工
阅读完成 · 觉得有帮助?