AREA exone,CODE,READWRITE
ENTRY
CODE32 ;作业一1到100的加法
MOV r0,#100 ;向寄存器中存入要比较的次数
MOV r1,#1 ;初始的两个数
MOV r2,#0
loop
ADD r2,r2,r1 ;两两相加
ADD r1,r1,#1 ;自动加一
SUB r0,r0,#1 ;要加的数减一
CMP r0,#0 ;判断比较次数是否为零
BNE loop
LDR r3,=RESULT
STR r2,[r3]
RESULT
DCD 0
STOP
B STOP
AREA extwo, CODE,READWRITE
ENTRY
CODE32
;作业二排序:将目标地址处的数据进行冒泡排序,从小到大
MOVS r2, #1 ;r2 = 排序完成标志,1表示未完成
again
LDR r0, =data ;r0 = 目的数据块地址
MOV r1, #40 ;r2 = 排序字数量
SUBS r1, r1, #4
ANDS r2, r2, #1 ;判断排序是否完成
BEQ stop ;若r2=0,完成
MOVS r2, #0 ;否则,标志设置为0
;STMFD sp!, {r4} ;保存工作寄存器
judge
LDR r3, [r0] ;读出r0地址处得值到r3
LDR r4, [r0,#4] ;读出r0地址处得值到r4
CMP r3, r4 ;比较二者的大小
BLS next ;若r3<=r4,跳到next
exchange
MOVS r2, #1 ;发生数据交换,就设置标志为1
STR r3, [r0,#4] ;交换二者的值
STR r4, [r0]
next
ADDS r0, r0, #4 ;目标地址加4
SUBS r1, r1, #4 ;计数值减1
BNE judge ;本趟排序未结束,跳到judge_2
B again ;否则下一趟
LDMFD sp!, {r4} ;恢复工作寄存器
;将程序的控制权转交给调试器
stop
data
DCD 9,4,6,7,8,1,3,2,0,5
STOP
B STOP