日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【ARM】乘法指令

發布時間:2024/4/24 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【ARM】乘法指令 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

00. 目錄

文章目錄

    • 00. 目錄
    • 01. 乘法指令概述
    • 02. MUL 指令
    • 03. MLA 指令
    • 04. UMULL 指令
    • 05. UMLAL 指令
    • 06. SMULL 指令
    • 07. SMLAL 指令
    • 08. 附錄

01. 乘法指令概述

ARM 乘法指令完成兩個數據的乘法。兩個 32 位二進制數相乘的結果是 64 位的積。在有些 ARM 的處理器版本中,將乘積的結果保存到兩個獨立的寄存器中。另外一些版本只將最低有效 32 位存放到一個寄存器中。無論是哪種版本的處理器,都有乘—累加的變型指令,將乘積連續累加得到總和。而且有符號數和無符號數都能使用。對于有符號數和無符號數,結果的最低有效位是一樣的。因此,對于只保留 32 位結果的乘法指令,不需要區分有符號數和無符號數這兩種情況。

如表 3-7 所示為各種形式乘法指令的功能。

其中:
(1)“RdHi:RdLo”是由 RdHi(最高有效 32 位)和 RdLo(最低有效 32 位)連接形成的 64 位數,“[31:0]”只選取結果的最低有效 32 位。
(2)簡單的賦值由“:=”表示。
(3)累加(將右邊加到左邊)是由“+ =”表示。

各個乘法指令中的位 S(參考下文具體指令的語法格式)控制條件碼的設置會產生以下結果。
① 對于產生 32 位結果的指令形式,將標志位 N 設置為 Rd 的第 31 位的值;對于產生長結果的指令形式,將其設置為 RdHi 的第 31 位的值。
② 對于產生 32 位結果的指令形式,如果 Rd 等于零,則標志位 Z 置位;對于產生長結果的指令形式,RdHi 和 RdLo 同時為零時,標志位 Z 置位。
③ 將標志位 C 設置成無意義的值。
④ 標志位 V 不變。

02. MUL 指令

MUL(Multiply)32 位乘法指令將 Rm 和 Rs 中的值相乘,結果的最低 32 位保存到 Rd 中。

2.1 指令的語法格式

MUL{<cond>}{S} <Rd>,<Rm>,<Rs>

2.2 應用示例一

@ R1 = R2 × R3。 MUL R1, R2, R3

2.3 應用示例二

@ R0 = R3 × R7,同時設置 CPSR 中的 N 位和 Z 位。 MULS R0, R3, R7

03. MLA 指令

MLA(Multiply Accumulate)32 位乘—累加指令將 Rm 和 Rs 中的值相乘,再將乘積加上第 3 個操作數,結果的最低 32 位保存到 Rd 中。

3.1 指令的語法格式

MLA{<cond>}{S} <Rd>,<Rm>,<Rs>,<Rn>

3.2 應用示例一

@ 完成 R1 = R2×R3 + 10 的操作。 MOV R0, #0x0A MLA R1, R2, R3, R0

04. UMULL 指令

UMULL(Unsigned Multiply Long)為 64 位無符號乘法指令。它將 Rm 和 Rs 中的值做無符號數相乘,結果的低 32 位保存到 RsLo 中,高 32 位保存到 RdHi 中。

4.1 指令的語法格式:

UMULL{<cond>}{S} <RdLo>,<RdHi>,<Rm>,<Rs>

4.2 應用示例一

@ 下面的指令完成(R1,R0) = R5 × R8 操作。 UMULL R0, R1, R5, R8;

05. UMLAL 指令

UMLAL(Unsigned Multiply Accumulate Long)為 64 位無符號長乘—累加指令。指令將 Rm 和 Rs 中的值做無符號數相乘,64 位乘積與 RdHi、RdLo 相加,結果的低 32 位保存到 RsLo 中,高 32 位保存到 RdHi 中。

5.1 指令語法格式

UMALL{<cond>}{S} <RdLo>,<RdHi>,<Rm>,<Rs>

5.2 應用示例一

@ 下面的指令完成(R1,R0) = R5 × R8+(R1,R0)操作。 UMLAL R0, R1, R5,R8;

06. SMULL 指令

SMULL(Signed Multiply Long)為 64 位有符號長乘法指令。指令將 Rm 和 Rs 中的值做有符號數相乘,結果的低 32 位保存到 RsLo 中,高 32 位保存到 RdHi 中。

6.1 指令的語法格式

SMULL{<cond>}{S} <RdLo>,<RdHi>,<Rm>,<Rs>

6.2 應用示例一

@ 下面的指令完成(R3,R2) = R7 × R6 操作。 SMULL R2, R3, R7,R6;

07. SMLAL 指令

SMLAL(Signed Multiply Accumulate Long)為 64 位有符號長乘—累加指令。指令將Rm 和 Rs 中的值做有符號數相乘,64 位乘積與 RdHi、RdLo 相加,結果的低 32 位保存到RsLo 中,高 32 位保存到 RdHi 中。

7.1 指令的語法格式

SMLAL{<cond>}{S} <RdLo>,<RdHi>,<Rm>,<Rs>

7.2 應用示例一

@ 下面的指令完成(R3,R2) = R7 × R6 +(R3,R2)操作。 SMLAL R2, R3, R7,R6;

08. 附錄

11.1 ARM Architecture Reference Manual

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的【ARM】乘法指令的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。