0
A= A? C[0] : B;
是正確的彙編指令這樣寫? 假設數組c的$t1=A, $t2=B, $s1=base
地址:
beq $t1, $0, ELSE
lw $t1, 0($s1)
ELSE: add $t1, $t2, $0
A= A? C[0] : B;
是正確的彙編指令這樣寫? 假設數組c的$t1=A, $t2=B, $s1=base
地址:
beq $t1, $0, ELSE
lw $t1, 0($s1)
ELSE: add $t1, $t2, $0
不,它似乎並不正確,因爲add $t1, $t2, $0
將被執行,即使$t1 != $0
。
我希望這一工作(未測試):
beq $t1, $0, ELSE
sll $0, $0, 0 # NOP : avoid the instruction after branch being executed
lw $t1, 0($s1)
j END
sll $0, $0, 0 # NOP : avoid the instruction after branch being executed
ELSE: add $t1, $t2, $0
END:
此代碼假定的C
元素是4字節長的每個。
非常感謝!你能否解釋爲什麼需要NOP? – user
MIPS在分支和跳轉之後有一個延遲槽,它總是被執行。如果您正在使用模擬器(例如'MARS'或'spim'),則需要打開此行爲。否則,考慮到我假設你正在做功課,你大概可以忽略它。 –