跳轉到內容

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

如果帶符號溢位位分別設定或清除,則分支。

華夏公益教科書