指令集與組合語言

下列何者是在RISC-V函式開頭執行「addi sp, sp, -16」的目的?

  1. A讓堆疊往位址較小的方向延伸,確保16位元組的工作區域
  2. B釋放堆疊上的16位元組
  3. C將sp中的值減16,作為回傳值回傳
查看答案與解析

正確答案:A. 讓堆疊往位址較小的方向延伸,確保16位元組的工作區域

依包含RISC-V在內的許多ISA的慣例,堆疊是從位址較大的一方往較小的一方延伸。將sp減16,則從新的sp到原本的sp之間的16位元組,就成為這個函式的堆疊框,可以放置返回位址、已保存的暫存器及區域變數。在函式結束時以「addi sp, sp, 16」將sp還原,區域就會被釋放,回到與呼叫前相同的狀態。

  • A. 正確。堆疊往位址較小的方向延伸。
  • B. 釋放是最後的「addi sp, sp, 16」。
  • C. 回傳值是以a0回傳。
練習這個領域 前往領域頁面

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

  1. 在RISC-V的標準呼叫慣例中,進入函式時的堆疊指標sp規定要對齊為16位元組的倍數。下列何者是最適當的理由?
  2. 上述程式碼是某個函式的開頭(序言,prologue)。下列何者是這個部分所做的事?
  3. 下列何者是在函式中使用框指標(frame pointer,RISC-V中為s0/fp)的優點?
  4. 在RISC-V中撰寫呼叫自己的遞迴函式時,若忘了將ra保存到堆疊,會發生什麼事?
  5. 在小端序(little-endian)的RISC-V中,以「sw」將存放0x12345678的暫存器寫入位址0x100。之後以「lbu」讀取位址0x101的1個位元組,值是多少?