新闻  |   论坛  |   博客  |   在线研讨会
KEIL中调试ARM汇编程序(排序)
yancey小波 | 2012-11-09 14:01:34    阅读:10188   发布文章

1. 安装KEIL软件。

2. 新建一个工程,选择SUMSUNGS3C2410A处理器。

3. 选项设置,如图。

设置TargetROM1

 

   

 

 

     设置Linker

 

 

4. 新建一个汇编文件,编写汇编程序。

5. 编译,调试。

因为原始数据和代码一起存在rom中,程序装载时ram不能保留数据,所以为空。将定义的数据段属性也设置为READONLY,就可解决这个问题。调试时,设置debug->memory map ,将该段地址设为exec read write如图:

 




    执行前,查看memory窗口如下图,从0x00000058开始存储了3232位未排序的数据。

 

 

    6. 执行run ,或者单步执行。

 

执行完成后,查看memory窗口如图,32个数据已被从大到小排序。







汇编程序如下

   AREA sort,CODE,READONLY                           ;定义代码段,冒泡排序。
   ENTRY
start
   MOV R4,#0
   LDR R6,=src                                                           ;R6存入数据段起始地址。
   ADD R6,R6,#len
outer
   LDR R1,=src
inner
   LDR R2,[R1]
   LDR R3,[R1,#4]
   CMP R2,R3                                                              ;比较R2,R3的值。  
   STRLT R3,[R1]                                                         ;如果R2<R3,则在数据段交换存储两个数据。
   STRLT R2,[R1,#4]
   ADD R1,R1,#4
   CMP R1,R6
   BLT inner                                                                   ;跳转到inner,比较后面两个数据。如果比较完成,执行下条指令。
   ADD R4,R4,#4
   CMP R4,#len
   SUBLE R6,R6,#4                                                     ;跳转到outer,从起始数据开始新一轮数据比较。如果完成,执行下条指令。
   BLE outer
stop                                                                                ;使程序退出。
   MOV R0,#0X18
   LDR R1,=0X20026
   SWI 0X123456
   AREA array,DATA,READONLY                              ;定义数据段,32个32位的数据。
src DCD 2,4,10,8,14,1,20,21,45,32,78,90,54,58,0,22,55,43,19,20,43,33,22,56,16,26,27,28,29,30,31,32
len EQU 32*4
   END


 

 

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客