lab1
ARM累加1 ~ 10
AREA Reset,DATA,READONLY
DCD 0X12345678
DCD Reset_Handler
AREA CODE_SEGMET,CODE,READONLY
ENTRY
Reset_Handler proc
export Reset_Handler [weak]
MOV R0,#0;最终结果保存到R0
MOV R1,#10;R1从10取到0
start
ADD R0,R0,R1
SUBS R1,R1,#2
BNE start;如果R1不为0则继续加
ENDP
END
lab2
计算字符串偶数数量
AREA Reset, DATA, READONLY
DCD 0x12345678
DCD Reset_Handler
AREA CODE_SEGMET, CODE, READONLY
Reset_Handler proc
export Reset_Handler [weak]
LDR R0, = ARRAY ;;R0 stores the first address of array
MOV R1, #0
MOV R2, #0
LOOP
LDR R2, [R0, R1] ; R2 = R1 + R0
ADD R1, #4
NEXT
CMP R2, #0
BEQ LOOP
MOV R4, R2
MOV R2, R2, LSR#8 ; logical right shift
AND R4, #0x000000FF
CMP R4, #0x23 ;0x24 = #
BEQ EXIT ;if equal, exit
CMP R4, #0x30 ;0x30 = 0
BLT NEXT; less then
CMP R4, #0x39 ;0x39 = 9
BGT NEXT
EOR R4, R4, #0x00000001;#judge if the last bit of data is even
AND R4, R4, #0x00000001
CMP R4, #0x00000001
BNE NEXT ;if not, next char
ADD R3, #1
B NEXT
EXIT
NOP
ENDP
ARRAY DCB "12345678222#"
END
进行冒泡排序
AREA Reset, DATA, READONLY
DCD 0x12345678
DCD Reset_Handler
AREA CODE_SEGMET, CODE, READONLY
Reset_Handler proc
export Reset_Handler [weak]
LDR R1, = ARRAY ;;R0 stores the first address of array
MOV R0, #0x20000000
MOV R7, #0
MOV R5, #4
MOV R5, R5, LSL#2 ;length of array
MOV R2, #0
COPY
CMP R2, R5
BGT SORT
LDR R3, [R1, R7]
AND R3, #0xff
STR R3, [R0, R2]
ADD R2, #4
ADD R7, #1
B COPY ;Move the data from array to 0x2000 0000
SORT
MOV R5, #20 ; bubble sort
OUTLOOP
MOV R2, #0
SUB R5, #4
CMP R5, #0
BEQ ENDOFSORT
LOOP
MOV R1, R2
CMP R2, R5
BEQ OUTLOOP
ADD R2, R1, #0x04
LDR R3, [R0, R1]
LDR R4, [R0, R2]
CMP R4, R3
BGE LOOP
STR R4, [R0, R1]
STR R3, [R0, R2]
B LOOP
ENDOFSORT
ADD R0, #1 ;after bubble sort, make data consecutive
MOV R2, #3
MOV R3, #0
LOOPN
LDR R4, [R0, R2]
STR R4, [R0, R3]
ADD R2, #4
ADD R3, #1
CMP R3, #4
BNE LOOPN ;result is the data line ascendedly and successively
EXIT
NOP
ENDP
ARRAY DCB 5, 4, 3, 2, 1
END