历史上的今天
返回首页

历史上的今天

今天是:2025年01月21日(星期二)

正在发生

2021年01月21日 | 快速学Arm(10)--Arm,Thumb指令集汇编语言的一些特殊性

2021-01-21 来源:eefocus

20多年前曾经是Z80汇编语言的高手,后来接触了8086,再后来接触了C51汇编,每一次都发现了一些与前面学的语言不同的东西,要逐渐的去习惯.再像后学,见得多了,也就不绝对奇怪了.


上午浏览了一下Arm的汇编语言,发现它的基本指令也并不算特别多.只是它又有与Z80,8086或者C51一些不同的东西.Arm的汇编语言在基本的指令上加了很多不同的前缀和后缀,或者"中缀",这样组合起来,把基本指令变得更加复杂,以至于会把初学者搞蒙.我把看到的一个个总结一下.


1.指令格式:

    {} {S} , {,}

    opcode:指令助记符,如LDR,STR等

   cond:执行的条件,如EQ,NE等

   S:是否影响CPSR寄存器的值,如果后S后缀,则运行会影响CPSR状态寄存器.

   Rd:目标寄存器

   Rn:第一个操作数的寄存器

   operand2:第二个操作数


在指令书写的时候,<>符号内的项是必需的,{}符号内的项是可选的,{}为指令执行条件,是可选的.

 

2.条件后缀指令:

    ADD R1,R0,#1     ;R1=R0+1

    ADDHI R1,R0,#1   ;如果R1>R0,则R1=R0+1

    ADDLS R1,R0,#1   ;如果R1<=R0,则R1=R=+1


从这个例子里,我们可以看到,ADD后面加上了不同的后缀,就形成了多种ADD指令,习惯了其他CPU的汇编的人不清楚此点,会被搞蒙,觉得ARM的指令为什么这么多,其实这些指令都有一个原型,只不过增加了一些,前缀,中缀,后缀而已.这些条件后缀可以在相关数据和手册中查到,我不将具体的,只讲理解和方法.

 

3.对字,半字,字节的后缀指令:

   LDR,LDRB,LDRSH,LDRSB等等指令都来自于原型LDR

   LDR:传送一个字(32bit)

   LDRB:传送一个字节(8bit)

   LDRSH:传送一个有符号的半字(16bit)

   LDRSB:传送一个有符号的字节(8bit)

   以此类推,又一个LDR又衍生出一大堆指令.

 

4.多寄存器传送:

对于多字节传送,传送后地址增加多少,也是一种后缀.例如:

   LDM,LDMIA,LDMDA,LDMED等等,大家查手册吧,别被搞蒙了就行了.

 

除了单独的后缀,中缀,前缀以外,这些"缀"们还可能进行组合,形成书写更长的指令,这一点需要大家注意.我们虽然可以使用C语言来开发程序,但对汇编语言进行阅读也是有可能的,阅读的时候如果对指令的一些规则有所了解,查阅手册就有了方法,就不会花大量的时间来琢磨这些东西了.


推荐阅读

史海拾趣

EMI Filter Company公司的发展小趣事

Murata是一家历史悠久的电子元器件公司,他们早在电子设备发展的初期就认识到了EMI滤波器的重要性。随着电子产品的不断小型化,Murata看到了小型化EMI滤波器的巨大市场需求。他们通过与多家科研机构和高校合作,成功研发出了一系列高性能、小型化的EMI滤波器。这些滤波器不仅性能优越,而且体积小巧,非常适合用于现代电子设备中。Murata因此赢得了大量的市场份额,并成为了EMI滤波器领域的佼佼者。

AnDAPT__Inc.公司的发展小趣事

Murata是一家历史悠久的电子元器件公司,他们早在电子设备发展的初期就认识到了EMI滤波器的重要性。随着电子产品的不断小型化,Murata看到了小型化EMI滤波器的巨大市场需求。他们通过与多家科研机构和高校合作,成功研发出了一系列高性能、小型化的EMI滤波器。这些滤波器不仅性能优越,而且体积小巧,非常适合用于现代电子设备中。Murata因此赢得了大量的市场份额,并成为了EMI滤波器领域的佼佼者。

GSG公司的发展小趣事
除了基本的压力测量外,还可以实现温度补偿、压力校准、故障诊断等多种功能。
ALD [Advanced Linear Devices]公司的发展小趣事
支持多种通信接口(如RS-485、Modbus、HART等),方便与其他系统或设备进行集成。
APTA Group Inc公司的发展小趣事

在电子行业的发展过程中,APTA Group Inc也遭遇了不少挑战。例如,原材料价格的波动、国际贸易环境的变化等都曾给公司带来不小的压力。然而,APTA并未被这些困难击垮,而是积极调整战略,优化生产流程,降低成本,提高产品质量。这种在挑战中展现出的韧性和应变能力,使得APTA能够在逆境中保持稳健的发展态势。

Gold Peak Group公司的发展小趣事
控制电路的布局应合理,避免元件之间的电磁干扰和机械碰撞。

问答坊 | AI 解惑

《社区大讲堂》DO-254中的高设计可靠性的逻辑综合(六)--DO-254的工程需要考虑

DO-254的工程需要在综合时考虑更多 逻辑综合工具在设计可靠性方面能提供很多额外的价值。以下是一些支持DO-254项目中非常重要的功能。 可重复性的综合结果 DO-254需要设计的每一步都要有可重复性。 主要的目的是能够获取设计环境,设计工具 ...…

查看全部问答>

充气发电二合一气筒

这是个打气筒与LED电筒2合1的一个小设备,2合1倒是不稀罕,亮点是电筒不用装电池。利用电磁感应原理,当使用打气筒给车胎充气时,来回的活塞运动就顺带驱动线圈来回切割磁场产生电力存储到蓄电池里,供LED灯珠发光。 …

查看全部问答>

怎么申请ARM7实验板

我学了ARM9了。学了半年可能还没有入门呢,想学习下ARM7来做个项目。…

查看全部问答>

学习通信基础需要看那些书

    小弟半路出家,代码工一个,经常有感于底子太薄,没搞过通信控制方面的,望各位前辈能介绍介绍需要看那些书籍.     我只知道,数电,模电,信号与系统,望各位大大能详细介绍下需要看那些书籍,万分感谢!…

查看全部问答>

内核加了一些驱动之后,就起不来了

内核加了一些驱动之后就起不来了,下面是串口输出的信息: ERROR: StoreImageToBootMedia: Failed to write region to BINFS partition (start=0x80100000, length=0x21EAD18). ERROR: OEMLaunch: Failed to store image to Smart Media. ERROR: ...…

查看全部问答>

Wince串口通信

各位大侠,谁能给我发个Wince串口通信程序及其.h文件配置。只要求能通信即可。因为我是新手想参考一下,不胜感谢~~我得邮箱是blueghostqu@163.com…

查看全部问答>

NXP的LPC24678的FE的设计思路

由于之前其他项目用过LPC2478做USB相关的设备,领导要求,我们这个项目也用到这个LPC2478,但是我们需要采用FE组网, 求高手指导下LPC2478的软硬件组网方案和具体设计思路? 感谢!…

查看全部问答>

EVC下弹出菜单

我想点击一个按钮生成一个弹出菜单 按钮下代码如下 CMenu menu; menu.LoadMenu(IDR_MENU1); CMenu *pPopup=menu.GetSubMenu(1); pPopup->TrackPopupMenu(TPM_LEFTALIGN,100,100,this); 可是点击后没有任何效果,请问该如何实现…

查看全部问答>

一点看法

       跳槽以后,基本很少再接触电路的设计的工作了。其中有些部分涉及到SAE1772和GB的充电引导电路的设计,也并没有太多的工作量。在整理和学习BMS的材料中,三个关键的量,电压(0~5V),电流(0~100A,瞬时最 ...…

查看全部问答>

一起讨论:如何做一个单片机程序通用模版

随着一年多的真实产品开发——虽然,嘿嘿,按照他们的说法,我这实在有点非主流,但在后期的调试中吃了不少苦头,于是在蛋疼的调试中,以及在阅读诸如《代码大全》这些书籍时,渐渐地萌生了一种如何做一个方便调试,方便扩展,方便移植的单片机程序 ...…

查看全部问答>