跳轉到內容

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
華夏公益教科書