用ARM汇编对十个数进行排序(冒泡实现)

本文介绍了一种使用ARM汇编语言实现的简单排序算法。该算法首先将初始数据集复制到另一个区域,然后通过比较和交换操作来实现数据的排序。代码提供了两种实现方式:一种是详细的步骤说明,另一种是更为简洁的版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:代码区有十个数字,存放在DATA1,现在需要将这个十个数从小到大排序并存放在数据区的DATA2中。

先直接上一个冗杂一点的代码,不过应该比较好理解。因为KEIL的注释复制过来会乱码,所以复制过来的时候把注释都删了。但是代码后面有截图,截图里有注释,基本每一步都注释过,绝对看得懂。

	AREA RESET,CODE;

	EXPORT __Vectors

	EXPORT Reset_Handler

__Vectors

	DCD __initial_sp

	DCD Reset_Handler

 

Reset_Handler PROC 

	NOP

	NOP

DATA1
	DCD 10,-1,3,7,16,5,15,2,6,3;

ENTER

	LDR R1 , =DATA1
	LDR R2 , =DATA2
	MOV R0 , #0 
	
	
FILL_DATA2_WITH_DATA1 
	
	LDR R3 , [R1,R0] 
	STR R3 , [R2,R0] 
	ADD R0 , #4 
	CMP R0 , #36 
	BLE FILL_UNFINISH
	BGT FILL_FINISH 


FILL_UNFINISH 

	B FILL_DATA2_WITH_DATA1 


FILL_FINISH 
	
	MOV R5 , #0 
	


OUT_LOOP 

	MOV R4 , #0 
	ADD R5 , #1 
	MOV R9 , #10 
	CMP R5 , R9 
	BLE INNER_LOOP 
	BGT SORT_FINISH 
	

INNER_LOOP 
	
	LDR R6 , [R2,R4] 
	ADD R4 , #4 
	MOV R10 , #36 
	CMP R4 , R10 
	BGT OUT_LOOP 
	LDR R7 , [R2,R4] 
	CMP R6 , R7 
	BLE LESS_THAN
	BGT GREATER_THAN 
	

LESS_THAN 
	B INNER_LOOP 

GREATER_THAN 
	STR R6 , [R2,R4] 
	ADD R8 , R2 , R4 
	SUB R8 , R8 , #4 
	STR R7 , [R8] 
	B INNER_LOOP 

	
SORT_FINISH 
	
 

	B .

	ENDP

 

	AREA STACK,DATA

DATA2

	DCD 1,2,3,4,5,6,7,8,9,10

	SPACE 0x100

__initial_sp



	END



截图,包含注释:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述




这是Debug的截图

这是DEBUG的图片




再给一个精炼的代码:

		AREA RESET,CODE
		EXPORT __Vectors
		EXPORT Reset_Handler
__Vectors
 		DCD __initial_sp
		DCD Reset_Handler
Reset_Handler PROC 
 		NOP
 		NOP
DATA1
 		DCD 10,-1,3,7,16,5,15,2,6,3;
main      
        MOV R0,#0
		MOV R7,#0
		LDR R6,=DATA1   
        LDR R2,=DATA2

LOOP5
        LDR R8,[R6,R7]
		STR R8,[R2,R7]
		ADD R7,#4
		CMP R7,#40
		BLT LOOP5
		BGE LOOP1
			
LOOP1  
        ADD R1,R0,#4
        B LOOP2
        
LOOP2  
        LDR R3,[R2,R0]
        LDR R4,[R2,R1]
        CMP R3,R4
        BGT EXCHANGE 
        B LOOP3          
EXCHANGE  
        STR R3,[R2,R1]
        STR R4,[R2,R0] 
        B LOOP3        
LOOP3 
        ADD R1,R1,#4
        MOV R5,#40 
        CMP R1,R5
        BLT LOOP2
        BGE LOOP4 
LOOP4	
        ADD R0,R0,#4
        CMP R0,#36
        BLT LOOP1
        BGE STOP
STOP
        B STOP
        B       main
 		B .
 		ENDP
 


 		AREA STACK,DATA
	 
DATA2
 		DCD 0,0,0,0,0,0,0,0,0,0 ;
 		SPACE 0x100
__initial_sp

 		END
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沧州刺史

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值