ARM汇编基础回顾----ARM汇编编程1

前言

ARM 与 X86cpu 的区别:
Intel是CISC(复杂指令集计算)处理器,具有更大,功能更丰富的指令集,并允许许多复杂的指令访问内存。因此,与ARM相比,它具有更多的操作,寻址模式,但寄存器更少。CISC处理器主要用于普通PC,工作站和服务器。
ARM是RISC(精简指令集计算)处理器,比CISC具有简化的指令集(100条或更少的指令)和更多通用寄存器。与Intel不同,ARM使用仅在寄存器上操作的指令,并使用加载/存储内存模型进行内存访问,这意味着只有加载/存储指令才能访问内存。这意味着在ARM上特定内存地址处递增32位值将需要三种类型的指令(加载,递增和存储),以便首先将特定地址处的值加载到寄存器中,在寄存器中递增并存储。它从寄存器返回到存储器。

汇编语言是什么?
汇编语言只是机器代码之上的一个薄语法层,它由指令组成,这些指令以二进制表示形式(机器代码)编码。
汇编语言的本质——助记符语言:
1)大多数指令为单周期指令
2)大多数指令是可以条件执行的

一、了解数据类型、内存对齐与存储格式

数据类型
ARM支持对不同数据类型的操作。我们可以加载(或存储)的数据类型可以是有符号的和无符号的字(word),半字(half word)或字节(byte)。这些数据类型的扩展名是:-h或-sh表示半字,-b或-sb表示字节,字无扩展名。
在这里插入图片描述
有符号和无符号数据类型之间的区别是:

1)带符号的数据类型可以同时包含正值和负值,因此范围较小。
2)无符号数据类型可以容纳较大的正值(包括“零”),但不能容纳负值,因此范围更广。

以下是数据类型与“加载和存储”指令一起使用的示例:

ldr 	=加载字
ldr h 	=加载无符号半字
ldr sh 	=加载带符号的半字
ldr b 	=加载无符号字节
ldr sb 	=加载有符号字节

str 	=存储字
str h 	=存储未签名的半字
str sh 	=存储签名的半字
str b 	=存储无符号字节
str sb 	=存储签名的字节

内存对齐
在这里插入图片描述
存储模式
在这里插入图片描述

二、指令

2.1 ARM和Thumb

ARM处理器具有两种可以运行的主要状态(此处不包括Jazelle):ARM和Thumb。故具有ARM和Thumb两种指令集。通常ARM状态下的指令始终为32位,Thumb状态下的指令为16位(但也有32位,Thumb-2有16bit和32bit指令)。

ARM和Thumb之间的区别:
1)对于条件执行指令(不是条件跳转指令):所有的ARM状态指令都支持条件执行。一些版本的ARM处理器上允许在Thumb模式下通过IT汇编指令进行条件执行。条件执行减少了要被执行的指令数量,以及用来做分支跳转的语句,所以具有更高的代码密度。
2)ARM模式与Thumb模式的32位指令:Thumb的32位汇编指令都有类似于a.w的扩展后缀。
3)桶型移位是另一种独特的ARM模式特性。它可以被用来减少指令数量。比如说,为了减少使用乘法所需的两条指令(乘法操作需要先乘2然后再把结果用MOV存储到另一个寄存器中),就可以使用在MOV中自带移位乘法操作的左移指令(Mov R1, R0, LSL #1)。

要切换处理器执行的状态,必须满足以下两个条件之一:

1)在使用分支跳转指令BX(branch and exchange)或者分支链接跳转指令BLX(branch,link and exchange)时,将目的寄存器的最低位置为1。之后的代码执行就会在Thumb模式下进行。这可以通过在偏移量上加上1来实现,如:0x5530+ 1。
虽然指令是2字节或4字节对齐的,但不必担心导致对齐问题,因为处理器将忽略最低有效位。
2)当前程序状态寄存器中的T位置1,则处于Thumb模式。

2.2 指令简介
汇编语言由指令构成,而指令是主要的构建块。ARM指令通常后跟一个或两个操作数,并且通常使用以下模板:

MNEMONIC {S} {condition} {Rd},Operand1,Operand2 
MNEMONIC     	- 指令的助记符如ADD 
{S}          	- 可选的扩展位,如果指令后加了S,则需要依据计算结果更新CPSR寄存器中的条件跳转相关的FLAG
{condition}  	- 如果机器码要被条件执行,那它需要满足的条件标示
{Rd}         	- 存储结果的目的寄存器 
Operand1     	- 第一个操作数,寄存器或者是一个立即数 
Operand2     	- 第二个(可变的)操作数,可以是一个立即数或者寄存器或者有偏移量的寄存器

2.3 ARM指令条件执行及标志位
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.4 常见ARM指令及含义
在这里插入图片描述
以上是今天的回顾记录,下一篇再详细讲ARM指令与寄存器。
学海无涯,学无止境,共勉~

PS:内容参考
https://azeria-labs.com/writing-arm-assembly-part-1/
https://www.cnblogs.com/hilfloser/p/10516610.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值