第6部分- Linux ARM汇编 指令集概要

第6部分- Linux ARM汇编 指令集概要

ARM指令集可以分为跳转指令、数据处理指令、程序状态寄存器传输指令、Load/Store指令、协处理器指令和异常中断产生指令6类。

            ARM指令长为固定的32位。典型的ARM指令编码格式如下:

Opcode:指令操作符编码

Cond是指令执行的条件编码

S是决定指令的操作是否影响CPSR的值

Rd目标寄存器编码

Rn包含第一个操作数的寄存器编码

Shifter_operand:表示第2个操作数。

 

条件码

条件码cond是4位。

参考:

https://developer.arm.com/docs/den0024/a/the-a64-instruction-set/data-processing-instructions/conditional-instructions

 

ARM指令的寻址方式

主要有如下几种:

  • 数据处理指令的操作数的寻址方式
  • 字及无符号字节的Load/Store指令的寻址方式
  • 杂类Load/Store指令的寻址方式
  • 批量Load/Store指令的寻址方式
  • 协处理器Load/Store指令的寻址方式。

存储访问指令:

LDR

从存储器中加载数据到寄存器。

STR

存储数据到指定的存储单元。

LDM

从指定的存储单元加载多个数据到一个寄存器列表。

STM

将一个寄存器列表的数据的数据存储到指定的存储单元。

PUSH

将寄存器推入满递减堆栈。

POP

从递减堆栈中弹出数据到寄存器。

SWP

用于寄存器和存储器之间的数据交换。

ADD示例

这个在32可以运行,如果是64位前提是bx lr需要替换。

.text

.globl main

 

main:

  add r0,r0,  #1   // w0<-w0 + 1

  bx lr

as -g -o add.o add.s

gcc -o add add.o

64位如下:

.arch armv8-a

.global _start

.text

_start:

add x0,x0,  #1  

mov x8, 93

     svc 0

as -g -o add.o add.s

gcc -o add add.o

 

 

跳转指令

ARM中有两种方式可以实现程序的跳转:

  • 跳转指令
  • 直接向PC寄存器(R15)中写入目标地址值。

直接向PC寄存器中写入目标地址值,可以实现在4GB的地址空间中任意跳转,这种跳转指令又称为长跳转。

            还可以从当前指令向前或向后32MB的地址空间跳转。跳转指令有如下4种:

B:跳转指令

BL:待返回的跳转指令

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

BX:待状态切换的跳转指令

 

系统指令

Mnemonic

Instruction

MSR

Move general-purpose register to System Register allows the PE to write an AArch64 System register from a
general-purpose register.

MRS

Move System Register allows the PE to read an AArch64 System register into a general-purpose register.

SVC

Supervisor Call causes an exception to be taken to EL1.

NOP

No Operation does nothing, other than advance the value of the program counter by 4. This instruction can be used
for instruction alignment purposes.

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值