指令集與組合語言

a0存放int型(4位元組)陣列a的起始位址,a1存放索引i。下列何者是上述程式碼讀入a2的內容?

slli t0, a1, 2
add  t0, a0, t0
lw   a2, 0(t0)
  1. Aa[4*i]的值
  2. Ba[i]的位址
  3. Ca[i]的值
查看答案與解析

正確答案:C. a[i]的值

第1行將i左移2位元以得到4×i,第2行加到陣列的起始位址以求得a[i]的位址,第3行從該位址讀取4個位元組。int型每個元素為4位元組,所以第i個元素位於距起始處4×i位元組之處。C語言的「a[i]」會由編譯器翻譯成這樣的位址計算與載入。

  • A. 位址在4×i位元組之後,那就是第i個元素。
  • B. 最後的lw讀取的是值。
  • C. 正確。從起始位址+4×i的位址讀取。
練習這個領域 前往領域頁面

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

  1. 關於x86的「add eax, [rbx]」這種運算指令可以直接使用記憶體上的值的方式,下列何者正確?
  2. 下列何者是對現在的高效能x86 CPU在內部如何執行複雜指令的正確說明?
  3. 下列何者是RISC-V的M擴充加到基本整數指令集的指令?
  4. 下列何者是RISC-V的C擴充(壓縮指令)的主要目的?
  5. 針對沒有M擴充的RV32I CPU,編譯C語言的「a * b」(int與int相乘)時,一般會變成什麼?