指令集與組合語言

在RISC-V中,當讀取4個位元組的lw指令的位址不是4的倍數(邊界未對齊)時,下列何者是可能發生的事?

  1. A指令會自動被改讀為下一個4的倍數的位址,永遠以相同的速度正確讀取
  2. B依CPU的實作,可能發生例外,或是由硬體或軟體處理而變得非常慢
  3. C位址的低2位元會被忽略,不會產生錯誤
查看答案與解析

正確答案:B. 依CPU的實作,可能發生例外,或是由硬體或軟體處理而變得非常慢

若將4位元組的資料放在4的倍數的位址,一次記憶體存取就能讀取。跨越邊界則需要兩次存取,因此RISC-V將邊界錯位的存取,是以電路處理,還是引發例外交給軟體處理,委由實作決定。若是後者,會慢上好幾個數量級。編譯器會在結構成員之間加入填充(padding)來對齊,就是這個緣故。

  • A. 不會擅自改讀位址。
  • B. 正確。ISA允許實作採取其中任一種做法。
  • C. 若忽略,就會讀到別的地方。
練習這個領域 前往領域頁面

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

  1. RISC-V的指令「slli t0, a0, 3」的結果,t0會是a0之值的幾倍?(不考慮溢位)
  2. a0存放int型(4位元組)陣列a的起始位址,a1存放索引i。下列何者是上述程式碼讀入a2的內容?
  3. 關於x86的「add eax, [rbx]」這種運算指令可以直接使用記憶體上的值的方式,下列何者正確?
  4. 下列何者是對現在的高效能x86 CPU在內部如何執行複雜指令的正確說明?
  5. 下列何者是RISC-V的M擴充加到基本整數指令集的指令?