西安电子科技大学微原大作业 汇编实现对十个数冒泡排序

汇编实现对十个数冒泡排序

1.题目

image-20231205234448346

如上图,将DATA1数组中存放的10个数,从小到大排序并存放到DATA2数组中。要求画出流程图,编写代码并给出注释;提交利用Keil软件执行后,DATA2数组在存储器中数据的结果截图。

2.流程图

image-20231205234147559

3.代码及注释

1.文字版

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    			 ;将DATA1的首地址给R1
	LDR R2 , =DATA2     		 ;将DATA2的首地址给R2
	MOV R0 , #0        			 ;用来计数
	
	
FILL_DATA2_WITH_DATA1   		 ;把DATA1的数复制进DATA2
	
	LDR R3 , [R1,R0]       ;将指向DATA1的地址对应的数字暂时存进R3
	STR R3 , [R2,R0]    	     ;将存入R3的对应DATA1里的数字放入DATA2对应的地方
	ADD R0 , #4        	 ;将R0移动,使R0+R1或者R0+R2指向后一个数字
	CMP R0 , #36       	 ;比较R0与36的大小,如果小于等于则说明还未完成复制过程
	BLE FILL_UNFINISH   	 ;如果未完成,则跳转到未完成代码区域
	BGT FILL_FINISH     	 ;如果已完成,则跳转到已完成代码区域


FILL_UNFINISH           ;未完成从DATA1到DATA2的复制过程

	B FILL_DATA2_WITH_DATA1     ;回去继续进行从DATA1到DATA2的复制过程


FILL_FINISH             ;已完成从DATA1到DATA2的复制过程 
	
	MOV R5 , #0         ;再准备一个计数单位,用于冒泡外层计数
	

                        ;冒泡排序
OUT_LOOP              ;外层循环

	MOV R4 , #0         ;为下一层循环提供一个计数变量
	ADD R5 , #1         ;循环一次加1
	MOV R9 , #10        ;限定次数
	CMP R5 , R9         ;有十个数,那么外层循环应该进行十次
	BLE INNER_LOOP      ;如果R5<=10,说明还需要继续排序
	BGT SORT_FINISH     ;如果R5>10,排序结束
	

INNER_LOOP  ;内层循环
	
	LDR R6 , [R2,R4]    	;将DATA2中的一个数取出,放进R6
	ADD R4 , #4         ;指针后移
	MOV R10 , #36       ;设置限定数
	CMP R4 , R10        ;比较R4与限定数
	BGT OUT_LOOP      ;如果R4大于36,则内层循环已经结束,回到外层
	LDR R7 , [R2,R4]    	;将DATA2里的下一个数取出来,放进R7
	CMP R6 , R7         ;比较R6与R7,即相当于比较C语言中的arr[j]与arr[j+1]
	BLE LESS_THAN      ;如果R6小于等于R7,不需要改变,可以继续内层循环
	BGT GREATER_THAN  ;如果R6大于R7,即arr[j]>arr[j+1],则需要交换两者位置
	

LESS_THAN               ;R6小于等于R7,不需要改变
	B INNER_LOOP        ;回内层继续循环

GREATER_THAN            ;R6大于R7,进行交换操作
	STR R6 , [R2,R4]    	  ;将R6对应的数放到R7里
	ADD R8 , R2 , R4    	  ;将R7的地址给R8
	SUB R8 , R8 , #4    	  ;R8自减得到R6的地址
	STR R7 , [R8]      	  ;将R7的值给R6
	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


2.截图版

image-20231205234331016

image-20231205234338643

image-20231205234345424

image-20231205234352867

4.DATA2数组在存储器中数据的结果截图

image-20231205234536034

  • 16
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值