arm中的飽和指令

2022-01-09 23:42:52 字數 2473 閱讀 7916

armv6 及更高版本中推出了飽和指令:ssat 和 usat, ssat16 和 usat16

有符號飽和到任何位位置和無符號飽和到任何位位置,可選擇在飽和前進行移位。

ssat可將有符號值飽和到有符號範圍內。

usat可將有符號值飽和到無符號範圍內。

語法

oprd, #sat,rm
其中:

op

ssatusat

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可將有符號值飽和到無符號範圍內。

語法

oprd, #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...