我正在參加一個架構課程,並且正在學習MIPS程序集。MIPS彙編中lw/sw操作的格式?
這是我的理解是,LW和SW操作是我格式指令允許2寄存器操作,和一個立即數:
[opcode] 6-bits, [rs] 5-bits, [rt] 5-bits, [immediate] 16-bits written as: lw $rt, offset($rs) # where offset is an immediate value
OK,讓我們說,我想訪問A [1]。假設A的基地址寄存器$ S7和索引(i)爲寄存器$ S1,我必須做的線沿線的東西:
sll $t0, $s1, 2 # i*4 (offset) add $t0, $s7, $t0 # $t0 = &A[i] lw $t1, 0($t0) # $t1 = A[i]
我感到困惑的是我的教授一直說我們也可以用3個寄存器來做這樣的指令:
sll $t0, $s1, 2 # i*4 (offset) lw $t1, $t0($s7) # $t1 = A[i]
這兩種解決方案都正確嗎?或者我的導師不正確?你不能使用寄存器來抵消偏移嗎?我認爲抵消必須是立即數。據我瞭解,之所以要在中增加指令的第一個解決方案,實際上是因爲你的不能用來使用寄存器作爲偏移量。
彙編語言作爲一種語言是由彙編程序定義的,該程序讀取它並使機器代碼不在其中。一般來說(如果有的話)像C++或JAVA這樣的標準化語言在某個地方有一些委員會。 MIPS已經有了常用的僞指令,這可能是某個特定彙編器的另一個僞指令。 –