第5章汇编语言程序设计.ppt

  1. 1、本文档共42页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
例9.在RAM地址$1000开始的10个单元里,分别存放10个无符号字节型数据,要求使用汇编语言编写一段程序,把10个数据按照从小到大的顺序排序。 冒泡排序原理: 若要排序的数有n个,则需要n-1轮排序,第i轮排序中,从第一个数 开始,相邻两数比较,若不符合所要求的顺序,则交换两者的位置;直到第n+1-i个数为止。第一个数与第二个数比较,第二个数与第三个数比较,......,第n-i个与第n+1-i个比较。此时第n+1-i个位置上的数已经按要求排好,所以不参加以后的比较和交换操作。 程序流程图 ORG $1000 data:FCB $12,$13,$11,$20,$10,$10,$19,$6,$1a,$fe ORG $4000 Entry: LDS #$3FFF ; initialize the stack pointer CLI ; enable interrupts LDX #data;X加载立即数$1000作为地址使用 LDY #9;Y加载立即数n-1作为外循环使用,n为数组元素个数 LOOP0:PSHY;外循环数进栈保存 LDX #data;X加载$1000作为地址 LOOP1:LDAA X;内循环n-1次开始,A加载第一个数 LDAB 1,X;B加载第二个数 CBA;作A-B操作,只影响标志 BCS NOCHANGE;如果C=1,则跳转,C=1的含义是作了减法,前者小于后者则不用处理 STAA 1,X;如果第一个数大于第二个数,则交换位置 STAB X NOCHANGE: ;如果不交换,则跳转到这里 INX;指向下一个内存单元继续比较 DEY;内循环次数减一 BNE LOOP1;内循环是否够n-i次,若够则退出,i表示第i次外循环 PULY;外循环次数出栈 DEY;外循环次数减一 BNE LOOP0;若外循环次数够n-1次,则退出 BRA *; 例10. 求数组的平均值 从$1000开始的10个字节单元中的数据已经从小到大排序完毕,现在求该数组的平均值,结果存放到商$1010-$1011,余数$1012-$1013。 原理 $fff $1000 $1001 $1002 $1003 $1004 $1005 $1006 $1007 $1008 $1009 base 11 21 31 41 51 61 71 81 91 101 设置基地址base为$fff,然后再对base+1,base+2……base+10的内容相加即可得到结果 在计数器中首先给计数初值10,逐渐递减,作加法,直到减到0结束,这样就实现了10个数相加 把得到的和除以10,就分别得到了商和余数 例11. 实现“掐头去尾”的平均值滤波 对于已经排序好的数组,去掉最大的两个数,再去掉最小的两个数,求中间6个数的平均值作为平均值滤波后的结果。得到的商保存到$1014,余数保存到$1016。 原理 和求平均值原理一样,只不过计数值和基地址改变了。 $fff $1000 $1001 $1002 $1003 $1004 $1005 $1006 $1007 $1008 $1009 X X base 1 2 3 4 5 6 X X 设置基地址base为$1001,然后再对base+1,base+2……base+6的内容相加即可得到结果 在计数器中首先给计数初值6,逐渐递减,作加法,直到减到0结束,这样就实现了6个数相加 把得到的和除以6,就分别得到了商和余数 虽然说是“掐头去尾”,但是实际数据并没有真正 删除,而是没有理会而已。 平均值滤波在工程上的应用 在AD采样中,采集到的实时AD值没有经过任何处理,一般不能够直接使用 一般会采用在一个采样点连续采集多次,再求平均的方法 这样的方法无法去掉采集中带来的“无效”值 所以采用“掐头去尾”的平均值滤波法 平均值滤波在工程上的应用 比如测量水温得到如下数据(单位:度): 35,34,32,36,35,69,29,34,34,31 这时经过冒泡排序得到: 29,31,32,34,34,34,35,35,36,69 直接求平均得到T=36.9 显然,69是采集到的一个无效值,必须舍去;而29,31等也偏离真实值比较多,也要舍去,使用本例的滤波方法得到T=34,显然更接近真实值。 谢谢! 第五章 汇编语言程序设计 * 第五章 汇编语言程序设计 §5-1 汇编语言程序设计基础 §5-2 常用汇编伪指令 §5-3 宏定义 §5-4 汇编程序设计举例 内容提要: 标号(LABEL) 操作码(OPCODE) 操作数(OPERA

文档评论(0)

希望之星 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档