当前位置:网站首页>ARM指令集之乘法指令
ARM指令集之乘法指令
2022-06-12 11:37:00 【fanxiaoyu321】
ARM有两类乘法指令:一类指令的操作结果为32位,所以叫32位乘法指令;另一类的操作结果位64位,所以叫64位乘法指令。
为了运算高效,乘法指令要求所有操作数都位于寄存器中,所以ARM乘法指令无需指定寻址方式。
ARM共有如下乘法指令:
| 助记符 | 说明 | 实现逻辑 |
|---|---|---|
| MUL | 32位乘法指令 | Rd = Rm * Rs |
| MLA | 32位带加数的乘法指令 | Rd = Rm * Rs + Rn |
| SMULL | 64位有符号数乘法指令 | RdHi = (Rm * Rs)[63:32]; RdLo = (Rm * Rs)[31:0]; |
| SMLAL | 64位带加数的有符号数乘法指令 | RdLo = (Rm * Rs)[31:0] + RdLo; RdHi = (Rm * Rs)[63:32] + RdHi + CarryFrom((Rm * Rs)[31:0] + RdLo); |
| UMULL | 64位无符号数乘法指令 | RdHi = (Rm * Rs)[63:32]; RdLo = (Rm * Rs)[31:0]; |
| UMLAL | 64位带加数的无符号数乘法指令 | RdLo = (Rm * Rs)[31:0] + RdLo; RdHi = (Rm * Rs)[63:32] + RdHi + CarryFrom((Rm * Rs)[31:0] + RdLo); |
MUL
MUL{<cond>}{S} <Rd>, <Rm>, <Rs>
if ConditionPassed(cond) then
Rd = (Rm * Rs)[31:0]
if S == 1 then
N Flag = Rd[31]
Z Flag = if Rd == 0 then 1 else 0
C Flag = unaffected
V Flag = unaffected
MLA
MLA{<cond>}{S} <Rd>, <Rm>, <Rs>, <Rn>
if ConditionPassed(cond) then
Rd = (Rm * Rs + Rn)[31:0]
if S == 1 then
N Flag = Rd[31]
Z Flag = if Rd == 0 then 1 else 0
C Flag = unaffected
V Flag = unaffected
SMULL
SMULL{<cond>}{S} <RdLo>, <RdHi>, <Rm>, <Rs>, <Rn>
if ConditionPassed(cond) then
RdHi = (Rm * Rs)[63:32] // 计算结果的高32位
RdLo = (Rm * Rs)[31:0] // 计算结果的低32位
if S == 1 then
N Flag = RdHi[31]
Z Flag = if RdHi == 0 and RdLo == 0 then 1 else 0
C Flag = unaffected
V Flag = unaffected
SMLAL
SMLAL{<cond>}{S} <RdLo>, <RdHi>, <Rm>, <Rs>, <Rn>
if ConditionPassed(cond) then
RdLo = (Rm * Rs)[31:0] + RdLo
RdHi = (Rm * Rs)[63:32] + RdHi + CarryFrom((Rm * Rs)[31:0] + RdLo)
if S == 1 then
N Flag = RdHi[31]
Z Flag = if RdHi == 0 and RdLo == 0 then 1 else 0
C Flag = unaffected
V Flag = unaffected
UMULL
UMULL{<cond>}{S} <RdLo>, <RdHi>, <Rm>, <Rs>, <Rn>
if ConditionPassed(cond) then
RdHi = (Rm * Rs)[63:32]
RdLo = (Rm * Rs)[31:0]
if S == 1 then
N Flag = RdHi[31]
Z Flag = if RdHi == 0 and RdLo == 0 then 1 else 0
C Flag = unaffected
V Flag = unaffected
UMLAL
UMLAL{<cond>}{S} <RdLo>, <RdHi>, <Rm>, <Rs>, <Rn>
if ConditionPassed(cond) then
RdLo = (Rm * Rs)[31:0] + RdLo
RdHi = (Rm * Rs)[63:32] + RdHi + CarryFrom((Rm * Rs)[31:0] + RdLo)
if S == 1 then
N Flag = RdHi[31]
Z Flag = if RdHi == 0 and RdLo == 0 then 1 else 0
C Flag = unaffected
V Flag = unaffected
边栏推荐
- 6.6 separate convolution
- 如何查看glibc版本
- Les humains veulent de l'argent, du pouvoir, de la beauté, de l'immortalité, du bonheur... Mais les tortues ne veulent être qu'une tortue.
- MySQL锁查漏补缺
- B.刷墙(C语言)
- MySQL45讲 01 | 基础架构:一条SQL查询语句是如何执行的?
- 你需要社交媒体二维码的21个理由
- Socket Programming TCP
- When you have a server
- K53. Chapter 2 installing kubernetes v1.22 based on binary packages -- cluster deployment
猜你喜欢

Manuscript manuscript format preparation

字节序 - 如何判断大端小端

多普勒效应的基本原理

SOT23(Small Outline Transistor)

【藍橋杯單片機 國賽 第十一届】

VirtualBox 虚拟机因系统异常关机虚拟机启动项不见了

Lambda and filter, index of list and numpy array, as well as various distance metrics, concatenated array and distinction between axis=0 and axis=1

Problems in cross validation code of 10% discount

redis 總結

C# 35. 选择默认网卡
随机推荐
systemctl里万恶的203
Summary of rosbridge use cases_ Chapter 26 opening multiple rosbridge service listening ports on the same server
ioremap
6.6 分離卷積
FormatConversionTool. exe
C# 35. 选择默认网卡
Deep learning and CV tutorial (14) | image segmentation (FCN, segnet, u-net, pspnet, deeplab, refinenet)
Basic principle of Doppler effect
ARM指令集之批量Load/Store指令
【数据库】sqlite版本升级、降级
Socket implements TCP communication flow
ARM指令集之Load/Store指令寻址方式(二)
rosbridge使用案例心得总结之_第26篇在同一个服务器上打开多个rosbridge服务监听端口
Clickhouse column basic data type description
套接字编程Udp篇
Differences among various cross compiling tools of arm
文件夹目录结构自动生成
NVIDIA Jetson Nano Developer Kit 入门
Construction and construction of meta Universe System
C# 37. textbox滚动条与多行