这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » arm中的饱和指令

共1条 1/1 1 跳转至

arm中的饱和指令

工程师
2012-03-07 23:29:04     打赏
ARMv6 及更高版本中推出了饱和指令:SSAT 和 USAT, SSAT16 和 USAT16,有符号饱和到任何位位置和无符号饱和到任何位位置,可选择在饱和前进行移位。 SSAT 可将有符号值饱和到有符号范围内。 USAT 可将有符号值饱和到无符号范围内。 语法 op{cond} Rd, #sat, Rm{, shift} 其中: 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{cond} 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



关键词: 中的     饱和     指令     符号    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]