首页 > 其他分享 >ARM指令集总结

ARM指令集总结

时间:2022-10-18 17:05:07浏览次数:51  
标签:总结 操作数 R0 dest 指令 指令集 寄存器 ARM op


一.概念:

  指令集指一个微处理器所有指令的集合。处理器的指令集可以分为CISC(复杂指令集)和RISC(精简指令集),ARM处理器使用RISC。

    处理器支持ARMThumb两种指令集:ARM指令集工作在32位模式下,指令长度都是32b;Thumb指令集工作在16位模式下,指令长度都是16b。

二.指令集种类

1.算术运算指令

1.1.ADD指令

ADD指令用与普通的加法运算。

格式:ADD{条件} {S} <dest>, <op_1>, <op_2>

//dest是目的寄存器,op_1和op_2是操作数dest=op_1+op_2

ADD指令把两个操作数op_1和op_2相加的结果存放到目的寄存器dest中,操作数op_1和op_2可以是寄存器或者是一个立即数。

例:

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

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

ADD     R0, R1,R3,LSL#1   ;  R0=R1+(R3<<1)

 

1.2.ADC指令

ADC指令用于带进位的加法运算

格式:ADC{条件} {S} <dest>, <op_1>, <op_2>

//dest是目的寄存器,op_1和op_2是操作数dest = op_1 + op_2 + carry

ADC指令把两个操作数op_1和op_2相加的结果存放到目的寄存器dest中。ADC指令使用一个进位标志位,可以进行大于32位的加法操作。

例:

;64位数结果:存放在寄存器R0和R1

;两个32位数:存放在寄存器R2和R3

ADCS    R0,R2,R3   ;带进位加,结果保存在R0和R1寄存器

 

1.3.SUB指令

格式:SUB{条件} {S} <dest>, <op_1>, <op_2>

//dest是目的寄存器,op_1和op_2是操作数dest=op_1-op_2

SUB指令把两个操作数op_1和op_2相减的结果存放到目的寄存器dest中,操作数op_1和op_2可以是寄存器或者是一个立即数。

例:

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

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

SUB     R0, R1,R3,LSL#1   ;  R0=R1-(R3<<1)

 

1.4.SBC指令

格式:SBC{条件} {S} <dest>, <op_1>, <op_2>

//dest是目的寄存器,op_1和op_2是操作数dest = op_1 - op_2 -! Carry

SBC指令把两个操作数op_1和op_2相减的结果存放到目的寄存器dest中.SBC指令支持借位标志,故可以支持大于32位的减法操作。

 

 

 

2.逻辑运算指令

2.1.AND指令

AND指令求连个操作数的逻辑与的结果

格式:AND{条件} {S} <dest>, <op_1>, <op_2>

//dest是目的寄存器,op_1和op_2是操作数dest=op_1 AND op_2

AND指令在两个操作数op_1和op_2做逻辑与操作,结果存放到目的寄存器dest中,AND指令常用于屏蔽寄存器中的某一位。op_1是寄存器,op_2可以是寄存器或者是一个立即数。

例:

AND    R0, R0,#3      ;R0的第0位和第1位保持不变,其他位清零

 

2.2.EOR

EOR指令对两个操作数做异或运算。

格式:EOR{条件} {S} <dest>, <op_1>, <op_2>

//dest是目的寄存器,op_1和op_2是操作数dest=op_1 EOR op_2

EOR指令在两个操作数op_1和op_2做逻辑异或操作,结果存放到目的寄存器dest中,常用于设置某个特定反转。EOR指令中,op_1是寄存器,op_2可以是寄存器或者是一个立即数。

例:

EOR    R0, R0,#3      ;R0的第0位和第1位被反转

 

3.MOV指令

MOV指令在两个操作数之间复制数据。

格式:MOV{条件} {S} <dest>, <op_1>

//dest是目的寄存器,op_1是操作数dest=op_1

MOV指令的作用是把另一个寄存器中,支持操作数的移位操作。

例:

MOV   R0,R0            ;R0 = R0相当于没有操作

MOV   R0,R0,LST#3    ;R0 = R0 * 8 LST寄存器左移3位,相当于乘8

 

4.分支指令

B指令可以根据设置的条件跳转到指定的代码地址。

格式; B{条件} <地址>

B指令是分支跳转指令。程序中遇到B指令会立即跳转到指定地址,然后继续从新的地址开始运行程序。

 

5.数据传送指令

数据传送指令用于CPU和存储器之间的数据传送,是ARM处理器唯一能与外部存储器交换数据的一类指令。

5.1.单一数据传送指令

单一数据传送指令用于内向存储。

格式:

LDR{条件}       Rd;<地址>

STR{条件}       Rd;<地址>

LDR{条件}B     Rd;<地址>

STR{条件}B     Rd;<地址>

单一数据传送指令STR和LDR可以在内存和寄存器之间装载或者存储一个或多个字节的数据,并提供了;灵活的寻址方式。Rd是要操作的数值,地址可以是基址寄存器Rbase和变址寄存器Rindex指定的地址。在条件后加入标志B代表一次传送1字节数据。

常见寻址方式:

STR   Rd,  [Rbase]             ;存储Rd到Rbase所包含的有效地址

STR   Rd,  [Rbase,Rindex]    ;存储Rd到Rbase+Rindex所合成的有效地址

STR   Rd,  [Rbase,#index]    ;存储Rd到Rbase+index所合成的有效地址,index是立即数

 

5.2.多数据传送指令

多数据传送指令用于向内存装载和存储多个字节或字的数据。

格式; xxM{条件} {类型}  Rn{!}, <寄存器列表>{^}

其中,xx可以是LD(装载),也可以是ST(存储).多数据传送指令用于寄存器和内存之间多个数据的复制。

指令包括:

LDMED    LDMIB   ;装载前增加地址,相当于C语言的++p

LDMFD    LDMIA   ;装载前增加地址,相当于C语言的p++

LDMEA    LDMDB   ;装载前增加地址,相当于C语言的++*p

LDMFA    LDMDA   ;装载前增加地址,相当于C语言的*p++

STMFA    STMIB     ;存储前增加地址

STMEA    STMIA     ;存储后增加地址

STMFD    STMDB    ;存储前增加值

STMED    STMDA    ;存储后增加值

 

附:

ARM处理器支持的移位操作:

LSL 逻辑左移          寄存器的二进制位从右往左移动,空出的位补0

LSR 逻辑右移          寄存器的二进制位从左往右移动,空出的位补0

ASR 算术右移          移位过程中符号位不变,即如果源操作数是正数,则字的高端空出的位补0否则补1                          


ROR 循环右移          寄存器的低端移出的位填入字的高端空出的位

RRX 带扩展的循环位移    操作数右移一位,高端空出的位用原C标志值填充


 

 

 

 

 

 

 

 

标签:总结,操作数,R0,dest,指令,指令集,寄存器,ARM,op
From: https://blog.51cto.com/u_15834920/5767607

相关文章

  • 测试方法总结
    一、界面界面测试测试界面设计是否合理、简洁、美观,操作是否方便功能键、数据项信息是否齐全确认系统中同一功能抌名称是否统一设计样式、风格(查询条件样式;输入风格(点选/手......
  • Linux常用工具和命令总结
    一.Linux常用命令1.Linux常用命令列表命令作用常用参数参数作用ls列出指定目录的列表,包括文件和子目录。默认是当前目录-l以列表方式查看-a显示隐含文件和目录-h以便于阅读的......
  • pycharm 社区版运行Django项目的几种方式
    1、终端启动cd对应的Django项目路径,启动命令:pythonmanage.pyrunserver 2、pycharm工具的terminal启动,命令:pythonmanage.pyrunserver   3、pycharm......
  • 《牧羊少年奇幻之旅》总结
    目录总结什么是天命真正的爱情幸福的秘密总结这本书很好看,故事简单朴实,像寓言,又像童话。主要讲述的是一个叫圣地亚哥的牧羊少年不安于现状,去追寻天命、实现梦想的过程,有......
  • ADS1299开发调试总结之寄存器使用说明简析
    一前记  在生物生理信号测量领域,ads12xx系列是一个无法绕过去的存在。笔者最近几个项目围绕着动物生理信号测量来做。所以用ads12xx比较多一些。中间遇到了一些问题,......
  • Git忽略提交规则 - .gitignore配置运维总结
    在使用Git的过程中,我们喜欢有的文件比如日志,临时文件,编译的中间文件等不要提交到代码仓库,这时就要设置相应的忽略规则,来忽略这些文件的提交。简单来说一个场景:在你使用git......
  • 区间DP总结
    做了几题区间动态规划的题目,觉得区间动态规划的题目是有点难的。区间DP大概是这一类的动态规划,在一个线性的数据上对区间进行状态转移,dp[i][j]表示i到j的区间。dp[i][j]可以......
  • Git学习(八)命令总结
    1、分支、pullrequest等日常写作命令2、常用的更新命令这是一个人在GitHub玩儿的时候用的最多的,就是不断push,最多在GitHub上改了的话先pull一下再push。//【快速命令】......
  • ARM 笔记(1018)-- STM32部分--14 通用定时器输入捕获
    12.4通用定时器输入捕获输入捕获的概念:输入捕获是什么意思?怎样实现的输入捕获?输入捕获捕获的是跳跃的信号,根据硬件连接关系,按键按下是上升沿,按键抬起是下降沿。如果想......
  • 测试基础重点知识点总结
    项目的生命周期设计测试用例的好处(意义):一、梳理测试思路;二、作为质量评价依据;三、相似场景复用,可以提高工作效率;四、可以更好地规范管理(可以更好提高效率)......