【ARM】ARM其它指令
发布日期:2021-06-29 20:47:49 浏览次数:2 分类:技术文章

本文共 1242 字,大约阅读时间需要 4 分钟。

00. 目录

文章目录

01. 特殊指令介绍

Fmxr /Fmrx 指令是 NEON 下的扩展指令,在做浮点运算的时候,要先打开 vfp,因此需要用到 Fmxr 指令。

Fmxr:由 arm 寄存器将数据转移到协处理器中。
Fmrx:由协处理器转移到 arm 寄存器中。
如图下图所示为浮点异常寄存器格式。
在这里插入图片描述

如表 3-16 所示为 FPEXC 的位定义。

在这里插入图片描述

FPEXC<浮点异常寄存器>,该寄存器是一个可控制 SIMD 及 VFP 的全局使能寄存器,并指定了这些扩展技术是如何记录的。

如果要打开 VFP 协处理器的话,可以用以下指令:

mov r0, #0x40000000fmxr fpexc, r0 @ enable NEON and VFP coprocessor

02. CLZ 计算前导零数目

语法格式:

CLZ {cond} Rd,Rm@ 其中:@  cond 是一个可选的条件代码。@  Rd 是目标寄存器。@  Rm 是操作数寄存器。

用法:

​ CLZ 指令对 Rm 中的值的前导零进行计数,并将结果返回到 Rd 中,如果未在源寄存器中设置任何位,则该结果值为 32,如果设置了位 31,则结果值为 0。

条件标记:

​ 该指令不会更改标记。

体系结构

​ ARMv5 以上。

示例如图 3-6 所示。

在这里插入图片描述

03. 饱和指令介绍

这是用来设计饱和算法的一组指令,所谓饱和是指出现下列 3 种情况:

(1)对于有符号饱和运算,如果结果小于-2^n ,则返回结果将为-2^n 。
(2)对于无符号饱和运算,如果整数结果是负值,那么返回的结果将为 0。
(3)对于结果大于 2^n -1 的情况,则返回结果将为 2^n -1。
只要出现这情况,就称为饱和,并且饱和指令会设置 Q 标记,下面简单介绍一下 QADD带符号加法。
QSUB:带符号减法。
QDADD:带符号加倍加法。
QDSUB:带符号加倍减法。
将结果饱和导入符号范围(-2^31 ≤x≤2^31 -1)内。

语法格式:

op{cond} {Rd} ,Rm,Rn

其中:

q op 是 QADD、QSUB、QDADD、QDSUB 之一。
q cond 是一个可选的条件代码。
q Rd 是目标寄存器。
q Rm、Rn 是存放操作数的寄存器(注:不要将 r15 用作 Rd、Rm 或 Rn)。

用法如下:

q QADD 指令可将 Rm 和 Rn 中的值相加。
q QSUB 指令可从 Rm 中的值减去 Rn 中的值。
q QDADD/QDSUB 指令涉及并行指令,因此这里不多做讨论。

条件标记:

如果发生饱和,则这些指令设置 Q 标记,若要读取 Q 标记的状态,需要使用 MRS 指令。

体系结构:

​ 该指令可用于 v5T-E 及 v6 或者更高版本的体系中。

程序示例:

QADD r0 ,r1,r9QSUBLT r9,r0,r1

04. 附录

11.1 ARM Architecture Reference Manual

转载地址:https://dengjin.blog.csdn.net/article/details/106853716 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【ARM】ARM汇编程序设计(一)
下一篇:【ARM】异常产生指令

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月24日 17时35分27秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章