arm A8的指令集为ARM V7-A
这里可从arm官网下载其文档http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0406b/index.html
Instruction Cycle timing会有介绍
这里列下手册笔记:
一. 1.ARM指令长度:
a. 32bits (ARM状态)
b.16bits (Thumb状态)
两者关系;ARM指令集支持ARM核所以特性,高效、快速;Thumb指令集具有灵活,小巧特征。
2.ARM一般支持3中数据类型
a.字节:8-bits
b.半字:16bits
c.字:32bits
3.字必须4字节边界对齐
二.寻址分类
1.寄存器寻址
MOV R1,R2;将R2的值存入R1
SUB R0,R1,R2;将R1的值减去R2的值,结果存在R0
2.立即数寻址
指:数据包含在指令中,取出指令就取出可以立即使用的操作数。
SUBS R0,R0,#1 ;R0-1结果存入R0.并且影响标志位
MOV R0,#0xFF000; 将立即数0xFF000装入R0寄存器
3.寄存器移位寻址
MOV R0,R2,LSL #3; R0=R2*8
4.寄存器间接寻址
LDR R0,[R2]; R2为源操作数的地址指针,[R2]表示,地址所在处的数据值;
; 将R2指向的存储单元的数据读出来,保存在R2中
SWP R1,R1,[R2]; 将R2指向存储单元的值和寄存器R1的值交换。
5.基址寻址
指:将基址寄存器的内容与指令中给出的偏移量相加减,形成有效的地址。
LDR R2, [R3,#0x0c]; 将R2+0x0c地址指代的存储器单元的数据,放入R2
6.多寄存器寻址
指:一次可传送多个寄存器值
LDMIA R1!,{R0-R11};从R1指向的存储单元依次读取48个指节,放入R0-R11中。(R1自动加4)
7.堆栈寻址
堆栈是一个按特定顺序进行存取的存储区,操作顺序为LIFO。堆栈的寻址是隐含的,它使用一个专门的寄存器(堆栈指针)指向一块存储区域。
指针所指向的存储单元为堆栈的栈顶,存储器堆栈可分为两种:
a.向上生长:向高地址方向生长,为递增堆栈。
b.向下生长:向底地址方向生长,称为递减堆栈
可以组合四种类型的堆栈方式:
a.满递增:LDMFA,STMFA
b,空递增:LDMEA,STMEA
c.满递减:LDMFD,STMFD
d.空递减:LDMED,STMED
8.块拷贝寻址
多寄存器传送指令用于将一块数据从存储器的某一个位置拷贝到另一个位置。
STMIA R0!,{R1-R7};将R1-R7的数据保存到存储器中。
;存储指针R0在保存第一个值之后增加
;增长方向为向上增长。
9.相对寻址
基址寻址的一种变通,由程序PC提供基准地址,指令中的地址码作为偏移量,两者相加后得到的地址即为操作数有效地址。
如:
BL SUBR1;调用到SUBR1子程序
BEQ LOOP;条件跳转到LOOP标号处
...
LOOP MOV R6,#1
...
SUBR1 ...