ARM 常用汇编指令

ARM 汇编程序的框架结构

.section .data

<初始化的数据>

.section.bss

<未初始化的数据>

.section .text

.global _start

_start:

<汇编代码>

注意: 一般是将上面结构进行简化

.text

.global  _start

_start:

<汇编代码>

寄存器操作指令:

算术和逻辑指令:

MOV :用于将一个寄存器或被移位寄存器或一个立即数移动到目的寄存器

MOV  r1 ,#8 (注意:#+数,表示一个十进制数,#+0b数,表示一个二进制数,#+0x数,表示一个十六进制数)

MVN :对源操作数取反再赋值给目的寄存器

MOV R1,#8

SUB : 将一个数减去另外一个数再存放如寄存器

SUB R1,#8,#6(8-6)

ADD:将一个数加上另外一个数后将其存放如寄存器中

ADD R1,R2,R3

AND :逻辑与

AND R1,R2,#0

BIC:位清除

BIC R1,R2,#0B1101

将R2中所与#b1101中1所对应的位清零后的结果保存在R1中

比较指令:

CMP:顾名思义,用于比较两个数的大小,比较的结果不过会放在哪个通用寄存器中而是改在程序状态寄存器中的一个标志状态位

CMP R1,#0B111010

TST:测试位,将两个数按位与

TST R1,R2

分枝指令:

B:条件跳转指令

B [条件]  标号  (注意 :中括号在编写程序时不需要写出)

BL :带连接的返回(类似于C语言中的子函数调用,调用子函数后返回主函数)

移位指令:

LSL:算术左移位

MOV R1,R1,LSL#2(将R1中的数据左移两位存入R1)

ROR:循环右移

MOV R1,R1,#ROR 2(将R1中的数据循环右移后存入R1中)

程序状态字访问指令:

上面所学指令都不能对计算机中的程序状态字中的指令进行访问和读写,所以需要专用计算机指令来将程序状态字中的数据读写到通用寄存器中,在进行修改后写入

MRS :将程序状态字中的数据搬出来

MRS  R0,CPRS

MSR:将数据搬回程序状态字中

MSR  CPRS, R0

存储器操作指令:

LDR :将内存中的值导出到通用寄存器中

LDR R0 ,#0XFF ‘

STR:将同用寄存器中的数据写回到内存中

STR R0 ,#0XFF

伪指令:

定义类伪指令:(1:编译时起作用2:起作用但是转化为其他机器指令)

.global  表明一个全局的符号 (注意GNU伪指令的特点在前面加上一个“.”)

.data    定义一个数据段

.ascii 定义字符串的数据

.byte 定义一个字节的数据

.word 定义一个字的数据

.data

.equ (类似于C语言中定义宏)

.align 用于字节对齐

操作类伪指令:

nop:空操作指令 \

具体实现:mov r0 ,r0

ldr:用于将一个大于八位的数据装入寄存器

注意:ldr r0 ,=0x1ff

这里后面是用的等号这里和其他地方有些不一样

协处理指令:(最重要是就是CP15)

作用:系统控制

mcr:

mrc:

mrc p15,0, r0 ,c0,c0,0

注意:蓝色部分是由芯片手册的cp15寄存器访问列表给出的以访问不同寄存器 。红色部分是内核内部通用寄存器

原文地址:https://www.cnblogs.com/big-devil/p/8589386.html

时间: 2024-08-29 15:56:49

ARM 常用汇编指令的相关文章

Android 图解逆向工程中ARM常用汇编指令(一)

我们走得太快,灵魂都跟不上了. 微小的幸福就在身边,容易满足就是天堂. 在逆向和爆破中我们经常会在IDA中接触到汇编,一般做安卓的不会太了解VB回编等,不太了解的同学可以先查看上篇文章<Android ARM常用的汇编指令合集> 再来继续我们的学习,我们先来看张图. 这个view里面有 PUSH/LDR/SUB/MOVS/BLX/SUBS/BEQ/CMP ,这些差不多都是常见的,不过也不需要看得懂,理解这个指令即可,接下来我们就来分析下这些指令分别有什么作用吧. 先引入 概念性 东西,免得大家

ARM常用汇编指令介绍

b     跳转指令(跳转范围为32Mb) bl    带返回地址的跳转,指令自动将下一条指令的地址复制到R14寄存器,然后跳转到指定地址去执行,执行完后返回到下一条指令处执行 pc    寄存器R15,程序计数器指向当前执行的程序地址 lr    寄存器R14,链接寄存器保存程序跳转时的返回地址 ldr   从内存中读取数据加载到寄存器中 str   将寄存器中的数据保存到内存 mov   寄存器与寄存器之间的数据传送指令,也可以将立即数传给目标寄存器 add   加法指令 sub   减法指

ARM重要汇编指令记录

IMPORT ,定义表示这是一个外部变量的标号,不是在本程序定义的EXPORT ,表示本程序里面用到的变量提供给其他模块调用的.以上两个在汇编和C语言混合编程的时候用到 ENDP    表示PROC所定义的过程结束. (end procedure)ENDS    表示SEGMENT定义的段结束.   (end segment)END     程序结束. B.BL.BX.BLX 和 BXJ跳转.带链接跳转.跳转并切换指令集.带链接跳转并切换指令集.跳转并转换到 Jazelle 状态. 状态寄存器传

常用汇编指令集合

Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html 常用汇编指令集合 1. gdtr 1.gdtr 读取gdt表地址 其需要六个字节,但是前两个字节并没有用处. 汇编代码: CHAR Sgdtr[6] = { NULL };    __asm {        sgdt Sgdtr;    }   查看内存地址:ff 03 00 f0 03 80   后四个字节值为 8003f000,可以用windbg r gdt

汇编--常用汇编指令与标志位关系

加法指令 ADD (addition) 指令对标志位的影响: CF=1   最高有效位向高位有进位 CF=0   最高有效位向高位无进位 OF=1   两个同符号数相加(正数+正数 或 负数+负数),结果符号与其相反. OF=0   两个不同符号数相加,或同符号数相加,结果符号与其相同. 带进位加法指令 ADC (add with carry) 指令对标志位的影响: CF=1   最高有效位向高位有进位 CF=0   最低有效位相高位无进位 OF=1   两个同符号数相加,结果符号与其相反, O

汇编笔记二【32位通用寄存器 以及 常用汇编指令】

一.32位通用寄存器(EAX,ECX,EDX,EBP,ESP,EBP,ESI,EDI) 二.十六位通用寄存器(AX,CX,DX,BX,SP,BP,SI,DI) 三.八位通用寄存器(AH,AL,CH,CL,DH,DL,BH,BL) 四.32位,16位,8位寄存器之间的关系 1.寄存器都是高位在前,低位在后. 2.都是包含关系,32位寄存器之中包含了16位寄存器,16位寄存器之中包含了8位寄存器. 关系如下: 五.32位的含义 一位只能放0或1,32位就意味着能放32个0或1. 所以32位最小取值为

ARM 内核 汇编指令 的 8种 寻址方式

str: store register ->指令将寄存器内容存到内存空间中, ldr:  load register 将内存内容加载到通用寄存器, ldr/str 组合来实现ARM CPU 和内存数据的 交换! 1.mov r1,r2;  //寄存器r2的内容复制到r1中,寄存器寻址方式,(r1,r2 ARM中的通用寄存器) 2.mov r0,#0xFF00; //数0xFF00复制到r0中,立即寻址方式,(#代表后面跟一个数) 3.mov r0,r1,lsl #3; //将r1中的内容左移三位

常用汇编指令及其影响的标志位

加法指令 ADD (addition) 指令对标志位的影响: CF=1   最高有效位向高位有进位 CF=0   最高有效位向高位无进位 OF=1   两个同符号数相加(正数+正数 或 负数+负数),结果符号与其相反. OF=0   两个不同符号数相加,或同符号数相加,结果符号与其相同. 带进位加法指令 ADC (add with carry) 指令对标志位的影响: CF=1   最高有效位向高位有进位 CF=0   最低有效位相高位无进位 OF=1   两个同符号数相加,结果符号与其相反, O

arm伪汇编指令 .word

说说这个.word的作用. word expression就是在当前位置放一个word型的值,这个值就是expression 举例来说, _rWTCON: .word 0x15300000 就是在当前地址,即_rWTCON处放一个值0x15300000 翻译成intel的汇编语句就是: _rWTCON dw 0x15300000 例如: ldr r1, _rWTCON _rWTCON: .word 0x15300000 不是把地址0x1530 0000 上的内容传递到r1,是把地址_rWTCON