概述
一. 实验要求
利用Proteus平台,建立8086的循环程序的例子。
二. 实验目的
- 熟悉实验系统的编程和使用。
- 掌握使用LOOP判断转移指令试验循环的方法。
- 掌握使用LOOP与CX的组合。
三. 实验说明
由于本实验是通过给CX一个数值,再通过LOOP作一个判断CX-1是否为0的转移,实现程序的循环,循环的内容是执行AX+1,所以结果应该为AX最后大小为开始时给定CX的大小。
四. 实验程序流程图
五. 实验步骤
a.仿真代码
;改变 CX 循环次数 ,验证AX 是否加1,加了循环的次数
CODE SEGMENT
ASSUME CS:CODE
CON_A EQU 25;这两行没用,实验三才用到
CON_B EQU 12
START:
MOV AX,0 ;对AX清零,用于记录当前是第几次循环
MOV CX,5 ;设置循环次数,不可以用别的寄存器,是LOOP语句指定的
INC_AX: NOP ;啥也不做,LOOP将会跳转到该标签
INC AX ;循环一次 AX+1
LOOP INC_AX ;CX-1 ?=0 不等于循环至INC_AX处
JMP $ ;原地无限循环
CODE ENDS
END START
b.调试、验证
最初AX初始化为0,CX赋值为5
经过AX自增语句及LOOP语句后,跳转回了NOP语句,发现AX加一,CX减一。此后以此类推。
若是在AX执行后,LOOP执行前暂停,就会发现AX加一,但CX未加。这证明了正是LOOP语句对CX进行了减一的操作。
六. 实验结果和体会
经过五次循环后,最终结果如图,AX等于5,表示循环了5次,而跳出循环后,CX一定为0。
LOOP语句之所以先减后判断CX是否为0,就是为了CX中的数值能刚好对应循环次数,便于程序员使用。程序中INC AX语句的位置可以替换成任何需要被多次调用的程序。使用INC语句的原因有以下几点:1.运行速度比ADD快(仅指8086这种古老平台,在现代计算机中可能不成立)2.代码所占内存小(这也不是主要原因)3.INC不改变符号位,而ADD会(这才是主要的,如果循环体中需要用到CF,可能就会因为这点出问题)
七. 扩展题目程序和实验结果
;计算2^12结果
CODE SEGMENT
ASSUME CS:CODE
CON_A EQU 25
CON_B EQU 12
START:
MOV AX,1 ;初始化为1,用来进行乘法与存放结果
MOV CX,12 ;设置循环次数
INC_AX: NOP
MOV DX,2 ;每次相乘后DX会被清0,因此要再次设置2作为乘数
MUL DX ;AX与DX相乘,结果存于AX
LOOP INC_AX ;CX-1 ?=0 不等于循环
JMP $ ;原地无限循环
CODE ENDS
END START
最后的结果是1000H,正确。
最后
以上就是冷静冷风为你收集整理的【微机原理】实验二 循环程序实验的全部内容,希望文章能够帮你解决【微机原理】实验二 循环程序实验所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复