[A8 学习笔记] A8 汇编基础

  1. A8 处理器工作模式

    这点和以往的 arm7 arm11 是一致的。有8个工作模式:

  • 用户模式是通常的ARM程序的执行状态,并用于执行大多数应用程序
  • 快速中断(FIQ)模式是用于处理快速中断
  • 中断(IRQ)模式是用于通用的中断处理
  • 管理模式是一个操作系统保护模式
  • 中断模式是当数据出错或者预取指令出错时进入的模式
  • 系统模式是操作系统的一个特权用户模式
  • 未定义的模式进入一个未定义指令异常发生时
  • 监控方式为安全扩展安全模式安全监控代码。

除了用户模式模式统称为特权模式。特权模式用于服务中断或异常,或访问受保护的资源。下面的表格显示了处理器的结构模式。


Modes


Mode type


Security state of core


 


 


NS bit = 1


NS bit = 0


User


User


Nonsecure


Secure


FIQ


Privileged


Nonsecure


Secure


IRQ


Privileged


Nonsecure


Secure


Supervisor


Privileged


Nonsecure


Secure


Abort


Privileged


Nonsecure


Secure


Undefined


Privileged


Nonsecure


Secure


System


Privileged


Nonsecure


Secure


Monitor


Privileged


Secure


Secure

  1. 寻址方式
  1. 立即寻址

例:

ADD R0, R0, #0x1 ;R0 <- R0 + 1

ADD R0, R0, #0x3f ;R0 <- R0 + 0x3f

以上两条指令,第二个源操作数为立即数。

  1. 寄存器寻址

例:

ADD R0, R1, R2 ;R0 <- R1 + R2

将寄存器 R1 和 R2 存放的内容相加,结果存放在寄存器 R0 中。

  1. 寄存器间接寻址

例:

LDR R0, 。 [R1] ;R0 <- [R1]

STR R0, [R1] ;[R1] <- R0

第一条指令,将 R1 的值作为地址,取出存储器中的数据传送到 R0 中;第二条指令,将 R0 的数据存储到 R1 的值为地址的存储器里面。

  1. 多寄存器寻址

例:

LDMIA R0, {R1,R2,R3,R4} ;R1 <- [R0],R2 <- [R0 + 4],

;R3 <- [R0 +8],R3 <- [R0 + 12]

STMIA R0, {R3-R5,R10} ;[R0] <- R3,[R0 + 4] <- R4

;[R0 + 8] <- R5,[R5 + 12] <- R10

这种寻址方式可以用一条指令完成传送最多 16 个通用寄存器的值。指令中的后缀 IA 表示在每次执行完加载/存储操作后,R0 按字长增加。上面二条指令中,前者表示读出以 R0 的值为地址里面的内容赋给 R1、读出R0+4 的值为地址里面的内容赋给 R2、依次类推;后者表示将 R3~R5、R10 的数据保存到 R0 指向的地址,R0 的地址按字长增加。

  1. 常用ARM指令集

1. 跳转指令

跳转指令用于实现程序流程的跳转,在 ARM 程序中有两种方法可以实现程序

流程的跳转:

① 使用专门的跳转指令。

② 直接向程序计数器 PC 写入跳转地址值。

ARM 汇编中总共有四种跳转指令,如下:

① B 跳转指令(注:只能跳转前后 32MB 的地址空间)B 指令编码中的跳转地址值是相对当前 PC 的一个偏移量,经汇编器计算得到跳转的绝对地址。

② BL 带返回的跳转指令,BL 指令在执行跳转的同时将转移指令的下一条指令的地址复制到当前处理器模式下的链接地址 LR 中,这一般用于子程序的调用和返回。

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

④ BX 带状态切换的跳转指令

2. 数据处理指令

数据处理指令分类:

① 数据传送指令

例:

MOV R1,R0 ;将寄存器 R0 的值传送到寄存器 R1

MOV R1,R0,LSL #3 ;将寄存器 R0 的值左移 3 位后传送到 R1

② 比较指令

例:

CMP R1,#100 ;将寄存器 R1 的值与立即数 100 相减,并根据结果设置 CPSR 的标志位。

TST R1,#0xfffe ;将寄存器 R1 的值与立即数 0xfffe 按位与,并根据结果设置 CPSR 的标志位。

③ 算数运算指令

例:

ADD R0, R1, #256 ;R0 = R1 + 256

SUB R0, R1, R2 ;R0 = R1 –R2

RSB R0, R2, R3, LSL #1 ;R0 = (R3 << 1) – R2

④ 逻辑运算指令

例:

ADD R0,R0, #3 ;该指令保持 R0 的 0、1 位,其余位清零。

ORR R0,R0, #3 ;该指令置 R0 的 0、1 位为 1,其余位保持不变。

BIC R0, R0, #0xf8 ;该指令清除 R0 的高 5 位,其余位保持不变。

3. 乘法指令

例:

MUL R0, R1, R2 ;R0 = R1 * R2

4. 加载/存储 指令

ARM 处理器支持 加载/存储指令用于在寄存器和存储器之间传送数据

例:

LDR R0, [R1,R2] ;将存储器地址为 R1+R2 的字数据读入寄存器R0

LDR R0, [R1,R2]! ;将存储器地址为 R1+R2 的字数据读入寄存 R0并将新地址R1+R2 写入 R1

STR R0,[R1] , #8 ;将 R0 中的字数据写入以 R1 为地址的存储器中,并将新地址 R1+8 写入 R1

STR R0,[R1,#8] ;将 R0 中的字数据写入以 R1+8 为地址的存储器中

5. 程序状态寄存器访问指令

① MSR 通用寄存器到程序状态寄存器的数据传送指令

② MRS 程序状态寄存器到通用寄存器的数据传送指令

例:

MSR CPSR, R0 ;传送 R0 的内容到 CPSR 寄存器

MRS R0, CPSR ;传送 CPSR 的内容到 R0 寄存器

[A8 学习笔记] A8 汇编基础

时间: 2024-10-19 16:02:38

[A8 学习笔记] A8 汇编基础的相关文章

加壳学习笔记(二)-汇编基础

7.简单的汇编语法:   堆栈平衡  PUSH,POP功能: 把操作数压入或取出堆栈语法: PUSH 操作数 POP 操作数格式: PUSH r PUSH M PUSH data POP r POP mPUSHF,POPF,PUSHA,POPA功能: 堆栈指令群格式: PUSHF POPF PUSHA POPAADD,ADC功能: 加法指令语法: ADD OP1,OP2 ADC OP1,OP2格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data影响标志: C,P,A,

[A8 学习笔记] A8 启动顺序

其实标题不应该这么说,ARM公司并没有规定启动顺序,这完全是由IC厂商自己决定的.以我手上三星公司的S5pv210为例,并以三星公司的官方用户手册为准. S5PV210由64kB ROM和96kB SRAM作为内部存储器.在启动过程中,使用内部64kB ROM和内部96K SRAM.S5PV210从内部ROM启用安全启动,这保证了映像不能被未经授权的用户修改. 由以下几种启动设备可供选择: General NAND Flash memory OneNAND memory SD/ MMC memo

卷积神经网络(CNN)学习笔记1:基础入门

卷积神经网络(CNN)学习笔记1:基础入门 Posted on 2016-03-01   |   In Machine Learning  |   9 Comments  |   14935  Views 概述 卷积神经网络(Convolutional Neural Network, CNN)是深度学习技术中极具代表的网络结构之一,在图像处理领域取得了很大的成功,在国际标准的ImageNet数据集上,许多成功的模型都是基于CNN的.CNN相较于传统的图像处理算法的优点之一在于,避免了对图像复杂的

APUE 学习笔记(一) Unix基础知识

1. Unix 体系结构 内核的接口被称为系统调用 公用函数库构建在系统调用接口之上 应用软件既可以调用公用函数库,也可以直接进行系统调用 2. 文件和目录 目录操作函数:opendir---> readdir---> closedir struct dirent 结构体 stat 系统调用 3.程序.进程.线程 程序:存放在磁盘上.并处于某个目录中的一个可执行文件.使用exec系列函数将程序从磁盘读入存储器,并使其执行 进程:程序的执行实体.进程控制的3个函数:fork.exec.waitp

Day3: Python学习笔记之计算机基础——网络片

Day3: Python学习笔记之计算机基础--网络片 什么是互联网协议以及为何要有互联网协议? ?互联网协议本质上是为了方便连接两台计算机而指定的一系列统一的标准. osi五层模型 计算机之间要实现数据传输必须要经过以下五层协议: ? 模型 ,协议 ,硬件 ? 应用层, http协议.用户自定义协议 ? 传输层, TCP/UPD协议 ,四层交换机.四层路由器 ? 网络层, IP协议, 三层交换机.路由器 ? 数据链路层, 以太网.电信号分组, 网桥.以太网交换机.网卡 ? 物理层, 传递电信号

[Spring MVC]学习笔记--基础Servlet

Servlet是一个用Java编写的应用程序,在服务器上运行,处理请求的信息并将其发送到客户端. Servlet的客户端提出请求并获得该请求的响应. 对于所有的客户端请求,只需要创建Servlet的实例一次(这是和CGI(Common Gateway Interface)的重要区别,CGI是每个请求创建一个新实例),因此节省了大量的内存. Servlet在初始化后即驻留内存中,因此每次作出请求时无需加载. 下面通过一个例子来介绍如何编写一个简单的Servlet. 准备工作: 1. 下载并启动To

Linux程序设计学习笔记----多线程编程基础概念与基本操作

转载请注明出处,http://blog.csdn.net/suool/article/details/38542543,谢谢. 基本概念 线程和进程的对比 用户空间资源对比 每个进程在创建的时候都申请了新的内存空间以存储代码段\数据段\BSS段\堆\栈空间,并且这些的空间的初始化值是父进程空间的,父子进程在创建后不能互访资源. 而每个新创建的线程则仅仅申请了自己的栈,空间,与同进程的其他线程共享该进程的其他数据空间包括代码段\数据段\BSS段\堆以及打开的库,mmap映射的文件与共享的空间,使得

深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-01-CNN基础知识点

第一天<CNN基础知识点>From:Convolutional Neural Networks (LeNet) 神经认知机. CNN的灵感来源在诸多论文中已经讲得很全面了,就是伟大的生物发现Receptive Field(感受野细胞).根据这个概念提出了神经认知机.它的主要作用就是Recept部分图像信息(或特征),然后通过分层递交相连,将各个局部特征组合成整个图像特征. 需要仔细阅读的论文包括: (1) 第一篇关于感受野功能的论文Receptive fields and functional

Scala学习笔记一之基础语法,条件控制,循环控制,函数,数组,集合

前言:Scala的安装教程:http://www.cnblogs.com/biehongli/p/8065679.html 1:Scala之基础语法学习笔记: 1:声明val变量:可以使用val来声明变量,用来存放表达式的计算结果,但是常量声明后是无法改变它的值的,建议使用val来声明常量: 声明var变量:如果要声明可以改变的引用,可以使用var变量,声明的常量的值可以改变. 3:指定类型:无论声明val变量还是声明var变量.都可以手动指定其类型,如果不指定,scala会自动根据值,进行类型