我是靠谱客的博主 冷静冷风,最近开发中收集的这篇文章主要介绍【微机原理】实验二 循环程序实验,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一. 实验要求

利用Proteus平台,建立8086的循环程序的例子。

二. 实验目的

  1. 熟悉实验系统的编程和使用。
  2. 掌握使用LOOP判断转移指令试验循环的方法。
  3. 掌握使用LOOP与CX的组合。

三. 实验说明

由于本实验是通过给CX一个数值,再通过LOOP作一个判断CX-1是否为0的转移,实现程序的循环,循环的内容是执行AX+1,所以结果应该为AX最后大小为开始时给定CX的大小。

四. 实验程序流程图

Created with Raphaël 2.2.0 将AX初始化为0 将循环次数赋值给CX AX加1 将CX减一,再判断是否为0 结束 yes no

五. 实验步骤

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减一。此后以此类推。

[外链图片转存失败(img-puqWPVbj-1569059277421)(F:常规课程大三大三上微机原理实验实验2 循环程序实验2-02.PNG)]

若是在AX执行后,LOOP执行前暂停,就会发现AX加一,但CX未加。这证明了正是LOOP语句对CX进行了减一的操作。

[外链图片转存失败(img-uVInAZeJ-1569059277424)(F:常规课程大三大三上微机原理实验实验2 循环程序实验2-03.PNG)]

六. 实验结果和体会

经过五次循环后,最终结果如图,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,正确。
在这里插入图片描述

最后

以上就是冷静冷风为你收集整理的【微机原理】实验二 循环程序实验的全部内容,希望文章能够帮你解决【微机原理】实验二 循环程序实验所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部