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