【ARM】ARM其它指令
00. 目錄
文章目錄
- 00. 目錄
- 01. 特殊指令介紹
- 02. CLZ 計算前導零數目
- 03. 飽和指令介紹
- 04. 附錄
01. 特殊指令介紹
Fmxr /Fmrx 指令是 NEON 下的擴展指令,在做浮點運算的時候,要先打開 vfp,因此需要用到 Fmxr 指令。
Fmxr:由 arm 寄存器將數據轉移到協處理器中。
Fmrx:由協處理器轉移到 arm 寄存器中。
如圖下圖所示為浮點異常寄存器格式。
如表 3-16 所示為 FPEXC 的位定義。
FPEXC<浮點異常寄存器>,該寄存器是一個可控制 SIMD 及 VFP 的全局使能寄存器,并指定了這些擴展技術是如何記錄的。
如果要打開 VFP 協處理器的話,可以用以下指令:
mov r0, #0x40000000 fmxr fpexc, r0 @ enable NEON and VFP coprocessor02. 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,r9 QSUBLT r9,r0,r104. 附錄
11.1 ARM Architecture Reference Manual
總結
以上是生活随笔為你收集整理的【ARM】ARM其它指令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【ARM】异常产生指令
- 下一篇: 【ARM】ARM汇编程序设计(一)