指令集與組合語言
記憶體上的1個位元組存放著0x80。以RISC-V的lb指令與lbu指令將此位元組載入32位元暫存器時,下列何者是兩者的值的正確組合?
- Alb為0x00000080(128),lbu為0xFFFFFF80(-128)
- Blb為0xFFFFFF80(-128),lbu為0x00000080(128)
- C兩者都是0x00000080(128)
查看答案與解析
正確答案:B. lb為0xFFFFFF80(-128),lbu為0x00000080(128)
lb(load byte)將讀入的1個位元組視為有號數,把最高位元複製到高24位元(符號擴充)。0x80的最高位元為1,所以是0xFFFFFF80,也就是-128。lbu(load byte unsigned)則以0填補高位(零擴充),所以是128。在C語言中讀取signed char與unsigned char時,編譯器會分別使用這兩個指令。
- A. u是unsigned(無號)的意思,這樣說反了。
- B. 正確。lb做符號擴充,lbu做零擴充。
- C. lb會把最高位元的1往上擴展。