PROTEUS-8086实验指导书
CODE SEGMENT
ASSUME CS:CODE,DS:DATA BEG: MOV AX,DATA MOV DS,AX MOV SI,OFFSET NUM1 MOV AX,0 ADD AX,[SI+0] ADD AX,[SI+2] ADD AX,[SI+4] MOV [SI+6],AX JMP $
CODE ENDS DATA SEGMENT NUM1 DW 1111H ;N1 NUM2 DW 2222H ;N2 NUM3 DW 3333H ;N3 NUM4 DW 0000H ;N4 DATA ENDS
END BEG
2、调试、验证
a.设置断点、单步运行程序,一步一步调试;
b.观察每一步运行时,8086内部寄存器的数值变化; c.检查验证结果。
六、 实验结果和体会
七、 建议
第19页
PROTEUS-8086实验指导书
实验二 循环程序设计
一、 实验要求
利用PROTEUS平台,建立8086 的循环程序的例子。
二、 实验目的
1、熟悉实验系统的编程和使用。
2、掌握使用LOOP判断转移指令实验循环的方法。
三、 实验说明
1、编制程序,使S=l+2×3+3×4+4×5+...+N(N+1),直到N(N+1)项大于200为止。
2、求某数据区内负数的个数。设数据区的第一单元存放区内数据的个数,从第二单元开始存 放数据,在区内最后一个单元存放结果。为统计数据区内负数的个数,需要逐个判断区内 的每一个数据,然后将所有数据中凡是符号位为1的数据的个数累加起来,即得区内所包 含负数的个数。
四、 实验程序流程图
N BL ?AL BL+1?BL 1?DX 2?BL AL*BL?AX DX+AX?DX Y AX>200 Y 结束 图2-1 实验1流程图
第20页
PROTEUS-8086实验指导书
开始 数据区首址?DI 数据个数?CX CH、BL置0 DI增1 N
N 数据首位=1? Y BL+1?BL DI增1 CX=0? Y 存结果 结束 图2-2 实验2流程图
五、 实验步骤
1、Proteus仿真
a.在Proteus中新建两个工程“循环程序.pdsprj”,分别添加自己编写的汇编
代码,编译直至成功;
b.单步运行,打开调试窗口进行调试。 2、调试、验证
第21页
PROTEUS-8086实验指导书
a.设置断点、单步运行程序,一步一步调试;
b.观察每一步运行时,8086内部寄存器和变量的数值变化; c.检查验证结果。
六、实验结果和体会
七、 思考题
修改程序,使其能分别求出数据区中正数、零和负数的个数。
第22页
PROTEUS-8086实验指导书
实验三 分支程序设计
一、 实验要求
利用PROTEUS平台,建立8086 的分支程序的例子,实现数据块搬移。
二、 实验目的
1、熟悉实验系统的编程和使用。
2、掌握使用转移类指令编程及调试方法。 3、掌握各种标志位的影响。
三、 实验说明
程序要求把内存中一数据区(称为源数据块)传送到另一存贮区(称为目的数据块)。源数据块和目的数据块在存贮器中可能有三种情况,如图3-1所示。
FFFFH 00H 00H 00H 源数据块 (目的数据块) 源 数 据 块 目 的 数据 目的数据块 (或源数据块) FFFFH 目 的 数据 块 源 数 据 块 FFFFH
(a) (b) (c)
图3-1源与目的数据块的三种结构
块
对于两个数据块分离的情况,如图3—1(a)数据的传送从数据块的首址开始,或者从数据块的末址开始均可。但对于有部分重叠的情况,则要加以分析,否则重叠部分会因“搬移”,而遭破坏。
可以得出如下结论。当源数据块首址>目的块首址时,从数据块首地址开始传送数据。当源数据块首址<目的块首址时,从数据块末地址开始传送数据。
第23页