armv6 及更高版本中推出了飽和指令:ssat 和 usat, ssat16 和 usat16
有符號飽和到任何位位置和無符號飽和到任何位位置,可選擇在飽和前進行移位。
ssat
可將有符號值飽和到有符號範圍內。
usat
可將有符號值飽和到無符號範圍內。
語法
其中:op
rd
, #sat
,rm
op
是ssat
或usat
。
cond
是乙個可選的條件**(請參閱條件執行
)。rd
是目標暫存器。rd
不能為 r15。
sat
指定要飽和到的位位置,ssat
的範圍在 1 到 32 之間,usat
的範圍在 0 到 31 之間。
rm
是包含運算元的暫存器。rm
不能為 r15。
shift
是乙個可選的移位。 必須為下列項之一:
asr #n
其中,n
的範圍為 1-32 (arm) 或 1-31 (thumb-2)
lsl #n
其中,n
的範圍為 0-31。
操作ssat
指令會先進行指定的移位,然後將結果飽和到有符號範圍 –2sat–1 ≤x
≤ 2sat–1 –1。
usat
指令會先進行指定的移位,然後將結果飽和到無符號範圍 0 ≤x
≤ 2sat – 1。
條件標記
如果發生飽和,則這些指令設定 q 標記。 若要讀取 q 標記的狀態,請使用mrs
指令(請參閱mrs
)。體系結構
這些 arm 指令可用於 armv6 及更高版本。
這些 32 位 thumb 指令可用於 armv6t2 及更高版本。
這些指令均無 16 位 thumb 版本。
示例
ssat r7, #16, r7, lsl #4 usatne r0, #7, r5
ssat16 和 usat16
並行半字飽和指令。
ssat16
可將有符號值飽和到有符號範圍內。
usat16
可將有符號值飽和到無符號範圍內。
語法
其中:op
rd
, #sat
,rn
op
是下列項之一:
ssat16
有符號飽和。
usat16
無符號飽和。
cond
是乙個可選的條件**(請參閱條件執行
)。rd
是目標暫存器。
sat
指定要飽和到的位位置,ssat16
的範圍在 1 到 16 之間,usat16
的範圍在 0 到 15 之間。
rn
是存放運算元的暫存器。
不要將 r15 用作rd
或rn
。操作
有符號和無符號半字飽和任何位位置。
ssat16
指令可將每個有符號半字飽和到有符號範圍 –2sat–1 ≤x
≤ 2sat–1 –1 內。
usat16
指令可將每個有符號半字飽和到無符號範圍 0 ≤x
≤ 2sat –1 內。
條件標記
只要有半字發生飽和,這些指令就會設定 q 標記。 若要讀取 q 標記的狀態,請使用mrs
指令(請參閱mrs
)。體系結構
這些 arm 指令可用於 armv6 及更高版本。
這些 32 位 thumb 指令可用於 armv6t2 及更高版本(armv7-m 架構除外)。
這些指令均無 16 位 thumb 版本。
示例
ssat16 r7, #12, r7 usat16 r0, #7, r5
不正確的示例
ssat16 r1, #16, r2, lsl #4 ; shifts not permitted with halfword saturations
arm中的飽和指令
armv6 及更高版本中推出了飽和指令 ssat 和 usat,ssat16 和 usat16 有符號飽和到任何位位置和無符號飽和到任何位位置,可選擇在飽和前進行移位。ssat可將有符號值飽和到有符號範圍內。usat可將有符號值飽和到無符號範圍內。語法 oprd,sat,rm其中 op 是ssat或...
ARM中的STM LDM指令
stm ldm是批量傳輸資料的指令,這裡要說明的是 15 0 register list代表了16個暫存器,傳輸資料的時候r15始終是最後傳輸的,按照從r0到r15的順序,r15始終在高位址。遞增傳輸倒好理解,關鍵是遞減傳輸,2440的datasheet令我費解,看看datasheet裡的一張圖 假...
ARM中的跳轉指令
arm中的跳轉指令 arm中b bl bx blx指令的區別 用於實現程式流程的跳轉,在arm程式中有兩種方法可以實現程式流程的跳 使用專門的跳轉指令 直接向程式計數器pc寫入跳轉位址值 通過向程式計數器pc寫入跳轉位址值,可以實現在4gb的位址空間中的任意跳轉,在跳轉之前結合使用 mov lr,p...