指令集與組合語言
在RISC-V中,當讀取4個位元組的lw指令的位址不是4的倍數(邊界未對齊)時,下列何者是可能發生的事?
- A指令會自動被改讀為下一個4的倍數的位址,永遠以相同的速度正確讀取
- B依CPU的實作,可能發生例外,或是由硬體或軟體處理而變得非常慢
- C位址的低2位元會被忽略,不會產生錯誤
查看答案與解析
正確答案:B. 依CPU的實作,可能發生例外,或是由硬體或軟體處理而變得非常慢
若將4位元組的資料放在4的倍數的位址,一次記憶體存取就能讀取。跨越邊界則需要兩次存取,因此RISC-V將邊界錯位的存取,是以電路處理,還是引發例外交給軟體處理,委由實作決定。若是後者,會慢上好幾個數量級。編譯器會在結構成員之間加入填充(padding)來對齊,就是這個緣故。
- A. 不會擅自改讀位址。
- B. 正確。ISA允許實作採取其中任一種做法。
- C. 若忽略,就會讀到別的地方。