微机原理课设实现数据累加.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
微机原理课设实现数据累加

目 录 第1章 总体设计方案 2 1.1 设计原理 2 1.2 设计思路 2 1.3 设计环境 2 第2章 详细设计方案 4 2.1 算法与程序的设计与实现 4 2.2 流程图的设计与实现 6 第3章 程序调试与结果测试 7 3.1 程序调试 7 3.2 程序测试及结果分析 8 参考文献 9 .3 设计环境 实验所应用的设计环境:伟福COP2000型计算机组成原理实验仪、微机。在COP2000试验仪上实现编程,所应用的编程语言为汇编语言。在伟福试验仪中有相关的模型机指令集分为几大类:算术运算指令、逻辑运算指令、移位指令、数据传输指令、跳转指令、中断返回指令、输入输出指令。 本程序所用到的相应的指令集 (1)算术逻辑运算指令 ADD A,R?-------------将寄存器R?的值加入累加器A中 ADD A,#II---------- 立即数#II加入累加器A中 ADDC A,R?----------将寄存器R?的值加入累加器A中,考虑进位 SUB A,#II-----------从累加器中减去立即数后加入累加器A中 (2)数据传送指令 MOV A,R?------------将寄存器R?的值送到累加器A中 MOV R?,A------------将累加器A中的值送到寄存器A中 MOV R?,#II----------将立即数II送到寄存器R?中 (4)跳转指令 JC MM---------------若进位标志置1,跳转到MM地址 JZ MM---------------若零标志位置1,跳转到MM地址 JMP MM---------------跳转到MM 此为COP2000计算机组成原理实验软件截图: 图 1.1 COP2000计算机组成原理集成调试软件 第2章 详细设计方案 2.1 算法与程序的设计与实现 在微指令编程中,JMP很像高级语言中的goto语句,JZ很想高级语言中的if语句。微指令编程中没有其他的能够控制流程的语句。作为一种只有if和goto的编程语言,一切的流程控制只能通过if和goto。 从1累加到100是一个重复一百次的循环,控制循环的条件则必然是一个等于一百的数,每执行一次循环就减一,当此数减到零跳出循环。 本程序的核心语句就是: 累加和+=累加数; 累加数++; 于是总的流程控制就是: For(int i=100;i>0;i--){ R3+=R1++; } 但是在开始没有进入循环时需要先计算累加的前两个数1+2,所以循环的控制数初始值应该是98,且在进入循环前R1的值应该是100-98,所以这个大循环则变为: For(int i=98;i>0;i--){ R3+=++R1; } 但是还有一点必须要考虑其中,就是进位。一个八位寄存器只能存储两个十六位的数,最大数是0xFF,而1+2+........+99+100的和是5050,在一个八位的寄存器中存不下,所以我们需要用到进位的概念。在微指令中有专门用来控制进位的语句:JC MM.所以就可以用JC来加一个if语句, If(进位为真) R2++; 由于在cop2000中只有把数存到累加器A中才能够进行加减的运算,所以在这里一定要把对累加和R3的存储步骤写好: If(进位为真){ R2++; MOV R3,A; } Else{ MOV R3,A; } 最终的程序流程就变成了一个大的for循环,内嵌套一个if语句。 2.2 流程图的设计与实现 第3章 程序调试与结果测试 3.1 程序调试 1)编程时出现的语法错误 (a)在编程开始阶段时候,我用R0存储控制循环数,用R1存储立即数1,用R2存储累加数,用R3存储累加和,但是经过计算发现一个寄存器无法存下13BA这么大的数,于是改用两个寄存器进位存数。但是寄存器只有四个,于是我把用来存储立即数1的R1裁掉,这样节省出了一个寄存器。 (b)在写算术逻辑运算指令时出现了语法错误。我把一个跳转到的语句写在了END的后边,由于词条语句后还有跳转回到上边的语句,所以我以为可以,但是通过汇编发现不可以,在END后边的语句根本执行不到。于是把他拿到END前,虽然在END前,但是加上两个JMP就不会按顺序执行到,目的依然可以达到。 2)编程时出现的逻辑错误 (a)刚边玩程序时运行结果错误,然后我把循环控制在1加到十时,结果没有错,于是我判断是在进位时出现了错误,经过检查,我在进位时跳转到了变得地方,执行完几句代码时又跳转回来,而后把累加数存入寄存器,然而此时累加器A中的数已经改变,所以结果肯定不对。于是我考虑在跳转后的语句中加入吧累加数存入寄存器中的语句,可是这样一来如果不进位时就无法存入累加数。而后我又在第二次跳

文档评论(0)

jgx3536 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档