arm汇编之冒泡排序.docx_第1页
arm汇编之冒泡排序.docx_第2页
arm汇编之冒泡排序.docx_第3页
arm汇编之冒泡排序.docx_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

arm汇编之冒泡排序 AREA Sort,CODE,READONLY :首先用AREA伪代码加上CODE,表明下面引出的将是一个代码段(于此相对的还有数据段DATA),ENTRY 和END成对出现,说明他们之间的代码是程序的主体 ENTRY:表示代码的开始Start MOV r4,#0 :将0赋值给r4 LDR r6,=src:在使用LDR时,当格式是LDR r0,=0x022248,则第二个参数表示地址,即0x022248,同样的,当src变量代表一个 数组时,需要r0寄存器指向src则需要这样赋值:LDR r0,=src 当格式是LDRr0,r2,则第二个参数表示寄存器,我的理解是符号表示取内容,r2本身表示一个寄存器地址,取内容候将其存取r0这个寄存器中跳转到LDR R0,R1将存储器地址为R1的字数据读入寄存器R0 LDR R0,R1,#8将存储器地址为R1+8的字数据读入寄存器R0,并将新地址R1+8写入R1,此句是将数据src的首地址赋值给R6 ADD r6,r6,#len:R6为数组的最后一个数组元素的地址。数组这时是连续分配的。 Outer LDR r1,=src:将src地址即数组元素首地址赋值给R1 Inner LDR r2,r1:将存储器地址为r1的字数据读入r2LDR r3,r1,#4:将存储器地址为R1+4的字数据读入R3CMP r2,r3:比较R2,R3 STRGT r3,r1:若(有符号数)大于,则将R3中的字数据写入以R1为地址的存储器中STRGT r2,r1,#4:若大于,则将R2中的字数据写入以R1+4为地址的存储器中ADD r1,r1,#4:R1+4赋值给R1CMP r1,r6:R1与R6比较BLT Inner:若是有符号数小于,即R1R6,则跳转到Inner行执行ADD r4,r4,#4:R4+4赋值给R4CMP r4,#len:R4与len比较SUBLE r6,r6,#4:若有符号数小于或等于,则R6-4赋值给R6BLE Outer:若有符号数小于或等于,则跳转到Outer Stop MOV r0,#0x18, stop一段是用来是程序退出的,第一个语句“MOV r0,#0x18”将r0赋值为0x18,这个立即数对应于宏angel_SWIreason_ReportException。表示r1中存放的执行状态。语句“LDR r1,=0x20026”将r1的值设置成ADP_Stopped_ApplicationExit,该宏表示程序正常退出。然后使用SWI,语句“SWI 0x123456”结束程序,将CPU的控制权交回调试器手中。 LDR r1,=0x20026SWI 0x123456AREA Array,DATA,READWRITEsrc DCD 2,4,10,8,14,1,20:数据定义伪指令DCD表示用于分配一片连续的字存储单元并用指定的数据初始化 len EQU 7*4 :这里的4是4个字节。即是32位。因为ARM7TDMI是32位ARM指令集。END:结束代码代码很清晰。思想很对。执行结果貌似也很对。 可是详细看看不对。数组的起始地址是0x00008058(此时的r6的值。r6初值为起始地址加len,经过程序的递减后变成了起始地址),那么冒泡完后0x00008058存储的应该是01 00 00 00(按ADS里面的内存内容显示格式),可是此时存储的是00 E8 00 E8,从0x0000805c开始才是冒泡排序后的结果。程序肯定是有问题的。既然要找问题,那就单步调试吧。这里面忘了介绍怎么看内存里面存的内容了。之前我一直找不着。因为点击出现内存框框时,没有注意到有个start adreess。比如这个程序里面的数组起始地址是0x0000805c,那么我们把start address通过点击递加设为0x8000。接着单步调试。这是第一次排序的结果。明显不对。因为这个数组里面排序最大的是沉到低了,可是数0x00E800E8也参合进来,冒泡到最大的数的前面了。这个不对。也就是这个程序的内循环控制不对。改正的话其实很简单。就是程序里内循环对比较了一次。这里我采用的方法是len定义为6*4,把len理解为偏

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论