arm汇编语言基础(代码片段)

r1ng0 r1ng0     2022-12-21     482

关键词:

ARM 与 Thumb 寄存器对应关系

  • PC寄存器: ARM状态为R15,Thumb状态为PC
  • LR寄存器: ARM状态为R14,Thumb状态为LR
  • SP寄存器: ARM状态为R13,Thumb状态为SP
  • IP寄存器: ARM状态为R12,Thumb状态为IP
  • FP寄存器: ARM状态为R11,Thumb状态为FP

其他对应关系一一相同

ARM 与 Thumb 指令集

指令格式:

其中

  • opcode为助记符
  • cond为条件
  • S指定其是否影响CPSR寄存器的值(也就是程序状态字)
  • .W与.N指定指令宽带。(一个指定32,一个指定16)
  • Rd 目的寄存器
  • Rn 第一个操作数寄存器
  • operand2为第二个操作数

跳转指令

B 跳转指令

格式:Bcond label

BL带链接的跳转指令

格式:BLcond label

当条件满足时,会将当前指令的下一条指令保存到R14(LR)寄存器中,然后跳转到label中。这通常用于调用子程序,在子程序的尾部,通过 MOV PC,LR 返回

BX 带状态切换的跳转指令

格式:BXcond Rm

当执行BX指令时,如果条件cond满足,则处理器会检查Rm的为[0]是否为1,如果为1,这将CSPR寄存器的T置1,并将目标代码解释为Thumb代码来执行。为0的话,复位 CSPR寄存器的T。并将目标代码解释为ARM代码来执行。

eg:

.code 32
ADR R0,thumbcode+1 
BX R0 @跳转到thmbcode,并将处理器切换为thumb模式 
thumbcode:
.code 16
...

BLX带链接与状态切换的跳转指令

格式:BLXcond Rm

存储器访问指令

LDR

格式:

LDRtypecond Rd,label

LDRDcond Rd,Rd2,label

type指定了操作的数据大小

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

LDRD 一次加载双字的数据,将数据加载到Rd,Rd2中

STR

格式:

STRtypecond Rd,label

STRDcond Rd,Rd2,label

用于储存数据到指定的存储单元

LDM

格式:

LDMaddr_modecond Rn!,reglist

其中 ! 为可选,如果有,则将最终地址回写到Rn中

该指令从指定的存储单元,加载数据到寄存器列表中

eg:

LDMIA R0!,R1-R3 @依次加载R0地址处的数据到R1,R2,R3寄存器中

STM

格式:

STMaddr_modecond Rn!,reglist

其中 ! 为可选,如果有,则将最终地址回写到Rn中

将寄存器列表中的数据存储到指定存储单元

PUSH

POP

SWP

格式:

SWPBcond Rd,Rm,[Rn]

Rd:为要从存储器加载数据的寄存器

Rm:为写入数据到存储器的寄存器

Rn:为存储器地址

如果 Rd 与 Rm 相同,则可实现寄存器与存储器的交换

数据处理指令

linux驱动开发:arm汇编基础(代码片段)

文章目录Linux驱动开发:ARM汇编基础一、GUN汇编语法1.1语句结构:1.2伪操作1.3GUN函数二、ARM的寻址方式2.1立即寻址2.2寄存器寻址2.3寄存器间接寻址2.4基址变址寻址2.5多寄存器寻址2.6相对寻址2.7堆栈寻址三、Cortex-A常用汇编... 查看详情

android逆向基础之arm汇编语言知识总结(代码片段)

文章目录前言ARM32汇编1.1寄存器1.2寻址方式1.3汇编指令1.4代码识别1.5IDA示例ARM64汇编2.1寄存器2.2变址寻址方式2.3常用汇编指令2.4实例程序分析总结前言X86是英特尔Intel首先开发制造的一种微处理器体系结构的泛称,包括Intel8086... 查看详情

ios汇编入门教程arm64汇编基础(代码片段)

__attribute__anti_debug__arm64____asm____volatile__testabresabresmainrestesthelloBBspspstrw0strw1ldrw0ldrw1addw0w0w1strw0ldrw0addspspretBBspspstpx29x30addx29sporrw0wzrorrw1wzrsturwzrbl_testmovw1strw0m 查看详情

arm汇编基础上(代码片段)

ARM是一个精简指令集处理器,其指令集的设计是定长的,也就是其汇编对应的机器码是定长的(2字节或者4字节)。那么对于定长而言,其优点就是更快的被执行,因为这样CPU取指令译码的速度相对x86的CPU... 查看详情

arm汇编基础基于keil创建stm32汇编程序的编写(代码片段)

文章目录一、新建项目(1)工具介绍(2)创建项目:二、配置环境(1)配置芯片(2)配置运行环境三、调试代码(这里选择使用的是仿真调试)(1)源代码(2)仿真设... 查看详情

android逆向基础之arm汇编语言知识总结(代码片段)

文章目录前言ARM32汇编1.1寄存器1.2寻址方式1.3汇编指令1.4代码识别1.5IDA示例ARM64汇编2.1寄存器2.2变址寻址方式2.3常用汇编指令2.4实例程序分析总结前言X86是英特尔Intel首先开发制造的一种微处理器体系结构的泛称,包括Intel8086... 查看详情

arm开发入门与汇编基础(代码片段)

2019-12-12关键字:汇编指令基础 首先ARM是一家公司,它成立于1990年。ARM公司主要是设计ARM系列的RISC处理器内核,并将这些内核授权给合作伙伴进行生产与销售。ARM公司是一家只负责设计内核而不生产芯片的公司。 ARM芯片... 查看详情

arm汇编基础上(代码片段)

ARM是一个精简指令集处理器,其指令集的设计是定长的,也就是其汇编对应的机器码是定长的(2字节或者4字节)。那么对于定长而言,其优点就是更快的被执行,因为这样CPU取指令译码的速度相对x86的CPU... 查看详情

android逆向arm汇编(使用ida解析arm架构的动态库文件|分析malloc函数的arm汇编语言)(代码片段)

文章目录一、分析malloc函数的arm汇编语言一、分析malloc函数的arm汇编语言在上一篇博客【Android逆向】arm汇编(使用IDA解析arm架构的动态库文件|使用IDA打开arm动态库文件|切换IDA中汇编代码显示样式)打开并配置了选项;分析libc.so的... 查看详情

android逆向arm汇编(使用ida解析arm架构的动态库文件|分析malloc函数的arm汇编语言)(代码片段)

文章目录一、分析malloc函数的arm汇编语言一、分析malloc函数的arm汇编语言在上一篇博客【Android逆向】arm汇编(使用IDA解析arm架构的动态库文件|使用IDA打开arm动态库文件|切换IDA中汇编代码显示样式)打开并配置了选项;分析libc.so的... 查看详情

arm汇编简单介绍(代码片段)

1.汇编文件说明:  汇编文件以【.s】结尾的文件格式  注释:多行注释/**/  ;单行注释@ 2. 符号说明:  1)汇编指令,一条指令对应一个机器码,完成一定的功能  2)伪指令,一条指令对应多条机器码,... 查看详情

基础篇.arm架构介绍(代码片段)

...ex-A73等多款处理器IP。ARM架构为processor或core的设计提供了基础,通常我们可以将processor或core称为ProcessingElement(PE)。2.ARM授权模式ARM公司一般有两种授权方式&# 查看详情

arm裸机开发:c语言点亮led(代码片段)

...LED一、硬件平台:二、汇编搭建C开发环境2.1STM32启动代码2.2I.MUX启动代码三、C语言驱动程序四、实验现象ARM裸机开发:C语言点亮LED一、硬件平台:正点原子I.MX6U阿尔法开发板二、汇编搭建C开发环境使用C语言进行软件... 查看详情

arm伪指令(代码片段)

1、伪指令是什么ARM伪指令不是ARM指令集中的指令,只是为了编程方便人们定义了伪指令。在汇编时这些指令将会被等效的ARM指令或arm指令的组合代替。编程时可以像其他ARM指令一样使用伪指令,区别是伪指令不像指令一样有对... 查看详情

arm汇编(代码片段)

...。伪指令本质不是指令,只是和汇编指令写在同一个代码中,它由编译器提供,用于指导编译过程,经过编译后伪指令最终不会生成机器码,不同的编译器提供的伪指令不同。所以,伪指令和指令的根本区... 查看详情

inlinehook之arm64汇编基础(代码片段)

iOS内存分区及栈区栈区是存放临时变量、记录函数调用的区域。函数因为有了栈,所以才会具有递归的特点。向低地址增长的特性iOS内存的栈空间是向低地址生长的,在图示中靠下的位置是栈顶,靠上方的位置是栈底... 查看详情

arm汇编内存访问指令(代码片段)

  一。单个寄存器操作读写内存内存访问指令格式:<opcode><cond>Rd,[Rn]  Rn中保存的是一个内存的地址值1.内存写指令 【str,strb,strh】单个寄存器  1)【str】写4个字节ldrr0,=0x12345678@movr1,#0x40000000strr0,[r1]@将r0... 查看详情

《嵌入式-嵌入式大杂烩》arm汇编入门(代码片段)

我们在学习ARM的时候,一般都不用看汇编启动代码,直接使用芯片厂商提供的汇编启动代码,但是要想深入了解ARM内部原理,就必须掌握一定的汇编知识。我们在前面总结了处理器架构与指令集,那么汇编和... 查看详情