《微处理器》实验报告
学院:
班级:
姓名:
学号:
实验二 分支程序实验
-
实验要求
利用PROTEUS平台,建立8086 的分支程序的例子。
-
实验目的
1、熟悉实验系统的编程和使用。
2、掌握使用转移类指令编程及调试方法。
3、掌握各种标志位的影响。
-
实验说明
由于本实验是通过改变两个变量CON_A和CON_B 的大小,实现用CMP指令对不同标示位的影响的一个转移,分别设有大于、等于和小于。
-
实验程序流程图
-
实验步骤
1、Proteus仿真
a.在Proteus中打开设计文档“分支程序.pdsprj”;
b.单步运行,打开调试窗口进行调试。
参考程序:
CODE SEGMENT
ASSUME CS:CODE
CON_A EQU 25
CON_B EQU 12
START:
MOV AX,CON_A
MOV BX,CON_B
CMP AX,BX
JNC MO_T ;AX > BX 跳转
JE EQUA ;AX = BX 跳转
JC LESS ;AX < BX 跳转
MO_T: JMP $
EQUA: JMP $
LESS: JMP $
CODE ENDS
END START
2、调试、验证
a.设置断点、单步运行程序,一步一步调试;
b.观察每一步运行时,8086内部寄存器的数值变化;
c.改变两个变量的大小,观察三程序跳转的实现;
d.检查验证结果。
a.
输入代码:
利用CON_A EQU 25;CON_B EQU 12;给AX赋初值25,12赋给BX,寄存器窗口分别显示AX、BX分别为19H、0CH。寄存器窗口最下一行FL表示标志寄存器,此图表示运行CMP指令后,仅AF为1,其余位为0
调试并观察:JNC MO_T ;AX > BX 跳转
发现跳转到了AX>BX的情况,代表程序执行结果正确:
b.
然后我们修改代码,令AX为2进行测试,发现CF、PF、AF、SF均为1:
C.
调试并观察:JC LESS ;AX < BX 跳转
在修改了AX的值后,我们单步执行代码,发现最终跳转到了AX<BX的情况:
d.
调试并观察:JE EQUA ;AX = BX 跳转
最后我们修改两个变量的大小,令AX=12,BX=12:
发现程序跳转到了AX>BX处,而且在寄存器窗口发现PF、ZF均为1
-
实验结果
在原代码情况下,当AX=12,BX=12时,程序依然跳转到AX>BX附近,这是因为CF=0.故该程序出现逻辑错误。
改进方法:应当将JE语句置于JNC语句之前,应当先判断AX是否等于BX。
-
心得体会
通过本次实验,我学会了利用PROTEUS平台建立8086 的分支程序,这次试验的中心思想是通过改变两个变量CON_A和CON_B 的大小,实现用CMP指令对不同标示位的影响进行不同的转移。
在实验过程中容易出现一些错误,所以需要一步步的调试,相对于这样的程序,如果想要得到有效的实验结果,需要我们在设计程序的时候不断地进行调试,特别是要注意逻辑错误。
就拿这次的实验来说吧,在我们设计出程序代码之后,一共设置了“JNC MO_T;AX>BX跳转;JE EQUA;AX=BX跳转;JC LESS;AX<BX跳转;”这三种情况的转移指令,所以为了防止逻辑错误,我们需要进行通过改变变量AX和BX的值,实现对这三个条件的调试,以便得到正确的程序。
在这次实验当中,我进一步地了解了各种标志位所起到的作用,掌握了转移类指令的编程和调试方法,而且使用PROTEUS平台进行各种基础操作也变得更加地熟练了。