指令集與組合語言

記憶體上的1個位元組存放著0x80。以RISC-V的lb指令與lbu指令將此位元組載入32位元暫存器時,下列何者是兩者的值的正確組合?

  1. Alb為0x00000080(128),lbu為0xFFFFFF80(-128)
  2. Blb為0xFFFFFF80(-128),lbu為0x00000080(128)
  3. 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往上擴展。
練習這個領域 前往領域頁面

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

  1. 關於條件分支的機制,下列何者是RISC-V與x86的差異?
  2. 下列何者是RISC-V指令「slt t0, a0, a1」的動作?
  3. 執行完上述RISC-V程式碼時,t0的值是多少?
  4. RISC-V的條件分支指令(B格式)以13位元帶正負號的位元組數表示到分支目標的距離,其最低位元永遠為0,不放入指令中。下列何者大致是分支指令可直接到達的範圍?
  5. 下列何者是RISC-V指令「jal ra, func」的動作?