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寄存器访问列表给出的以访问不同寄存器 。红色部分是内核内部通用寄存器

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

  1. ARM常用汇编指令介绍

    b     跳转指令(跳转范围为32Mb) bl    带返回地址的跳转,指令自动将下一条指令的地址复制到R14寄存器,然后跳转到指定地址去执行,执行完后返回到下一条指令处执行 pc    寄存器R1 ...

  2. 浅析VS2010反汇编 VS 反汇编方法及常用汇编指令介绍 VS2015使用技巧 调试-反汇编 查看C语言代码对应的汇编代码

    浅析VS2010反汇编 2015年07月25日 21:53:11 阅读数:4374 第一篇 1. 如何进行反汇编 在调试的环境下,我们可以很方便地通过反汇编窗口查看程序生成的反汇编信息.如下图所示. ...

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

    str: store register ->指令将寄存器内容存到内存空间中, ldr:  load register 将内存内容加载到通用寄存器, ldr/str 组合来实现ARM CPU 和内 ...

  4. 【安卓逆向】ARM常见汇编指令总结

    跳转指令 B 无条件跳转 BL 带链接的无条件跳转 BX 带状态切换的无条件跳转 BLX 带链接和状态的无条件跳转 存储器与寄存器交互数据指令(核心) 存储器:主存和内存 寄存器中放的数据:可以是字符 ...

  5. ARM常用汇编指令列表 --- 转自百度文库

  6. 从零开始的程序逆向之路 第一章——认识OD(Ollydbg)以及常用汇编扫盲

    作者:Crazyman_Army 原文来自:https://bbs.ichunqiu.com/thread-43041-1-1.html 0×00 序言: 1.自从上次笔者调戏完盗取文件密码大黑客后, ...

  7. 常用ARM汇编指令

    常用ARM汇编指令 [日期:2012-07-14] 来源:Linux社区  作者:xuyuanfan77 [字体:大 中 小]     在嵌入式开发中,汇编程序常常用于非常关键的地方,比如系统启动时初 ...

  8. ARM汇编指令调试方法

    学习ARM汇编时,少不了对ARM汇编指令的调试.作为支持多语言的调试器,gdb自然是较好的选择.调试器工作时,一般通过修改代码段的内容构造trap软中断指令,实现程序的暂停和程序执行状态的监控.为了在 ...

  9. ARM 汇编指令

    ARM汇编程序特点: l         所有运算处理都是发生通用寄存器(一般是R0~R14)的之中.所有存储器空间(如C语言变量的本质就是一个存储器空间上的几个BYTE).的值的处理,都是要传送到通 ...

随机推荐

  1. TensorFlow在win10上的安装与使用(二)

    在上篇博客中已经详细的介绍了tf的安装,下面就让我们正式进入tensorflow的使用,介绍以下tf的特征. 首先tf有它独特的特征,我们在使用之前必须知晓: 使用图 (graph) 来表示计算任务, ...

  2. Concat层解析

    Concat层的作用就是将两个及以上的特征图按照在channel或num维度上进行拼接,并没有eltwise层的运算操作,举个例子,如果说是在channel维度上进行拼接conv_9和deconv_9 ...

  3. html5 构造网页的新方式

    从 html 诞生至今,我们构建 html 页面的使用 html 元素好像并没有太多的进步.在构建 html 页面中,用的最多的是 div 标签.但是应用 div 标签构建 html 页面有一个问题, ...

  4. Eureka简介

    Eureka是Spring Cloud Netfix 的一个子模块,也是核心模块之一,用于云端服务发现.一个基于RestFul的服务,用于定位服务,以实现云端中间层服务发现和中间层转移. 服务注册与发 ...

  5. Dream------Hadoop--Hadoop HA QJM (Quorum Journal Manager)

    In a typical HA cluster, two separate machines are configured as NameNodes. At any point in time, ex ...

  6. Strusts2笔记8--文件的上传和下载

    文件的和上传和下载: (1)文件的上传: Struts是通过拦截器实现文件上传的,而默认拦截器栈中包含了文件上传拦截器,故表单通过Struts2可直接将文件上传,其底层是通过apache的common ...

  7. JavaScript 简单吗

    英文:Aurélien Hervé  译文:众成翻译/msmailcode 这里有一些 Javascript初学者应该知道的技巧和陷阱.如果你已经是专家了,顺便温习一下. Javascript也只不过 ...

  8. InnoDB锁问题

    InnoDB锁问题 InnoDB与MyISAM的最大不同有两点:一是支持事务(TRANSACTION):二是采用了行级锁.行级锁与表级锁本来就有许多不同之处,另外,事务的引入也带来了一些新问题.下面我 ...

  9. java基础23 Math类和Random类

    一.Math数学类 主要是提供很多数学的公式 1.1.Math类的常用方法 abs(int a):绝对值   ceil(double a):向上取整   floor(double a):向下取整   ...

  10. Oracle 函数 “数据控制,指定某些人只能查看他权限范围内的信息”

    create or replace function work_plan_mask (p_schema VARCHAR2,p_table VARCHAR2) return Varchar2 AS -- ...