指令集與組合語言
在RISC-V的呼叫慣例中,t0~t6是「呼叫端保存(caller-saved)」的暫存器。當某個函式想在呼叫另一個函式之後,仍使用放在t0的值時,下列何者是正確的處理?
- A什麼都不做,被呼叫的函式也必定會將t0還原
- Bt0不會被其他函式改寫,所以可以直接使用
- C在呼叫前將t0的值退避到堆疊等處,呼叫後再還原
查看答案與解析
正確答案:C. 在呼叫前將t0的值退避到堆疊等處,呼叫後再還原
t系列的暫存器,約定被呼叫的函式可以不保存而自由使用。因此,若呼叫之後仍需要該值,呼叫端必須自行先退避。將保存的責任依暫存器分配給呼叫端與被呼叫端,許多函式就能不費保存的功夫而使用暫時用的暫存器,也能減少整體保存與還原的次數。
- A. t系列是被呼叫端可以自由破壞的暫存器。
- B. 任何函式都能自由使用t0。
- C. 正確。或是一開始就放在會被保存的s暫存器。