历史上的今天
返回首页

历史上的今天

今天是:2025年02月17日(星期一)

正在发生

2020年02月17日 | ARM指令集----杂项指令

2020-02-17 来源:eefocus

ARM指令集可以分为6类,即是跳转指令,数据处理指令,程序状态传输指令,Load、Store指令,协处理器指令和异常中断指令


跳转指令:


在ARM中有两种方式可以实现程序的跳转,一种是跳转指令,另一种是直接向PC寄存器写入目标地址的值


通过直接向PC寄存器写入目标寄存器的数字可以实现在4GB 地址空间的任意跳转,这种跳转又称为长跳转,如果在残肢令前面使用MOV LR,PC等指令,可以保存返回来的地址值,这样就实现了在4GB空间中的子程序调用



ARM的跳转指令可以从当前指令向前或者是向后的32位的地址进行空间跳转,这类跳转指令有一下4种


B 跳转指令


BL带换回的跳转指令


BLX 带返回的跳转和切换指令


BX 带状态切换的跳转指令


 


B和BL的区别在于,L决定是否将PC寄存器的数字保存到LR寄存器中,


BL指令用于实现子程序的调用,子程序的返回地址可以将LR寄存器的值复制到PC寄存器来实现


 


数据处理指令


数据处理指令包括如下指令


  MOV  数据传送指令 


  MVN  数据求反传送指令:MVN指令有以下用途:先寄存器传递一个负数,生成位的掩码,求一个数的反码


  CMP   比较指令:


  CMN  基于相反数的比较指令


  TST  位测试指令 :TST指令通常是用于测试寄存器中某些位是1还是0


  TEQ  测试相等指令:TEQ用来比较两个数是否相等ORR指令


  ADD 加法指令 :典型应用ADD RX,RX,#1         // RX = RX+1 


              ADD RD,RX,lSL#n     //RX= RX+RX*(2*n)


              ADD RS,PC,#oFFSET //生成基于PC的跳转指令


  SUB 减法指令 典型用法:SUB RX,RX,#1           // Rx= Rx-1



  RSB 逆向减法指令 :逆向减法指令,RSB RD,RX,#0,  //RD = -Rx


  ADC 带进位加法指令  :带进位的加法指令,用于实现64位+64位的加法操作


  SBC 带进位减法指令  :带进位的加法指令,用于实现64位+64位的减法操作


  RSC 带逆向减法指令 :带进位的逆向相减指令


  AND 逻辑与操作 :AND指令可以用于提取寄存器的某些位的值,具体做法是设置一个掩码值,将该值中的对应寄存器欲提取的位设置为1,其余的设置成0,将该寄存器与上该掩码值就可以得到提取的位操作


  BIC 位清除指令:BIC指令可以用于寄存器的某些位的值设置为0,将某些与1做BIC操作,该位被轻微0,将某些位与 0 操作,该位置不变


  EOR 逻辑异或指令:某位与0做异或操作,该位不变,某位与1做异或操作,该位取反


  ORR 逻辑或操作指令:ORR指令主要是用于将寄存器的某些位设置成1,具体做法是设置一个掩码值,将该寄存器中与提取的位设置为1,其他的位设置为0,将该寄存器的值与该掩码值做逻辑或操作即可


 

乘法指令:


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


    MUL 32位乘法指令


    MLA 32位带加法的的乘法指令


    SMULL 64位有符号乘法指令


    SMLAL 64位有符号带加法的乘法指令


    UMULL 64位无符号乘法指令


    UMLAL 64位无符号带加法乘法指令

 


示例代码:

   

MUL:

    MUL R0,R1,R2 ;R0 = R1*R2

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



    MLA:

    MLA R0,R1,R2,R3  R0=R1*R2+R3

    


    SMULL:

    SMULL R1,R2,R3,R4 ;R1 = R3*R4 的低32位

               R2= R3*R4的高32位

    UMULL

    UMULL R1,R2,R3,R4 ;R1 = R3*R4 的低32位


                R2= R3*R4的高32位 也就是说R2R1 = R3*R4


    UMLAL R1,R2,R3,R4 ;R2R1 = R3*R4+R2R1

 


杂项算术指令


CLZ 用于计算操作数最高端0的个数,这条指令主要用于一下两个场合


  计算操作数规范化(使其最高位为1)时需要左移的位数


  确定一个优先级掩码中最高优先级



CLZ指令用于计算寄存器中操作数的最高位0的个数,如果操作数的bit[31]为1,则返回0,如果操作数为0 ,则指令返回32

推荐阅读

史海拾趣

CAROLCABLE公司的发展小趣事

CAROLCABLE公司的创立,标志着电子线缆行业迎来了一位新的竞争者。在电子科技飞速发展的时代背景下,创始人凭借对线缆技术的深刻理解和市场需求的敏锐洞察,决定创立CAROLCABLE公司。公司初期,面临着资金短缺、技术瓶颈和市场认知度低等多重挑战。然而,创始人凭借着坚定的信念和不懈的努力,带领团队克服了一个又一个困难。他们积极研发新产品,优化生产工艺,提高产品质量,逐渐在市场上站稳了脚跟。

随着公司业务的不断拓展,CAROLCABLE开始与一些知名的电子企业建立合作关系,为其提供高质量的线缆产品。这些合作不仅为公司带来了稳定的订单和收入,也进一步提升了CAROLCABLE在行业内的知名度和影响力。

Elite公司的发展小趣事

Elite公司成立于20世纪90年代末,由一群热衷于电子技术的年轻人创立。在初创阶段,Elite面临着资金短缺、市场竞争激烈的挑战。然而,公司凭借其独特的创新理念和过硬的技术实力,成功研发出一款具有高性价比的智能手机,迅速在市场上获得认可。这款产品不仅帮助Elite实现了初步盈利,更为公司后续发展奠定了坚实基础。

GarrettCom公司的发展小趣事

研发:GarrettCom(现为Belden的一部分)始终将技术创新作为企业发展的核心驱动力。公司不断投入研发资源,致力于开发更加先进、可靠的工业网络通信产品。通过持续的技术创新,GarrettCom不仅推动了工业通信技术的进步,还为客户提供了更加高效、便捷的通信解决方案。

应用:这些创新产品被广泛应用于工业自动化、交通监控、能源管理等多个领域,为客户创造了巨大的价值。同时,GarrettCom还积极参与国际标准的制定和推广工作,为行业的标准化发展做出了积极贡献。

Bridgelux公司的发展小趣事

XXXX年,中国电子信息产业集团公司(CEC)和重庆临空开发投资公司牵头收购了Bridgelux。这次收购为Bridgelux带来了强大的资本支持和市场资源,使其得以进一步扩大生产规模,提升研发能力。在CEC和重庆临空的支持下,Bridgelux在全球范围内的市场份额逐步提升,品牌影响力不断增强。

ADTech公司的发展小趣事

AdTech公司深知人才是企业发展的核心动力。因此,公司一直致力于培养和引进高素质的人才,打造了一支具有丰富经验和专业技能的团队。公司通过提供良好的工作环境和福利待遇,吸引了一批优秀的研发、市场和管理人才。同时,公司还注重员工的培训和成长,为员工的职业发展提供了广阔的空间。这些措施使得公司的团队更加稳定和高效,为公司的持续发展提供了有力保障。

艾华集团(AISHI)公司的发展小趣事

在科技创新的推动下,艾华集团的产品逐渐在国内外市场上崭露头角。公司不仅在国内市场上取得了显著成绩,还积极拓展海外市场,产品远销欧美、东南亚等地区。同时,艾华集团也注重品牌建设,通过提升产品品质、加强售后服务等方式,不断提升品牌影响力和美誉度。

问答坊 | AI 解惑

如何选择ARM CPU的操作系统

从8位/16位单片机发展到以ARM CPU核为代表的32位嵌入式处理器,嵌入式操作系统将替代传统的由手工编制的监控程序或调度程序,成为重要的基础组件。更重要的是嵌入式操作系统对应用程序可以起到屏蔽的作用,使应用程序员面向操作系统级开发应用软件 ...…

查看全部问答>

做电子设计大赛B题的请进

本帖最后由 paulhyde 于 2014-9-15 09:09 编辑 做今年电子设计大赛B题的,请进,或者QQ,419605141  …

查看全部问答>

MIS人机界面的设计原则

一、 前言 随着计算机软硬件技术的发展,人机界面的重要性与日俱增。一些专家指出:对于用户,人机界面就是系统本身。在计算机发展的早期,受计算速度、存储容量等条件的限制,用户一味追求运行速度与所占空间,致使程序员在开发软件时不得不绞尽 ...…

查看全部问答>

一种适用于大规模无线传感器网络的定位算法

摘要针对经典多维定标的MDS—MAP算法在定位精度与矩阵计算复杂度方面的不足,提出一种基于 MDS的分布式定位算法。改进后的分布式定位算法加入了分簇的思想,把网络中的节点分成不同的簇来进行局 部定位,局部定位时引入Euclidean算法估算距离矩阵 ...…

查看全部问答>

温控仪表的输出信号

1.温控仪表输出4-20mA时,可不可以接固态继电器? 2.若输出为4-20mA的控制信号,如何实现周波控制?有什么品牌可以实现周波控制?选择时应根据那几个参数选择? 3.周波控制最终还是调整的电压?…

查看全部问答>

报告汤汤,发现论坛中的一个问题,特指出,不知道算不算问题

就是在回复满一页时,在下面的快捷回复不成功,必须点回复。不知道算不算问题?…

查看全部问答>

请大家帮忙看看我的usb设备流驱动有什么问题?

对应DeviceIOControl函数写了如下的流驱动代码: BOOL  TES_IOControl (DWORD dwCtx, DWORD dwCode,                PBYTE pInpBuf, DWORD dwInpLen,       & ...…

查看全部问答>

在wince上实现画图板的功能实现

请教各位大侠: 想实现画线功能,捕获 WM_MOUSEMOVE ,WM_LBUTTONDOWN 就可以拉,还是应该去实现驱动里发送的消息。。 …

查看全部问答>

急问!!!如何在windows和linux下获取所有硬盘physicaldriveX???请大虾不惜赐教!!!

windows下硬盘的编号为physicaldrive0表示第一个硬盘,physicaldrive1表示第二个硬盘...(考虑远程映射的硬盘,可能有很多)。 现在我需要通过程序得到连接我电脑的所有的physicaldrive,比如physicaldrive0,physicaldrive1,physicaldrive2全部 ...…

查看全部问答>

弱弱的一个问题,谁知道

TI上下载的原理图文件SCH格式,用什么打开。PROTEL打不开呢。。…

查看全部问答>