SPARC 彙編/記憶體指令
外觀
< SPARC 彙編
這是一個關於如何編寫這些記憶體指令的簡要入門。
記憶體指令從記憶體中載入值,或將值儲存到記憶體中。目標地址計算為基值加上可選偏移值的總和。
例如
ld [%r4 + 10], %r5
將暫存器 %r5 載入為記憶體中位於 [%r4 + 10] 的值。如果 %r4 包含數字 25,則讀取的記憶體位置將是 [25 + 10] = 35。op2 引數,與算術指令一樣,可以是暫存器或立即數。這意味著以下兩者都是有效的
ld [%r4 + %r3], %r5
ld [%r4 + 100], %r5
偏移值是以位元組為單位的偏移量,而不是以機器字或半字為單位的偏移量。這意味著要在 32 位機器上載入連續的字,偏移量需要遞增 4
ld [%r4 + 4], %r5 ld [%r4 + 8], %r6 ...
此外,偏移值是可選的。如果省略偏移量,彙編程式將假定值為 0。例如
ld [%r4], %r5
將從位置 %r4 讀取,沒有偏移量。
儲存指令類似於載入指令,除了運算元顛倒了。這意味著我們有以下指令格式
st rd, [rs1 + op2]
所有其他上述內容都適用。
指令
|
ldub
|
從記憶體中載入無符號位元組到 rd。
指令
|
ldsb
|
從記憶體中載入帶符號位元組到 rd。符號擴充套件結果。
指令
|
lduh
|
從記憶體中載入無符號半字到 rd。
指令
|
ldsh
|
從記憶體中載入帶符號半字到 rd。符號擴充套件結果。
指令
|
ld
|
將機器字載入到 rd。
指令
|
ldd
|
將雙字載入到 2 個連續暫存器。
指令
|
stb
|
將暫存器 rd 中的位元組儲存到記憶體。
指令
|
sth
|
將暫存器 rd 中的半字儲存到記憶體。
指令
|
st
|
將暫存器 rd 中的機器字儲存到記憶體。
指令
|
std
|
將兩個連續暫存器中的雙值儲存到記憶體。
指令
|
swap
|
執行同時載入和儲存操作,它有效地交換了記憶體中的值與 rd 中的值。格式像載入指令,例如
swap [%r3 + 4], %r5