ARM汇编程序---1-100累加和一个简单排序
嵌入式初学者,这学期刚开课,学起来感觉很不错。
第一个累加和的源码:
AREA TEXT,CODE,READWRITE
ENTRY
MOV R0,#100 ;循环数目
MOV R1,#0 ;初始化数据
LOOP
ADD R1,R1,R0 ;将数据进行相加,获得最后的数据
SUBS R0,R0,#1 ;循环数据R0减去1
CMP R0,#0 ;将R0与0比较看循环是否结束
BNE LOOP ;判断循环是否结束,接受则进行下面的步骤
LDR R2,=RESULT
STR R1,[R2]
RESULT
DCD 0
STOP
B STOP
第二个排序的源码附上:
;排列算法:先将所有的数据与第一个进行比较,最后取出最小的数据放到第一个内存单元中
;然后再从第二个内存单元开始进行比较,将第二小的数据放到第二个内存单元中,
;以此内推则能将十个数据进行排列。
AREA TEXT,CODE,READWRITE
ENTRY
LDR R0,=DATA ;获得DATA数据的起始地址
MOV R1,R0
MOV R5,#9 ;开始的循环数目是10次,所以应该从9开始
MOV R6,R5
COMPARE
ADD R0,R0,#4 ;将R0所存储的地址+4表示为下一个要比较的数的地址
SUB R6,R6,#1 ;循环1次减1
LDR R2,[R1] ;将放在寄存器中的数据取出进行大小比较
LDR R3,[R0]
CMP R3,R2
MOVCC R7,R2 ;如果后面的地址的数值比前一个小则交换他们的数据
MOVCC R2,R3
MOVCC R3,R7
STR R2,[R1] ;将数据存储到相应的内存单元中
STR R3,[R0]
CMP R6,#0 ;看每次的循环是否结束
BNE COMPARE
ADD R1,R1,#4 ;每次循环结束以后将初始的指向的内存地址后移一个单元
MOV R0,R1 ;重新初始化上个循环中的寄存器中保存的地址
SUB R5,R5,#1 ;每次循环以后上面在以后的循环中的次数都会减1
MOV R6,R5
CMP R5,#0 ;判断所有的循环是否结束
BNE COMPARE
DATA
DCD 9,4,6,7,8,1,3,2,0,5
STOP
B STOP
相关推荐
要知道时间复杂度只是描述一个增长趋势,复杂度为O的排序算法执行时间不一定比复杂度为O长,因为在计算O时省略了系数、常数、低阶。实际上,在对小规模数据进行排序时,n2的值实际比 knlogn+c还要小。