2010-11-15 63 views
0

編寫一個執行以下操作的MIPS程序: •提示用戶輸入N個正整數(0 < N≤100)。 •顯示升序 •N個整數,對於在輸出列表顯示也是其數字的總和每個整數Mips編程排序並給出結果按升序排列並添加值

我似乎無法讓程序停止0時進入,並添加總和輸入的數字。

我的解決方案

.data 
array: .space 40 
prompt: .asciiz "Enter a number: " 
spacee: .asciiz " " 
output: .asciiz "The numbers are: " 
.text 

main: 
li $t1,10   #load 10 into $t1 
la $a1,array  #load a pointer to array into $a1 

loop: 
addi $t1,$t1,-1 #subtract 1 from $t1, save to $t1 
li $v0,4   #load 4 into $v0 (print string) 
la $a0,prompt  #load prompt text into $a 
syscall   #display prompt 
li $v0,5   #load 5 into $v0 (read integer) 
syscall   #prompt for input 
sw $v0,0($a1)  #store input int to array 
addi $a1,$a1,4 #add 4 to $a1, save to $a1 
bnez $t1,loop  #if $t1 isn't zero,goto loop 
li $t1,9   #if $t1 is zero, load 9 into $t1 
li $t2,9   #and load 9 into $t2 
la $a1,array  #load array pointer into $a1 

loop1: 
beqz $t2,here  #if $t2 is zero, goto here 
addi $t2,$t2,-1 #subtract 1 from $t2, save to $t2 
lw $t5,0($a1)  #load an input int into $t5 
lw $t6,4($a1)  #load the next one into $t6 
addi $a1,$a1,4 #add 4 to $a1, save to $a1 
ble $t5,$t6,loop1 #if $t5 <= $t6, goto loop1 
sw $t5,0($a1)  #else, store $t5 in $a1 
sw $t6,-4($a1)  #and store $t6 in $a1-4 (swapping them) 
bnez $t2,loop1 #if $t2 is not zero, to go loop1 

here: 
la $a1,array  #load array into $a1 
addi $t1,$t1,-1 #subtract 1 from $t1, save to $t1 
add $t2,$t2,$t1 #add $t2 to $t1, save to $t2 
bnez $t1,loop1 #if $t1 isn't zero, goto loop1 
li $v0,4   #load 4 into $v0 (print string) 
la $a0,output  #load 'the numbers are' into $a0 
syscall   #display message to screen 
la $a1,array  #load array pointer into $a1 
li $t1,10   #load 10 into $t1 

loop2: 
li $v0,1   #load 1 into $v0 (print int) 
lw $a0,0($a1)  #load $a1 into $a0 
syscall   #print first number to screen 
li $v0,4   #load 4 into $v1 (print string) 
la $a0,spacee  #load ' ' into $a0 
syscall   #print ' ' to screen 
addi $a1,$a1,4 #add 4 to $a1, save to $a1 
addi $t1,$t1,-1 #subtract 1 from $t1, save to $t1 
bnez $t1,loop2 #if $t1 isn't zero, goto loop2 



li $v0,10    #exit 

syscall 
+0

@Nicholas萊利:使用'homework'標籤現在氣餒,顯然是 - 事實上,這是應該的功課而不是在問題被提及 - 見http://meta.stackexchange.com/questions/ 10811 /如何提問和回答作業 - 問題 – 2010-11-15 09:12:51

+0

哎呦,我已經離開了一段時間...謝謝。 – 2010-11-15 09:15:00

回答

0

你需要一個分支,將跳轉到你的代碼的最後兩行。

beq $v0, $zero, quit #this should be in the loop 

quit:      #this is your last two lines 
    li $v0,10    #exit 
    syscall 
+0

謝謝。你能給一些指導嗎?不知道從哪一部分開始。 – King 2010-11-19 07:49:23