指令集與組合語言

在RISC-V的標準呼叫慣例中,下列何者是用於傳遞整數引數與回傳值的暫存器?

  1. A引數是s0~s7,回傳值是ra
  2. B引數是a0~a7,回傳值是a0(及a1)
  3. C引數全部放在堆疊,回傳值是sp
查看答案與解析

正確答案:B. 引數是a0~a7,回傳值是a0(及a1)

在RISC-V的標準呼叫慣例中,整數引數最多8個放入a0~a7(x10~x17)來傳遞,回傳值放在a0,64位元的值等則放入a0與a1兩個暫存器回傳。因為是以比記憶體更快的暫存器傳遞,所以函式呼叫的負擔較小。超過8個的引數放在堆疊上。浮點數的引數使用fa0~fa7。

  • A. s0~是保存用的暫存器,ra是返回位址。
  • B. 正確。a是argument的意思。
  • C. 8個以內是以暫存器傳遞。sp是堆疊的位置。
練習這個領域 前往領域頁面

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

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