這是家庭作業,所以我只會給你現在的線索,並隨時添加。幾件事:
1 /你需要告訴我們它是什麼假設要做。這是最重要的事情。
2您可以將array1地址存儲到t0中,然後在第一個循環中重新使用t0。
3 /您似乎對地址和這些地址的內容("la $s0, valuec"
和"addu $t0, $t1, $s0"
)感到困惑。
UPDATE:
其實我有簽過了一段時間,所以我會後我的解決方案,從而不會讓你陷入困境。
我之前提到的困惑是,您將兩個地址加載到$ t1和$ s0中,然後將它們加在一起得到另一個地址 - 這可能遠遠超出您的數據區域(您應該真的是增加一個地址和一個偏移量)。
這基本上是你的代碼問題(包括打印的零和崩潰)。你最好的選擇就是解決這個問題,並參考下面的代碼,作爲最後的手段,看看我會如何做到這一點。複製代碼從長遠來看不會對你有所幫助,你應該明智地假設你的教育工作者也在檢查所有網站的抄襲行爲。
這是我想出的代碼(很快,所以你需要測試它 - 它可能有錯誤)。我建議你閱讀很好的的意見,瞭解它在做什麼。
我會在幾個小時後回來看看你在做什麼。乾杯。
.text
main:
# Initialization of array pointers and loop
la $t0, array1 # address of array 1
la $t1, array2 # address of array 2
li $t2, 1 # element number
li $t3, 6 # upper limit of elements
# Process each word in array 2, adding 10 and placing
# into array 1.
Loop:
lw $t3, 0($t1) # get word from array 2
addi $t3, $t3, 10 # add 10 to word
sw $t3, 0($t0) # store word into array 1
addi $t0, $t0, 4 # move to next entry in array 1 and 2
addi $t1, $t1, 4
addi $t2, $t2, 1 # increment element number
blt $t2, $t3, Loop # loop until all elements done
# Initialize printing loop by going back to start of array 1
la $t0, array1 # address of array 1
li $t2, 1 # element number
# Loop through array 1, printing each element.
pLoop:
lw $t2, 0($t0) # get word from array 1
li $v0, 1 # 'print' command code
move $a0, $t2 # needs value in $a0
syscall # print it
addi $t0, $t0, 4 # move to next entry in array 1
addi $t2, $t2, 1 # increment element number
blt $t2, $t3, Loop # loop until all elements done
li $v0, 10 # 'terminate' command code
syscall # exit
# Data arrays for array 1 and 2
.data
array1: .word 0,0,0,0,0
array2: .word 1,2,3,4,5
我認爲這是由命令代碼$ v0設置爲10的最終系統調用處理的。 – paxdiablo 2009-04-08 03:34:47