ARM汇编语言写的选择排序程序
(2008-10-13 19:09:18)
好久没有写点什么了,因为心情总比较烦躁不安,没有安静的时刻来好好看会儿书。几个月前有次在书城无聊,看到一本ARM程序设计的书,拿起来看得比较有意思,因为好像是第一次看到这种比较浅显易懂的讲ARM的书,于是就买下来了。几个月的时间里,断断续续地看了一百页多一点,照着书上的示例写了些代码,总算对嵌入式开发中常用到的ARM处理器结构有了点了解。ARM是不同于在学校时学习微机原理时的Intel
x86的一种精简指令集结构的处理器,然而,寄存器、栈、中断、返回地址等基本概念还是相同的。前段时间自己写了个做选择排序的ARM汇编程序,算是对这段时间学习的一个小结吧。
程序使用ADS进行汇编链接的命令为:
armasm -g chap03_7_567.s -o chap03_7_567.o
armlink -o chap03_7_567.axf chap03_7_567.o
PRESERVE8
AREA
param,CODE,READONLY
EXPORT
main
IMPORT
__main
IMPORT
printf
IMPORT
||Lib$$Request$$armlib||,WEAK
main
;# int
data[]={10,9,8,7,6,5,4,3};
;# int
x,y,len,t,temp;
;# len =
sizeof(data) / sizeof(data[0]);
;# for(x =
0; x < len - 1; x++)
;# {
;# t = x;
;# for(y = x + 1; y < len;
y++)
;# {
;#
if (data[y] < data[t])
;#
t = y;
;# }
;# if (t != x)
;# {
;#
temp = data[x];
;#
data[x] = data[t];
;#
data[t] = temp;
;# }
;# else break;
;# }
;#
;** r0 =
len r1 = len - 1
;** r2 =
data
;** r3 = x
r4 = y r5 = t
;**
r6,r7
STMFD
sp!,{r4,lr}
LDR
r0,len
SUB
r1,r0,#1
LDR
r2,=data
MOV
r3,#0
loop_out
MOV
r5,r3
ADD
r4,r3,#1
loop_in
LDR
r6,[r2,r4,LSL #2]
LDR
r7,[r2,r5,LSL #2]
CMP
r6,r7
BGE
next_y
MOV
r5,r4
next_y
ADD
r4,r4,#1
CMP
r4,r0
BNE
loop_in
CMP r3,r5
BEQ sort_ok
LDR r6,[r2,r3,LSL #2]
LDR r7,[r2,r5,LSL #2]
STR r6,[r2,r5,LSL #2]
STR r7,[r2,r3,LSL #2]
ADD
r3,r3,#1
CMP
r3,r0
BNE
loop_out
sort_ok