指令集架構(ISA)

載入與儲存指令

載入與儲存指令是處理器伸在快速工作檯與大倉庫之間的雙手。暫存器是一張極小、快得發燙的工作檯,只放得下少數幾個值;主記憶體則是巨大但較慢的倉庫,存著其餘的一切。載入把一個值從記憶體取出、在工作檯上放一份副本(放進某個暫存器);儲存則把工作檯上的一個值寫回記憶體。沒有任何有用的計算是直接在記憶體裡完成的——你取出、你做事、你放回去。

載入指令指名一個目的暫存器和一個記憶體位址;儲存指令指名一個來源暫存器和一個記憶體位址。位址通常由一個基底暫存器加上一個小常數位移構成,這非常適合逐一走訪結構與陣列。在 RISC-V 中,「lw x5, 8(x10)」的意思是:取 x10 裡的位址、加 8、讀取記憶體中該位置的那個字組、放進 x5。對應的「sw x5, 8(x10)」則把 x5 裡的值寫回同一個記憶體位置。括號裡的數字是位移;括號裡的暫存器是基底。

在載入-儲存架構中,這是唯一獲准碰記憶體的指令——這是一個刻意而重要的限制。因為記憶體比暫存器慢得多,把記憶體存取隔離成只有兩種指令型別,使機器其餘部分更簡單也更快,並讓「碰記憶體的代價」在程式中變得看得見。初學者常見的驚訝:像「a = b + c」這樣一行原始碼,可能編譯成:載入 b、載入 c、加法、儲存 a——四條指令,因為這些變數其實住在記憶體裡。

若要把存在記憶體位址 x10 處的計數器加一:「lw x5, 0(x10)」把它載入暫存器,「addi x5, x5, 1」在暫存器中加一,「sw x5, 0(x10)」再把新值存回去。加法只能在暫存器中發生,所以前後各用一條載入與儲存把它夾住。

載入進來、在暫存器中計算、再存回去——這是更新「住在記憶體裡」的值的唯一途徑。

載入是「複製」資料,不是「搬移」。載入之後,該值同時存在於暫存器與記憶體中,直到某次儲存覆寫了其中之一。忘記把改動過的值存回去,是一個典型的錯誤。

又稱
memory access instructionsloadstorelw / sw資料傳輸指令載入指令儲存指令