⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zj.txt

📁 基于SPIM模拟器的冒泡排序。spim是mips的模拟器。它是一种汇编语言
💻 TXT
字号:
.text
.align	2
.globl	main
main:
        la	$a0,str_tip	
        li	$v0,4		        #print string
        syscall			        #print "how many numbers do you want to input?"
        li	$v0,	5
	syscall
        sll	$t0,	$v0,	2	# How many bytes should $sp down?
        sub	$sp,	$sp,	$t0     
        move	$s0,	$sp             # Store the start address of array
	move	$s1,	$v0
	li	$v0,	4
        la	$a0,	str_Enter
	syscall
        move	$a0,	$s0 #M $sp
	move	$a1,	$s1 #M $v0
	jal	scanf_arr
        move	$a0,	$s0 #M $sp
	move	$a1,	$s1 #M $v0
	jal	sort
        la	$a0,	str_outputnumber
	li	$v0,	4
	syscall
	move	$a0,	$s0 #M $sp
	move	$a1,	$s1 #M $v0
	jal	print_arr
        la      $a0,    str_continue
        li      $v0,    4
        syscall
        li      $v0,    12 #M 8
        syscall
        #M lw      $t1,    y
	li	$t1,	121	              # 'y' in ascii is 121
        beq     $v0,    $t1,     main
	li	$v0,	4
	la	$a0,	str_exit
	syscall
        li	$v0,	10
	syscall
        
scanf_arr:
	addi	$sp,	$sp,	-8
	sw	$s0,	4($sp)
	sw	$s1,	0($sp)
	li	$s0,	0		# $s0 stores the offset of current int
L1:
        sltu    $t0,    $s0,    $a1
	beq	$t0,	$zero,	scanf_exit	# Branch if $S1 is greater than or equal $s0
	sll	$t0,	$s0,	2
	add	$t1,	$a0,	$t0	# $t1 stores the address of current int to display
	li	$v0,	5
	syscall
	sw	$v0,	0($t1)		# Write the data to array
	addi	$s0,	$s0,	1
	j	L1
scanf_exit:
	lw	$s0,	4($sp)
	lw	$s1,	0($sp)
	addi	$sp,	$sp,	8
	jr	$ra

print_arr:
	#M addi	$sp,	$sp,	-8
	addi	$sp,	$sp,	-12
	sw	$s0,	8($sp)
	sw	$s1,	4($sp)
	sw	$s2,	0($sp)
	li	$s0,	0		# $s0 stores the offset of current int
	move	$s2,	$a0
L2:
	sltu    $t0,    $s0,    $a1
	beq	$t0,	$zero,	print_exit	# Branch if $S1 is greater than or equal $s0
	sll	$t0,	$s0,	2
	#M add	$t1,	$a0,	$t0
	add	$t1,	$s2,	$t0	# $t1 stores the address of current int to display
	lw	$a0,	0($t1)
	li	$v0,	1
	syscall
	li	$a0,	' '
	li	$v0,	11
	syscall
	addi	$s0,	$s0,	1
	j	L2
print_exit:
	lw	$s2,	0($sp)
	lw	$s1,	4($sp)
	lw	$s0,	8($sp)
	addi	$sp,	$sp,	12
	jr	$ra

sort:  
	addi	$sp,$sp,-20
	sw	$ra,16($sp)
	sw	$s3,12($sp)
	sw	$s2,8($sp)
	sw	$s1,4($sp)
	sw	$s0,0($sp)

	move	$s2,$a0
	move	$s3,$a1


	move	$s0,$zero
for1tst:
	slt	$t0,$s0,$s3
	beq	$t0,$zero,exit1



	addi	$s1,$s0,-1
for2tst:
	slti	$t0,$s1,0
	bne	$t0,$zero,exit2
	sll	$t1,$s1,2
	add	$t2,$s2,$t1
	lw	$t3,0($t2)
	lw	$t4,4($t2)
	slt	$t0,$t4,$t3
	beq	$t0,$zero,exit2
	

	move	$a0,$s2
	move	$a1,$s1
	jal	swap

	addi	$s1,$s1,-1
	j	for2tst
	

exit2:
	addi	$s0,$s0,1
	j	for1tst


exit1:
	lw	$s0,0($sp)
	lw	$s1,4($sp)
	lw	$s2,8($sp)
	lw	$s3,12($sp)
	lw	$ra,16($sp)
	addi	$sp,$sp,20

	jr	$ra
swap:
	sll	$t1,$a1,2
	add	$t1,$a0,$t1
	
	lw	$t0,0($t1)
	lw	$t2,4($t1)
	
	sw	$t2,0($t1)
	sw	$t0,4($t1)

	jr	$ra



.data
str_tip:
	.asciiz "                              welcome to use sort procedure\n Enter how many numbers do you want to input : \n"
str_Enter:
	.asciiz	"Enter The Number: \n"
str_outputnumber:
	.asciiz	"The Result is: \n"
str_continue:
	.asciiz "\n继续排序请输入y,退出输入n:\n"
str_exit:
	.asciiz " Exit System!"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -