指令集與組合語言

在RISC-V的標準呼叫慣例中,呼叫一個有10個整數引數的函式時,第9個與第10個引數是在哪裡傳遞?

  1. As0與s1
  2. Bt0與t1
  3. C堆疊上
查看答案與解析

正確答案:C. 堆疊上

引數用的暫存器只有a0~a7共8個,所以第9個以後由呼叫端堆入堆疊,被呼叫端則從堆疊指標起算的固定位置讀取。由於記憶體的存取增加,引數非常多的函式會稍微變慢。常見的做法是設法減少引數,例如將大型結構體整個以指向結構體的指標來傳遞。

  • A. s0~是被呼叫端要保存的暫存器,不是引數用的。
  • B. t0~是暫時用的暫存器,不是引數用的。
  • C. 正確。暫存器放不下的部分放在堆疊。
練習這個領域 前往領域頁面

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

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