首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MIPS排序和数组

MIPS排序和数组
EN

Stack Overflow用户
提问于 2014-04-16 19:19:16
回答 1查看 5.4K关注 0票数 0

我做了这个MIPS问题,提示用户输入至少4个数字并按升序打印。我想知道是否有人可以看一看,告诉我你对它的看法?如果我也想让它以降序打印,我该如何开始呢?在我有真正的程序要做之前,这个程序只是为了好玩!

代码语言:javascript
运行
复制
.data
array: .space 100
input: .asciiz "Enter at least 4 integers: Enter the number 1000 to exit \n"
output: .asciiz "The array in ascending order: \n"
commas: .asciiz ","

.text
.globl main
main:

la $a1, array   #loads a pointer to array into $a1
li $a2,9        #loads 9 into $a2
li $t0,0    
li $t1,1000     

loops:

la $a0, input   #loads input text into $a
li $v0, 4       #loads 4 into $v0 (prints string) 
syscall         
li $v0, 5       #loads 5 into $v0 (read interger)
syscall         
beq $v0,$t1,swap
addi $t0,$t0,4   #add 4 to $t0, save to $t0
sw $v0, ($a1)    #stores input into array
addi $a1, $a1,4  #add 4 to $a1, save to $a1
j loops

swap:

la $t4, array    #loads array to $t4
la $t1, array    #loads array to $t1
addi $t1,$t1,4   #add 4 to $t1, save to $t1 
la $t8,array     #loads array to $t8
add $t8,$t0,$t8  #add $t8 to $t0, save to $t8
la $t9,array
add $t9,$t0,$t9  #add $t9 to $t0, save to $t9
addi $t9,$t9,-4  #subtracts 4 from $t9, save to $t9

loop:

lw $t2,($t4)     #load input into $t2
lw $t3,($t1)     #load input into $t3
blt $t2,$t3,loop1 #if $t2 < $t3, go to loops
sw $t3,($t4)     #store $t3 in $t4
sw $t2,($t1)     #store $t2 in $t1

loop1:

addi $t1,$t1,4    #add 4 to $t1, save to $t1
blt $t1,$t8,loop  #if $t1<$t8, go to loop
addi $t4,$t4,4    #add 4 to $t4, save to $t4
move $t1,$t4
addi $t1,$t1,4    #add 4 to $t1, save to $t1
blt $t4,$t9,loop  #if $t4<$t9, to go loop

print:

la $a1,array      #loads array to $a1
la $a0, output    #loads output to $a0
li $v0, 4         #loads 4 into #v0
syscall

loop2:

blez $t0, done   #if $t0<=0, go to done
li $v0, 1        #loads 1 into $v0
lw $a0, 0($a1)   #load an inout into $a0
syscall
la $a0, commas    #loads commas into $a0
li $v0, 4        #loads 4 into $v0
syscall
addi $a1, $a1, 4  #add 4 to $a1, save to $a1
addi $t0, $t0, -4 #subtracts 4 from #t0, save to $t0
j loop2

done:
j done
EN

Stack Overflow用户

发布于 2014-04-16 19:46:27

方法一:

只需对数组进行降序排序。这应该是推荐的版本。

像大多数常见的排序一样,排序基于比较和交换方案。在代码中,它发生在label、looploop1中。因此,您只需更改第44行的比较部分:

代码语言:javascript
运行
复制
blt $t2,$t3,loop1 #if $t2 < $t3, go to loops

至:

代码语言:javascript
运行
复制
bgt $t2,$t3,loop1 #if $t2 > $t3, go to loops

然后结果看起来应该是下降的。

方法2.:

仍然对数组进行升序排序,同时反向打印数组。

打印部分位于label loop2,您需要像替换第68行一样对其进行更改:

代码语言:javascript
运行
复制
lw $a0, 0($a1)   #load an inout into $a0

通过以下方式:

代码语言:javascript
运行
复制
add $t1, $a1, $t0
addi $t1, $t1, -4
lw $a0, 0($t1)   #load an inout into $a0

还有注释第73行:

代码语言:javascript
运行
复制
addi $a1, $a1, 4  #add 4 to $a1, save to $a1
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23107912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档