指令集與組合語言

下列何者是在函式中使用框指標(frame pointer,RISC-V中為s0/fp)的優點?

  1. A不必多用一個暫存器,所以效能必定提升
  2. B即使函式途中sp有移動,也能以固定的距離指定區域變數或引數,除錯器也更容易追蹤呼叫的串連
  3. C堆疊的區域會自動變大,不會溢位
查看答案與解析

正確答案:B. 即使函式途中sp有移動,也能以固定的距離指定區域變數或引數,除錯器也更容易追蹤呼叫的串連

框指標是在進入函式的時間點,一直指向堆疊位置而不移動的暫存器。即使因為可變長度陣列等而使sp在途中改變,也能以「距fp多少位元組」來指定區域變數。此外,若在各個框中保存前一個fp,藉由追蹤就能得到呼叫的串連(回溯,backtrace)。不過因為會佔用一個暫存器,在最佳化時也常被省略。

  • A. 反而會專用一個暫存器。
  • B. 正確。作為框的基準點發揮作用。
  • C. 沒有防止堆疊溢位的作用。
練習這個領域 前往領域頁面

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

  1. 在RISC-V中撰寫呼叫自己的遞迴函式時,若忘了將ra保存到堆疊,會發生什麼事?
  2. 在小端序(little-endian)的RISC-V中,以「sw」將存放0x12345678的暫存器寫入位址0x100。之後以「lbu」讀取位址0x101的1個位元組,值是多少?
  3. 在RISC-V中,當讀取4個位元組的lw指令的位址不是4的倍數(邊界未對齊)時,下列何者是可能發生的事?
  4. RISC-V的指令「slli t0, a0, 3」的結果,t0會是a0之值的幾倍?(不考慮溢位)
  5. a0存放int型(4位元組)陣列a的起始位址,a1存放索引i。下列何者是上述程式碼讀入a2的內容?