一、ARM
1.1 ARM 分类
1.1.1 版本号分类
以前分类的是 ARM7,ARM9... ARM11,在 ARM11 之后,就是以 Cortex 系列分类了:
- Cortex-R:应用在实时系统上的系列
- Cortex-M:替代单片机的系列,M0 M3 M4 M7
- Cortex-A:A8 A9 A15 A72 A53
1.1.2 指令集分类
指令集原则上是向下兼容的。
指令集是根据核来分的,比如 ARMv7指令集、ARMv8指令集等等
1.2 ARM 商业模式及半导体公司
1.2.1 IP 核(知识产权)
ARM MIPS X86 PowerPC(IBM)
ARM 出卖 IP 而不卖芯片
1.2.2 半导体公司
主流的半导体公司有三星、高通、苹果、NXP(Freescale)、TI、ST、ATMEL、Ambarella、Amlogic、MTK、海思、全志、瑞芯微、展讯(基带)、炬力、联咏等等。
1.2.3 芯片、处理器和架构的联系
以 S3C2440 为例子:

1.3 ARM 处理器状态和处理器模式
在不同的体系下,有一些概念有所不同。这里主要以 S3C2440 为例子。
1.3.1 处理器状态
- 处理器状态有两种:
- ARM 状态:执行效率高
- THUMB 状态:代码密度好
- ARMV4 中,ARM 状态为32位,THUMB 状态为 16位,但是,在 ARMV7 中,ARM状态为32位,THUMB 状态为 16/32位状态,还有一种 THUMBEE状态,适用于 JAVA 运行的状态。
- 处理器状态的切换指令: BX BLX
- 指令集:
- ARM指令:32位
- THUMB指令:16位
- THUMB2:32/16位
- CORTEX-M 只是指令 THUMB2 指令子集
1.3.2 处理器模式
- 处理器模式共有 7 种:
- usr:用户模式
- fiq:快速中断模式
- irq:普通中断模式
- svc:保护/特权模式
- abt:异常模式
- sys:系统模式
- und:未定义模式
- 设计的目的:提高相应速度
- 注意:保护模式/特权模式,需要 MMU 和代码的支持
1.4 ARM 内部寄存器及 SFR
1.4.1 ARM 内部寄存器
- 此类寄存器设计在 CPU 内部,特点是速度快。
- 一共 37 个寄存器,31 个通用寄存器 和 6 个状态寄存器
- 通用寄存器:R0-R12,R13,R14,R15,R16
- R13(SP):栈指针,不同模式下栈空间是不一样的
- R14(LR):链接寄存器,存放断点,硬件自动完成
- R15(PC):程序指针,取指令的位置
- 状态寄存器:PSR 分为 CPSR、SPSR
- 条件状态:NZCV
- 保留位
- IFT
- 模式位:M4-M0
- 通用寄存器:R0-R12,R13,R14,R15,R16

1.4.2 SFR 特殊功能寄存器
IO 端口/寄存器,它属于外设的组成部分。
ARM 是采用与存储器统一编址的方式使用软件编程控制某一硬件,起使就是编程读写该硬件的寄存器
1.5 ARM 异常处理和存储系统
1.5.1 模式与异常
- 异常的类型:Reset、undefined instruction、swi、prefetch/bort、data/abort、Reserved、IRQ、FIQ
- 处理器的模式:每一个异常对应一种模式,但不是一一对应关系
1.5.2 中断向量表

1.5.3 大端与小端存储
在大端格式中,字中最高有效位 MSB(Most Significant Byte)存储在编号最低的字节中,最低有效位 LSB(Least Significant Byte)存储在编号最高的字节中。因此存储器系统的字节 0 关联到数据行的 24 到 31。

在小端格式中,字中编号最低的字节被认为是最低有效位 LSB,编号最高的字节为最高有效位 MSB。因此存储器系统的字节 0 关联到数据行的 0 到 7。

一、ARM的更多相关文章
- iOS逆向工程之Hopper中的ARM指令
虽然前段时间ARM被日本软银收购了,但是科技是无国界的,所以呢ARM相关知识该学的学.现在看ARM指令集还是倍感亲切的,毕竟大学里开了ARM这门课,并且做了不少的实验,当时自我感觉ARM这门课学的还是 ...
- ARM的栈指令
ARM的指令系统中关于栈指令的内容比较容易引起迷惑,这是因为准确描述一个栈的特点需要两个参数: 栈地址的增长方向:ARM将向高地址增长的栈称为递增栈(Descendent Stack),将向低地址增长 ...
- ARM CPU大小端
ARM CPU大小端: 大端模式:低位字节存在高地址上,高位字节存在低地址上 小端模式:高位字节存在高地址上,低位字节存在低地址上 STM32属于小端模式,简单的说,比如u32 temp=0X1234 ...
- 基于ARM处理器的反汇编器软件简单设计及实现
写在前面 2012年写的毕业设计,仅供参考 反汇编的目的 缺乏某些必要的说明资料的情况下, 想获得某些软件系统的源代码.设计思想及理念, 以便复制, 改造.移植和发展: 从源码上对软件的可靠性和安全性 ...
- EZchip将推全球首款100核64位ARM A-53芯片
EZchip将推全球首款100核64位ARM A-53芯片 2015-02-25 16:32:03 来源:互联网 关键字: 将推 全球 64位 arm EZchip日前表示,将准备开发 ...
- Jetson ARM SeetaFace编译
SeetaFace简介 SeetaFace依赖于OpenCV,对于Tegra on Ubuntu,Nvidia提供libopencv4tegra并且可以使用Cuda加速. 准备工作 1.阅读OpenC ...
- 如何在ARM中创建Express Route
很早之前就想试试Azure的express route,但是一直没有找到合适的机会,正好有个客户需要上express route,所以最近先自己研究研究,防止在做poc的时候耗费更多时间,本次场景我们 ...
- 如何将已部署在ASM的资源迁移到ARM中
使用过Azure的读者都知道,Azure向客户提供了两个管理portal,一个是ASM,一个是ARM,虽然Azure官方没有宣布说淘汰ASM,两个portal可能会在很长的一段时间共存,但是考虑到AR ...
- arm汇编指令
ARM处理器的指令集可以分为跳转指令.数据处理指令.程序状态寄存器(PSR)处理指令.加载/存储指令.协处理器指令和异常产生指令6大指令 一.跳转指令 跳转指令用于实现程序流程的跳转 跳转指令分类 Ⅰ ...
- 生成ARM汇编
使用ndk即可生成arm汇编 1.首先写好hello.c 2.编写makefile #ndk根目录 NDK_ROOT=E:\Android\android-ndk-r10b #编译器根目录 TOOLC ...
随机推荐
- Hadoop 服务SYS CPU过高导致宕机问题
最近某hadoop集群多次出现机器宕机,现象为瞬间机器的sys cpu增长至100%,机器无法登录.只能硬件重启,ganglia cpu信息如下: 首先怀疑有用户启动了比较奇葩的job,导致不合理的系 ...
- 用shell和python实现数组的一个例子
目标是把字符串中的值等分为几段,取每段固定位置的值 shell脚本 #!/bin/bash ele="1 2 3 4 5 6" n= array1=() for x in $ele ...
- linux sed 替换,使用变量,变量中含有特殊字符的处理
文件 test.sh 内容如下: #!/bin/bash export JAVA_HOME=/data/jdk_1.9.0 echo $JAVA_HOME 想把 JAVA_HOME = 后面的内容替换 ...
- Linux驱动开发2——字符设备驱动
1.申请设备号 #include <linux/fs.h> int register_chrdev_region(dev_t first, unsigned int count, char ...
- Java操作数据库之JDBC增删改查
1.java连接MySql数据库 代码区域: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ...
- python上下文管理,with语句
今天在网上看到一段代码,其中使用了with seam:初见不解其意,遂查询资料. 代码: #! /usr/bin/env python # -*- coding:utf-8 -*- import ti ...
- spring boot添加logging不能启动且不报错
1.问题: application.yml中添加logging启动失败,不报错,去除后又正常 logging: config: classpath:test-logback-spring.xml报错 ...
- usb接口类型 简单分类辨识
usb接口类型 简单分类辨识 - [相似百科] 庆欣 0.0 4 人赞同了该文章 1. 先放图,随着越来越多的接触智能设备,会遇到各种各样的usb接口,对于很多人来说,接口类型只有:usb接口,安卓接 ...
- PHP超时提示Fatal error: Maximum execution time of 30,解决方案
PHP执行超时提示如下:Fatal error: Maximum execution time of 30 seconds exceeded in D:\php\AppServ\www\sum3\te ...
- C++笔记(4)——引用及结构体
引用 C++中有一个很方便的语法叫做引用,作用就是使得函数能够对传入的参数作出全局有效的改动.用法很简单,就是在传入参数的类型后面加上&就可以指明传入的参数是引用. 例子: #include ...