首页 > 系统相关 >【Linux系列-1】-- 必会的 ARM 汇编指令

【Linux系列-1】-- 必会的 ARM 汇编指令

时间:2024-03-29 14:11:06浏览次数:35  
标签:操作数 R0 R1 -- 寄存器 指令 Linux ARM CPSR

原创:lvy 嵌入式学习规划

学习 Linux 系统启动流程,必须熟悉几个汇编指令

这里不是最全的,只列出一些最常用的汇编指令。
一.数据处理指令

1.数据传送指令

【MOV指令】

把一个寄存器的值(立即数)赋给另一个寄存器,或者将一个常量赋给寄存器。

MOV指令的格式为:

MOV 目的寄存器,源操作数

MOV R1,R0 ;将寄存器R0的值传送到寄存器R1

2.算术运算指令

(1)【加法指令】:ADD

ADD 目的寄存器,操作数1,操作数2

ADD指令用于把两个操作数相加,并将结果存放到目的寄存器中。

ADD R0,R1,R2 ;R0 = R1 + R2
ADD R0,R1,#256 ;R0 = R1 + 256

(2)【带进位的加法指令】:ADC

ADC 目的寄存器,操作数1,操作数2

ADC指令用于把两个操作数相加,再加上CPSR中的C条件标志位的值,并将结果存放到目的寄存器中。

(3)【减法指令】:SUB

SUB 目的寄存器,操作数1,操作数2

把操作数1减去操作数2,并将结果存放到目的寄存器中。

SUB R0,R1,R2 ;R0 = R1 - R2
SUB R0,R1,#256 ;R0 = R1 - 256

3.比较指令

(1)【直接比较指令】:CMP

CMP 操作数1,操作数2

CMP R1,R0;将寄存器R1的值与寄存器R0的值相减,并根据结果设置CPSR的标志位
CMP R1,#100;将寄存器R1的值与立即数100相减,并根据结果设置CPSR的标志位

4.逻辑运算指令

(1)【逻辑与指令】:AND

AND 目的寄存器,操作数1,操作数2

AND 指令用于在两个操作数上进行逻辑与运算,并把结果放置到目的寄存器中。

AND R0,R0,#3 ; 该指令保持R0的0、1位,其余位清零。

(2)【逻辑或指令】:ORR

ORR 目的寄存器,操作数1,操作数2

ORR 指令用于在两个操作数上进行逻辑或运算,并把结果放置到目的寄存器中。

ORR R0,R0,#3 ; 该指令设置R0的0、1位,其余位保持不变。

二.转移指令

【跳转指令】

B 跳转指令
BL 带返回的跳转指令
BLX 带返回和状态切换的跳转指令
BX 带状态切换的跳转指令

三.程序状态寄存器访问指令

1、【MRS指令】

MRS 通用寄存器,程序状态寄存器(CPSR或SPSR)

MRS R0,CPSR ;传送CPSR的内容到R0
MRS R0,SPSR ;传送SPSR的内容到R0

2、【MSR指令】

MSR 程序状态寄存器(CPSR或SPSR)_<域>,操作数

MSR CPSR,R0 ;传送R0的内容到CPSR
MSR SPSR,R0 ;传送R0的内容到SPSR

四.加载/存储指令

ARM 微处理器支持加载/存储指令用于在寄存器和存储器之间传送数据,加载指令用于将存储器中的数据传送到寄存器,存储指令则完成相反的操作。

1、【LDR指令】

LDR 目的寄存器,<存储器地址>

LDR指令用于从存储器中将一个32位的字数据传送到目的寄存器中。

LDR R0,[R1] ;将存储器地址为R1的字数据读入寄存器R0。
LDR R0,[R1,R2] ;将存储器地址为R1+R2的字数据读入寄存器R0。
LDR R0,[R1,#8] ;将存储器地址为R1+8的字数据读入寄存器R0。
LDR R0,[R1,R2] ! ;将存储器地址为R1+R2的字数据读入寄存器R0,并将新地址R1+R2写入R1。
LDR R0,[R1,#8] ! ;将存储器地址为R1+8的字数据读入寄存器R0,并将新地址R1+8写入R1。

LDRB 和 LDRH 指令大家可以百度。

2、【STR指令】

STR 源寄存器,<存储器地址>

STR指令用于从源寄存器中将一个32位的字数据传送到存储器中。该指令在程序设计中比较常用,且寻址方式灵活多样,使用方式可参考指令LDR。

STR R0,[R1],#8 ;将R0中的字数据写入以R1为地址的存储器中,并将新地址R1+8写入R1。
STR R0,[R1,#8] ;将R0中的字数据写入以R1+8为地址的存储器中。

STRB 和 STRH指令大家可以百度。
五.异常产生指令

1、【SWI指令】

SWI 24位的立即数

SWI指令用于产生软件中断,以便用户程序能调用操作系统的系统例程。

SWI 0x02 ;该指令调用操作系统编号位02的系统例程。

2、【BKPT指令】

BKPT 16位的立即数

BKPT指令产生软件断点中断,可用于程序的调试。
六.伪代码

1.【AREA】

一个汇编程序至少要包含一个段,当程序太长时,也可以将程序分为多个代码段和数据段,因此在汇编程序的开头,我们一般的语句会用到AREA。

AREA 段名 属性 1 ,属性 2 ,....

AREA Init ,CODE ,READONLY ;定义一个代码段,段名为 Init ,属性为只读。

2、【ALIGN】

ALIGN { 表达式 { ,偏移量 }}

ALIGN 伪指令可通过添加填充字节的方式,使当前位置满足一定的对其方式。其中,表达式的值用于指定对齐方式,可能的取值为2的幂,如 1 、2 、4 、8 、16 等。eg : xxx = ALIGN(4)

3、【CODE16、CODE32】

CODE16 (或 CODE32 )

CODE16 伪指令通知编译器,其后的指令序列为 16 位的 Thumb 指令。

CODE32 伪指令通知编译器,其后的指令序列为 32 位的 ARM 指令。

4、【ENTRY】

ENTRY
ENTRY(stext)

很常见!!!ENTRY 伪指令用于指定汇编程序的入口点。在一个完整的汇编程序中至少要有一个 ENTRY (也可以有多个,当有多个 ENTRY 时,程序的真正入口点由链接器指定),但在一个源文件里最多只能有一个 ENTRY (可以没有)。

5、【END】

END

END 伪指令用于通知编译器已经到了源程序的结尾。

标签:操作数,R0,R1,--,寄存器,指令,Linux,ARM,CPSR
From: https://www.cnblogs.com/o-O-oO/p/18103749

相关文章

  • 泛形variant+visit
    泛形variant+visit1.引言在python里可以让一个变量变成不同的类型,拥有不同的值,且根据不同的类型执行不同的操作,当不同的类型拥有同样的函数时,这样我们就不用再重复写一堆代码了但如果在c++中实现类似的功能,比较经典的处理方式是用虚函数+子类重写的方式,classBase{virt......
  • 启动filezilla后自动连接指定站点及进入指定的目录
    自动连接指定的站点操作步骤<aside>......
  • 任务一
    1.回顾你过去将近3年的学习经历当初你报考的时候,是真正喜欢计算机这个专业吗?你现在后悔选择了这个专业吗?你认为你现在最喜欢的领域是什么(可以是计算机的也可以是其它领域)?答:喜欢计算机专业;不后悔;最喜欢人工智能领域;总结你现在已经掌握的知识你都具备了那些专业知识和能力?......
  • 测试人员必会SQL命令
    一、数据库相关的SQL1.创建数据库testCREATEDATABASEtest;CREATEDATABASEyour_database_nameCHARACTERSETutf8mb4COLLATEutf8mb4_general_ci;2.查看数据库创建是否成功SHOWDATABASES;3.删除库testDROPDATABASEtest;4.进入testdb6库USEtestdb6;......
  • 华为云网络知识
    1.对等网络peer2.NAT网关(NETGW)购买一个公网NET网关,然后购买一个或多个EIP(弹性公网),然后在EIP界面将这一个或多个EIP绑定到这个NET网关上,在NET网关界面通过SNAT规则的配置,可以将某个内网ECSip或者ip段配置到这个EIP上,从而似的ECS可以访问公网。DNAT是反向的公网访问互联网的,如......
  • 前端学习-UI框架学习-Bootstrap5-012-进度条
    菜鸟教程链接创建一个基本的进度条的步骤如下:添加一个带有.progress类的。接着,在上面的内,添加一个带有class.progress-bar的空的。添加一个带有百分比表示的宽度的style属性,例如style="width:70%"表示进度条在70%的位置。注意:我发现如果这个contianer里面不放......
  • 摄影跟拍预定系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+
    本项目包含可运行源码+数据库+LW,文末可获取本项目的所有资料。项目研究的背景困扰管理层的许多问题当中,摄影跟拍预定管理一定是不敢忽视的一块。但是管理好摄影跟拍预定又面临很多麻烦需要解决,例如有几个方面:第一,往往用户人数都比较多,如何保证能够管理到每一用户;第二,......
  • V R虚拟现实元宇宙的前景|虚拟现实体验店加 盟合作|V R设备在线购买
        VR(虚拟现实)技术作为一种新兴的技术,正在逐渐改变人们的生活和工作方式。随着技术的不断进步,人们对于元宇宙的概念也越来越感兴趣。元宇宙是一个虚拟世界,通过VR技术可以实现人们在其中进行各种活动和交互。    元宇宙的前景可以说是非常广阔的。首先,元宇宙......
  • 生鲜蔬果店分销会员商城小程序的作用是什么
    生鲜蔬果行业售卖的商品类型比较多,如预制菜、零食饮料酒水、冻品面点、乳品烘焙等都可以拓展,同时这些商品除了预制菜外,可以说都是生活所需,因此无论同城外地还是线上线下都有较高的生意营收机会。而除了进驻到电商平台外,大小商家都可以线上开自己的私域店铺,自己做主运营从获客......
  • V R社交平台的用处|虚拟现实体验馆加盟|V R设备在线价格
    VR(虚拟现实)社交平台的用处可以体现在以下几个方面:    VR社交平台不仅可以丰富用户的社交体验,还可以在教育、艺术、商务等领域发挥重要作用,为用户提供更加多样化、互动性强的社交平台体验。VR游乐设备|VR娱乐设备|VR体验|VR设备加盟|VR数字乐园|VR+超感地带|西红柿......