ARM有两类乘法指令:一类为32位的乘法指令,即乘法操作的结果为32位;另一类为64位的乘法指令,即乘法操作的结果为64位。两类指令共有以下6条。

  • MUL:32位乘法指令
  • MLA:32位带加数的乘法指令
  • SMULL:64位有符号数乘法指令
  • SMLAL:64位带加数的有符号数乘法指令
  • UMULL:64位无符号数乘法指令
  • UMLAL:64位带加数的无符号数乘法指令

MUL

MUL指令实现两个32位的数(可以为无符号,也可以为有符号)的乘积,并将结果存放到一个32位的寄存器中,同时可以根据运算结果设置CPSR寄存器中相应的条件标志位。考虑指令执行的效率,指令中所有操作数都存放在寄存器中。

指令的编码格式

指令的语法格式

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

其中:

  • < cond >为指令执行的条件码。当忽略< cond >时,指令为无条件执行。
  • S决定指令的操作是否影响CPSR中的条件标志位N位和Z位的值。当有S时,指令更新CPSR中的条件标志位的值;当没有S时,指令不更新CPSR中的条件标志位的值。
  • < Rd >寄存器为目标寄存器。
  • < Rm >寄存器为第1个乘数所在的寄存器。
  • < Rs >为第2个乘数所在的寄存器。

指令操作的伪代码

if ConditionPass(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 /*See "C flag" note*/ V Flag=unaffected

指令的使用

由于两个32位的数相乘的结果位64位,而MUL指令仅仅保存了64位结果的低32位,所以对于带符号的和无符号的操作数来说,MUL指令执行的结果相同。

对于ARMv5及以上的版本,MULS指令不影响CPSR寄存器中的C条件标志位。对于以前的版本,MULS指令执行后,CPSR寄存器中的C条件标志位数值是不确定的。

寄存器< Rm >、< Rn >及< Rd >为 R15时,指令执行的结果不可预期。

示例

MUL R0, R1, R2 ;R0 = R1 * R2MULS R0, R1, R2 ;R0 = R1 * R2 同时设置CPSR中N位和Z位

无符号有符号乘法_刘帅嵌入式系统-乘法指令相关推荐

  1. 刘帅嵌入式系统-BLX(1)

    第一种格式的BLX指令记作BLX(1),BLX(1)指令从ARM指令集跳转到指定的目标地址,并将程序状态切换为Thumb状态,同时将PC寄存器的内容复制到LR寄存器中. 本指令属于无条件执行的指令(即 ...

  2. 刘帅嵌入式系统-CMN基于相反数的比较指令

    CMN指令将寄存器Rn中的值加上< shifter_operand > 表示的数值,根据操作的结果更新CPSR中相应的条件标志位,后面的指令就可以根据CPSR中相应的条件标志位来判断是否执 ...

  3. 刘帅嵌入式系统-BLX(2)

    第二种格式的BLX指令记作BLX(2).BLX(2)指令从ARM指令集跳转到指定的目标地址,目标地址的指令可以是ARM指令,也可以是Thumb指令.目标地址放在指令中的寄存器中,该地址的bit[0]值 ...

  4. 刘帅嵌入式系统-EOR逻辑异或操作指令

    EOR指令将< shifter_operand > 表示的数值与寄存器< Rn >值按位做逻辑异或操作,并把结果保存到目标寄存器< Rd > 中,同时根据操作的结果 ...

  5. 刘帅嵌入式系统-SUB减法指令

    SUB指令从寄存器< Rn >中减去< shifter_operand > 表示的数值,并把结果保存到目标寄存器< Rd > 中,同时根据操作的结果更新CPSR中相 ...

  6. java蓝桥杯加法变乘法_蓝桥杯-加法变乘法-java

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...

  7. python中怎么用乘法_如何在python中乘法函数?

    def sub3(n): return n - 3 def square(n): return n * n 在python中编写函数非常简单: >>> my_list [0, 1, ...

  8. c语言之无符号/有符号数加减法运算

    c语言之无符号/有符号数加减法运算 转自:http://www.360doc.com/content/12/1129/15/1317564_250977880.shtml 1.加减运算指令是不区分有符 ...

  9. 焊接符号标注图解示例_【干货】焊接图纸符号汇总 ,学习收藏!!

    基本坡口符号 坡口符号 (注:图中"破"应为"坡") 焊接图纸符号标注图解示例 焊接符号标注实例及方法 在焊接结构图样上,焊接方法可按国家标准GB5185-85 ...

最新文章

  1. Java管理Cookie增删改查操作
  2. HttpModule httpHandle 执行顺序
  3. 【报告分享】2021大社交趋势观察报告.pdf(附下载链接)
  4. javascript 经常会用到的东西
  5. mysql mvcc 并发update_关于mysql的InnoDB多版本并发控制(MVCC)与事务隔离级别的疑问?...
  6. Product Key Algorithm
  7. matlab rf建模实例,[程序源代码]MATLAB在射频电路设计中的应用
  8. android 项目交接文档,产品交付规范文档
  9. 串口服务器通讯协议,串口服务器的组成和应用实例
  10. 科来数据包生成器使用方法
  11. Idea 文件定位图标显示与关闭 -- idea ver:2020.1
  12. 如何在Chrome中自定义新标签页
  13. 日了。这个竟然还不让发
  14. 虾皮店铺优化有哪几个要点?
  15. IDEA: 全局搜索 、全局查找
  16. 腾讯6大核心业务打造坚固护城河
  17. k8s学习-CKA考试必过宝典
  18. Intel8086处理器使用NASM汇编语言实现操作系统08-关于负数的相关处理idiv/cbw/cwde/cdqu/cwd/cdq/cdo/
  19. 怎样的婚恋网站,才能符合单身的交友信息呢。
  20. 枚举类 Enum使用

热门文章

  1. OpenCV学习笔记(十七):查找并绘制轮廓:findContours(),drawContours(),approxPolyDP()
  2. OpenCV的数据类型——辅助对象
  3. Smarty模板技术学习
  4. Android之自定义属性
  5. ❤JavaScript系列6部曲:语法篇(万字长文)❤
  6. displaytag 相关
  7. 外设驱动库开发笔记13:MLX90614红外温度传感器驱动
  8. shiro的集群动态权限更新
  9. NSOperationQueue简介
  10. 高并发服务器开源项目,百万级高并发WebRTC流媒体服务器设计与开发(示例代码)...