跳转到内容

SPARC 汇编/控制流

来自维基教科书,开放的书籍,开放的世界
指令
cmp

比较两个数字(减法)。设置标志位。

指令
tst

测试两个数字(执行“与”操作)。设置标志位。

跳转指令

[编辑 | 编辑源代码]
指令
jmp

跳转到指定的间接地址。将返回值存储在 %o7 中。

指令
jmpl

执行无条件的寄存器间接跳转。目标地址在第一个操作数中提供,然后返回值存储到 rd 操作数中。

jmpl rs1, rd

如果返回值存储在 %o7 中,则此操作类似于子程序调用。如果返回值存储在 %g0 中,则它类似于子程序返回。

指令
sethi

设置目标寄存器的最高 22 位,将最低 10 位设置为零。

sethi const22, rd

const22 必须是常数值,不能是寄存器。

子程序指令

[编辑 | 编辑源代码]
指令
call

调用子程序。以单个标签作为新的目标地址。将返回值存储在 %o7 中。不能跳转到寄存器间接地址。

指令
ret

从子程序返回。

指令
retl

从叶子子程序返回。

指令
rett

从陷阱指令或寄存器间接控制转移返回。

指令
save

保存当前寄存器窗口并创建一个新窗口。如果发生寄存器窗口溢出,则引发异常。

指令
restore

恢复已保存的寄存器窗口。

分支指令

[编辑 | 编辑源代码]

分支不会存储返回值。

指令
ba

始终分支。无条件跳转到目标位置。d

指令
bn

从不分支。

指令
be
指令
bne

如果两个操作数分别相等或不相等,则分支。

指令
bl

在“小于”时分支

指令
ble

在“小于或等于”时分支

指令
bge

在“大于或等于”时分支

指令
bg

在“大于”时分支

指令
blu
指令
bleu

与 bl 和 ble 相同,但使用无符号数

指令
bgeu
指令
bgu

与 bge 和 bg 相同,但使用无符号数

指令
bpos

如果数字为正,则分支。

指令
bneg

如果数字为负,则分支。

指令
bcs
指令
bcc

如果进位位分别设置或清除,则分支。

指令
bvs
指令
bvc

如果带符号溢出位分别设置或清除,则分支。

华夏公益教科书