汇编实现冒泡排序

感觉。。实现一下还是有点意义的。。

用的是MIPS指令集,不造是不是过时了。。

然后参考资料:https://blog.csdn.net/ben_chong/article/details/51794392

实现上不敢用保留寄存器,因为用完貌似需要恢复原寄存器的值,所以全部都用临时寄存器的值

然后遇到了几个问题:

一、变量的定义

主要是在数据段里干,数据段用.data标识

然后定义方式是"变量名:  .变量类型  初始值"

eg.a:.word 4

二、输入输出

设置好$v0和$a0的值,然后用syscall就可以了

如何设置参数见参考资料

三、新语法

li即load immediate,加载常数

la即load address,加载地址,主要是.data段里面的地址

四、调式

基本只能靠静态差错

不过可以通过看寄存器的值来判断错误出现的地方,比如在中间将一个无关的寄存器设成一个特定的值,程序错的时候直接看那个寄存器的值判断程序有没有运行到当前位置

其他的就没什么了吧?

主要贴下代码。。

 

 

.data
	size:.word 100#Max size
	array:.space 404
	space:.asciiz " "
.text 
.globl main
main:

#input
	li $v0,5
	syscall
	sw $v0,size
	sll $t6,$v0,2
	sub $t7,$t6,4

	li $t1,0
input:
	li $v0,5
	syscall
	sw $v0,array($t1)
	addi $t1,4
	li $t0,0
	slt $t0,$t1,$t6
	beq $t0,1,input

#sort
	li $t1,0
FOR1:
	li $t2,0
FOR2:
	
	add $t3,$t2,4
	lw $t4,array($t2)
	lw $t5,array($t3)

#if array[i]>array[i+1]
	li $t0,0
	slt $t0,$t5,$t4
	bne $t0,1,ENDIF
#swap
	sw $t5,array($t2)
	sw $t4,array($t3)

ENDIF:
	
	addi $t2,4
	li $t0,0
	slt $t0,$t2,$t7
	beq $t0,1,FOR2

	addi $t1,4
	li $t0,0
	slt $t0,$t1,$t6
	beq $t0,1,FOR1


#output
	li $t1,0
output:
	li $v0,1
	lw $a0,array($t1)
	syscall
	li $v0,4
	la $a0,space
	syscall

	addi $t1,4
	li $t0,0
	slt $t0,$t1,$t6
	beq $t0,1,output

	
	jr $ra

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值