嵌入式系统实践 01 02 ——基于ARM汇编 Keil5 MSP432 P401R开发板

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值