⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 arm.txt

📁 基于LINUX操作系统下的各种详细配置(如FTP
💻 TXT
字号:
Chapter 1 ARM概述

处理器模式
用户模式(User,usr)			正常程序执行的模式
快速中断模式(FIQ,fiq)		高速数据传输和通道处理
外部中断模式(IRQ,irq)		用户通常的中断处理
特权模式(SUPERVISOR,sve)		OS使用的一种保护模式
数据访问中止模式(ABORT,abt)		用户虚拟存储和存储保护
未定义指令模式(Undefined,und)	用于通过软件支持硬件协处理器
系统模式(System,sys)			运行特权级的操作系统任务

寄存器介绍
ARM处理器一共有37个寄存器
31个通用寄存器	32bit
6个状态寄存器	32bit
每一种处理器模式都包含一组相应的寄存器,任意时刻有15个寄存器(R0-R14),1 or 2个状态寄存器,1 个PC 可见.

通用寄存器
未备份寄存器(unbanked register):
	R0-R7	      所有的处理器模式都使用同一个处理器,模式切换时有可能造成数据破坏
      	      没有任何特殊用途,随意使用
备份寄存器(banked register)
	R8-R12      每一个寄存器对应2个物理寄存器(还一个专用于快速中断模式)
	R13R14      每一个寄存器对应6个物理寄存器(usr and sys 共用一个,其他每个模式都有专用)
		      R13通常用来保存栈指针
		      R14 = 链接寄存器 = LR
		      每一种处理器模式的R14一般用来存放当前子程序的返回地址
		      当通过BL或BLX调用子程序时,R14被置成该子程序的返回地址,在子程序中,当把R14复制到PC中时,程序即返回.
		      当异常中断发生时,该模式的R14被置为该模式将要返回的地址,对于有些模式,R14的值可能与将返回的地址有一
		      个常数偏移值.
		      R14也可以作为通用寄存器使用.
程序计数器PC=R15
		      PC值 = 当前指令地址 + 8BYTE = 当前指令的下两条指令的地址(字对齐,bit0 and bit1总是为0);

有关R15注意事项的讨论:
<-待补->

程序状态寄存器
	CPSR		当前程序状态寄存器,任何模式下都可以访问.
	CPSR格式	_____________________________________________
			31|30|29|28|27|   26   |7|6|5|4 |3 |2 |1 |0 |
			N |Z |C |V |Q |DNM(RAZ)|I|F|T|M4|M3|M2|M1|M0|
	条件标志位	N(negative) Z(zero) C(carry) V(overflow)
		N	补码表示的有符号数晕眩时,N=1表示结果为负,N=0表示结果为正或者0;
		Z	=1表示运算结果为0,=1表示结果为负
		C	=1 加法指令中上溢出,减法指令中下溢出,移位指令中最后一次溢出位的数值
		V	符号位溢出
	Q标志位	DSP指令是否发生溢出(ARMv5以上)
	控制位		低8位I,F,T,M[4:0],异常中断时这些位才发生变化,特权级模式下,软件可以修改
			这些位.
	中断禁止位	I=1时,禁止IRQ中断,F=1时,禁止FIQ中断.
	T控制位	=0表示执行ARM指令,=1表示执行Thumb指令.(ARM版本相关)
	M控制位	控制处理器模式
			0b10000 = User
			0b10001 = FIQ
			0b10010 = IRQ
			0b10011 = Supervisor
			0b10111 = Abort
			0b11011 = Undifined
			0b11111 = System
	CPSR其他位	未定义,用于扩展.

ARM中异常中断的种类
	复位		处理器复位引脚有效时产生复位中断,程序跳转到复位中断处理程序执行.
	未定义指令	处理器或者协处理器认为当前指令未定义时产生该中断,可用来仿真浮点向量运算.
	软件中断	用户自定义的中断,usr下调用特权级指令,RTOS中可实现系统功能调用.
	指令预取中止	处理器预取指令地址不存在或者该地址不允许访问.
	数据访问中止	数据地址不存在或者不允许访问
	外部请求中断	处理器外部中断引脚有效,CPSR的I位置0时产生该中断,系统外设使用该中断请求
			处理器服务.
	快速请求中断	处理器外部快速请求中断引脚有效,CPSR的F位置0时产生该中断.

异常中断的相应过程
	保存处理器当前的状态		copy CPSR -> SPSR_<MODE>
	设置CPSR中相应的位
	将LR_<MODE>设置成返回地址
	PC设置成该异常中断的中断向量地址.

从中断中返回
	copy SPSR_<MODE> -> CPSR
	copy LR_<MODE>   -> PC
	复位中断部需要返回.

ARM体系的存储空间
	使用单一平板地址空间,大小为2^32BYTE.
	地址空间可以看作2^30个32bit的单元,这些单元的地址可以被4整除,低2位为0b00.地址address的数据包括
		address+0 address+1 address+2 address+3四个BYTE的数据.
	地址空间也可以看作2^31个16bit的单元...(ARMv4以上)
	Notice:字 = 32bit,半字 = 16bit,字节 = 8bit.

存储器格式

非对齐的存储访问操作
	<-待补->

指令预取和自修改代码
	<-待补->


Chapter 2 ARM指令分类及其寻址方式

ARM指令的分类		跳转,数据处理,PSR传输,Load/Store,协处理器指令和异常中断产生指令
编码格式		______________________________________________________
			|31 28|27  25|24  21|20|19  16|15  12|11 8|7 0       |
			|cond |0 0 1 |opcode|S |  Rn  |  Rd  |shifter_operand|
语法格式		<opcode>{<cond>}{S} <Rd>,<Rn>,<shifter_operand>
			opcode		指令助记符
			cond			指令执行的条件
			S			是否影响CPSR值
			Rd			目标寄存器
			Rn			第一个操作数的寄存器
			shifter_operand	第二个操作数
ARM指令的条件码域
	<-待补->

数据处理指令的操作数寻址方式
	立即数方式	每个立即数由一个8bit的常数循环右移偶数位得到,循环右移的位数由一个四位的
			二进制数的两倍表示.
			<immediate> = imm_8 >> (2 * rotate_imm)
			if <immediate> between 0,0xFF,imm_8 = <immediate>,rotate_imm = 0
			or 汇编编译器选择使rotate_imm最小的编码方式.
	寄存器方式	略
	寄存器移位方式	略

字及无符号字节的Load/Store指令寻址方式


Chapter 3 ARM指令集介绍
	<-待补->

Chapter 4 ARM汇编语言程序设计

符号定义伪操作
GBLA GBLL GBLS	声明全局变量并将其初始化 
LCLA LCLL LCLS 	声明局部变量并将其初始化
SETA SETL SETS	给变量赋值
RLIST			为通用寄存器列表定义名称
CN	  		为协处理器的寄存器定义名称
CP	  		为协处理器定义名称
DN SN	  		为VFP的寄存器定义名称
FN 	  		为FPA的浮点寄存器定义名称

数据定义伪操作
	LTORG		声明一个数据缓冲池(literal pool)的开始
	MAP		定义一个结构化的内存表的首地址
	FIELD		结构化内存表中的一个数据域
	SPACE		分配一块内存单元并用0初始化
	DCB		分配一段字节内存单元,并用指定的值初始化
	DCD,DCDU	分配一段字的内存单元并用指定的值初始化
	DCDO		分配一段字的内存单,并将单个单元的内容初始化成该单元相对于静态基址寄存器的偏移量
	DCFD,DCFDU	分配一段双字的内存单,用双精度浮点数据初始化
	DCFS,DCFSU	分配一段字的内存单,用单精度浮点数据初始化
	DCI		分配一段字节的内存单元,用指定的数据初始化,指定内存单元中存储的是代码而不是数据
	DCQ,DCQU	分配一段双字的内存单元并用64bit的数据初始化
	DCW,DCWU	分配一段半字的内存单元并用指定的数据初始化
	DATA		在代码段中使用数据.(不推荐使用)

汇编控制伪操作
	<-待补->
	
其他伪操作
	<-待补->

ARM汇编语言伪指令
	ADR		将基于PC的地址值或基于寄存器的地址值读取到寄存器中.
	ADRL		同上,读取的地址范围更大.
	LDR		将一个32位的常数或者地址值读入寄存器
	NOP		空操作

ARM汇编语言格式
	<-待补->

ARM汇编语言程序格式
	<-待补->

Chapter 5 ARM存储体系

ARM中用于存储管理的协处理器CP15

访问CP15寄存器的指令
	MCR		ARM Registers  -> CP15 Registers Data Transport
	MRC		CP15 Registers -> ARM Registers  Data Transport
	MCR and MRC only for System mode.if you want to access CP15's Register in User
	mode,you'd better use SWI call which defined by OS.

CP15's Registers
       No.		Basic			in MMU		in PU
       0		ID(Read)		ID&Cache Type
       1		控制位			各种控制位
       2		存储保护和控制		地址转换表基地址	Cachability控制位
       ....

存储管理单元MMU
	<-待补->

MMU中的地址变换过程
	<-待补->

快表的操作
	<-待补->

高速缓冲以及写缓冲区
	<-待补->

快速上下文切换
	<-待补->

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -