指令集與組合語言

在RISC-V的呼叫慣例中,s0~s11被視為「被呼叫端保存(callee-saved)」的暫存器,下列何者是其意義?

  1. A被呼叫的函式若要使用這些暫存器,就先保存原本的值,並在返回前還原
  2. B呼叫端的函式必須在呼叫前將它們全部設為0
  3. C是只有作業系統能使用的暫存器,使用者的程式不能使用
查看答案與解析

正確答案:A. 被呼叫的函式若要使用這些暫存器,就先保存原本的值,並在返回前還原

被呼叫端保存的暫存器,約定在跨越函式呼叫時值會被保持。被呼叫的函式想使用s0等暫存器時,要先將其保存到堆疊,並在返回前還原。呼叫端若把呼叫之後仍想繼續使用的值放在s系列的暫存器,就不必自己重新保存。迴圈的變數等經常放在這裡。

  • A. 正確。從呼叫端來看,值是被保持的。
  • B. 沒有設為0的規定。
  • C. 使用者的程式也能正常使用。
練習這個領域 前往領域頁面

指令集與組合語言的其他題目

  1. 在RISC-V的呼叫慣例中,t0~t6是「呼叫端保存(caller-saved)」的暫存器。當某個函式想在呼叫另一個函式之後,仍使用放在t0的值時,下列何者是正確的處理?
  2. 不呼叫其他函式的函式(葉函式、leaf function),在很多情況下不需要將ra保存到堆疊。下列何者是其理由?
  3. 下列何者是在RISC-V函式開頭執行「addi sp, sp, -16」的目的?
  4. 在RISC-V的標準呼叫慣例中,進入函式時的堆疊指標sp規定要對齊為16位元組的倍數。下列何者是最適當的理由?
  5. 上述程式碼是某個函式的開頭(序言,prologue)。下列何者是這個部分所做的事?