2017-07-15 222 views
0

A,B,C是長度爲6,以及基地址的陣列中的寄存器被發現如下:理解MIPS彙編代碼

A=[0 1 2 3 4 5], Base = $t0 
B=[1 3 5 7 9 11] Base = $t1 
C=[0 5 2 6 3 8] Base = $t2 

現在的代碼本身:

add $t4, $zero, $zero 
Loop: add $t5, $t4, $t1 
     lw $t6, 0($t5) 
     add $t5, $t4, $t2 
     lw $t7, 0($t5) 
     or $t6, $t6, $t7 
     add $t5, $t4, $t0 
     sw $t6, 0($t5) 
     addi $t4, $t4, 4 
     slti $t5, $t4, 20 
     bne $t5, $zero, Loop 

我的問題是:

1.)當添加$ t4和$ t1時,我們是將零加到每個B [i]上嗎?

2)當MIPS添加陣列,可以說add $t6, $t0,$t1我們做:

  • A [1] + B [i]於對所有的索引,然後$ T6是一個新的數組?
  • 或者我們只是在做A [0] + B [0]?

3.)你究竟如何在數組上使用OR?

+0

*然後$ t6是一個新的數組* *?這不可能是這種情況。它只是一個32位寄存器。內存中發生什麼取決於你存儲它的位置(用'sw $ t6,0($ t5)',其中'$ t5'是早先計算的,指向你現有的一個數組)。 –

+0

程序集不像高級語言,您可以使用單個指令處理整個數組。這就是爲什麼這個代碼是在一個循環內! –

回答

1
  1. 不,因爲t4不保留零。這也是指針算術,不處理值。
  2. 你通常不這樣做,添加地址通常沒有意義。代碼中沒有這樣的事情。
  3. 我不明白這個問題。您將其應用於循環中的項目。這意味着什麼取決於數組包含的內容。