整理ARM处理器寄存器和汇编指令系统Word格式文档下载.docx
- 文档编号:17331376
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:12
- 大小:24.25KB
整理ARM处理器寄存器和汇编指令系统Word格式文档下载.docx
《整理ARM处理器寄存器和汇编指令系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《整理ARM处理器寄存器和汇编指令系统Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
Z
C
V
DNM(RAZ)
I
F
T
M4
M3
M2
M1
M0
3.ARM的常用汇编指令
1)基本寻址方式
包括有寄存器寻址、立即寻址、寄存器移位寻址、寄存器间寻址、变址寻址、多寄存器寻址、堆栈寻址、块复制寻址和相对寻址
2)条件执行
几乎所有的ARM指令都可以包含一个可选的条件码,句法中以{cond}来标识。
可用的条件码如下面所示。
几乎所有的ARM数据处理指令均可以根据执行结果来选择是否更新条件码标志,即在指令中包含后缀S。
操作码[31:
28]
助记符后缀
标
志
含义
0000
EQ
Z置位
相等
3
0001
NE
Z清零
不等
4
0010
CS/HS
C置位
大于或等于(无符号>
=)
5
0011
CC/LO
C清零
小于(无符号<
)
6
0100
MI
N置位
负
7
0101
PL
N清零
正或零
8
0110
VS
V置位
溢出
9
0111
VC
V清零
未溢出
10
1000
HI
C置位且Z清零
大于(无符号>
11
1001
LS
C清零或Z置位
小于或等于(无符号<
12
1010
GE
N和V相同
带符号>
=
13
1011
LT
N和V不同
带符号<
14
1100
GT
Z清零且N和V相同
带符号>
15
1101
LE
Z置位或N和V不同
带符号<
16
1110
AL
任何
总是(通常省略)
3)存储器访问指令
3.1)LDR和STR(字与无符号字节)语法如下
op
{cond}
{B}
{T}
Rd,
[Rn]
[Rn,
Flexoffset]
{!
}
//前索引偏移
label
[Rn],
Flexoffset//后索引偏移
其中:
op是操作码即指令LDR或STR。
cond就是上面所说的条件码,因此指令可以变成LDREQ或STRNE类似的名称,表示满足某些条件时该条指令才会执行。
B可选后缀,表示传送Rd的最低有效字节,就是所谓的无符号字节传送,字节加载的时候是用'
0'
来扩展到32位的。
T可选后缀,即使处理器是在特权模式下,存储系统也将访问看成是处理器在用户模式下。
不能和前索引偏移一起使用。
Rd用于加载或存储的ARM寄存器
Rn存储器的基址寄存器。
若指令是带写回的前索引或后索引(后索引都是写回的),则Rd和Rn不能相同
Flexoffset加到Rn上的灵活的偏移量
label程序相对偏移表达式。
label必须是当前指令的+-4KB范围内
!
可选后缀,前索引写回标志,若Rn是R15,则不能用后缀!
Flexoffset的句法包括下面两种
#expr
{-}
Rm
{,
shift}
-
是可选符号,表示从Rn中减去偏移量,否则是加
expr
表达式,取值范围-4095~+4095的整数
内含偏移量的寄存器。
Rm不允许是R15
shift
Rm的可选移位方法,可以是下列形式的任何一种
ASR
n算术右移n位(1<
=n<
=32)
LSL
n逻辑左移n位(0<
=31)
LSR
n逻辑右移n位(1<
ROR
n循环右移n位(1<
RRX
循环右移1位,带扩展
3.2)LDR和STR(半字和带符号字节)语法如下:
type
offset]
}
offset
type必须是以下所列其中之一
SH对带符号半字(仅LDR)
H对无符号半字
SB对带符号字节(仅LDR)
必须是当前指令+-255字节范围
offset加在Rn上的偏移量,可以是以下两种形式之一
#expr
//值为+-255范围内的整数。
{-}Rm
3.3)LDR和STR(双字)加载两个相邻的存储器和存储两个相邻的寄存器,语法如下:
D
Rd加载或存储寄存器其中一个,另一个是R(d+1)。
但Rd必须是偶数寄存器,且不能是R14。
Rn除非指令为零偏移,或不带写回的前索引,否则Rn不允许与Rd和R(d+1)相同
offset加在Rn上的偏移量
3.4)LDM和STM加载多个寄存器或存储多个寄存器,可以传送R0~R15的任何组合
mode
Rn{!
},
reglist{^}
mode是下列情况中之一:
IA每次传送后地址加1
IB每次传送前地址加1
DA每次传送后地址减1
DB每次传送前地址减1
FD满递减堆栈
ED空递减堆栈
FA满递增堆栈
EA空递增堆栈
Rn基址寄存器,传送数据的初始地址。
不允许是R15
可选后缀。
若有!
,则最后的地址写回Rn
reglist加载或存储的寄存器列表可以写出如下形式
{R0,R2,R9}
{R3-R6,R11,R12}
{R0,R4-R7,LR}
3.4)SWP
在寄存器和存储器之间进行数据交换。
SWP
Rm,
B可选后缀。
若有B,则是交换字节,否则交换字
Rd数据从存储器加载到Rd
RmRm的内容存储到存储器。
如果Rm和Rd的相同,则是交换寄存器和存储器的内容
RnRn的内容指定要进行数据交换的存储器的地址。
Rn必须和Rm和Rd不同
4)ARM数据处理指令
4.1)灵活的第二操作数,在数据处理指令中会经常出现第二操作数,即Operand2,它有如下的两种可能形式。
#
immed_8r
Rm{,
shift}
immed_8r取值为数字常量的表达式。
常量必须对应8位位图在32位字中被循环移位偶数位(0,2,4,6,...,28,30)后的值
合法的常量有:
0xFF,0x104,0xFF0,0xFF000,0xF0000000F等
非法的常量有:
0x101,0x102,0xFF1,0xFF04等
存储第二操作数数据的寄存器,可以用各种方法对寄存器中的位图进行移位或循环移位,操作结果用于Operand2
但Rm本身不改变。
shift
对Rm的可选移位方法,可以是以下方法的任何一种
typeRs其中type为上面ASR、LSL、LSR、ROR中的一种;
Rs为提供移位量的寄存器,仅使用最低有效字节
4.2)ADD、SUB、RSB、ADC、SBC和RSC
{S}
Rn,
Operand2
是上面众多指令中的一个
S
可选后缀,会根据结果来更新条件码标志
Rd
结果寄存器
Rn
保存第一操作数的寄存器
Operand2
第二操作数
ADD表示Rn加Operand2的值存到Rd
SUB表示Rn减去Operand2
RSB表示Operand2减去Rn
ADC将Rn和Operand2相加后再加上进位标志
SBC从Rn的值中减去Operand2的值,若进位标志是清零的,则结果减去1
RSC从Operand2中减去Rn的值,若进位是清零的,则结果减去1
4.3)AND、ORR、EOR和BIC
AND是与、ORR是或、EOR是异或和BIC是位清零
都是Rn和Operand2中的值做处理,然后结果保存在Rd中
BIC用于将Rn中的位于Operand2中相应位的反码,进行与操作。
4.3)MOV和MVN传送与传送非
MOV
Rd,Operand2
MVN
MOV将Operand2中的值拷贝到Rd中
而MVN将Operand2的值进行按位逻辑非之后再传送到Rd
4.4)CMP和CMN比较与比较反值
CMP
CMN
CMP比较大小,从Rn中减去Operand2的值,但丢弃结果,更新标志位,指令的主要目的是更新标志位
CMN是将Rn和Operand2相加,丢弃结果再更新标志位。
4.5)TST和TEQ测试和测试相等
TST
TEQ
TST对Rn和Operand2的值进行按位与操作,更新标志位,丢弃结果
TEQ对Rn和Operand2的值进行异或操作,更新标志位,丢弃结果
4.6)CLZ前导零计数
CLZ
Rm
Rd结果寄存器,不允许是R15
Rm操作数寄存器。
CLZ对Rm中的前导零的个数进行计数,结果放在Rd中,若Rm全为0,则结果为32
若位[31]是1,则结果为0
4.7)MUL和MLA乘法和乘加运算
MUL
Rd,Rm,Rs
MLA
Rd,Rm,Rs,Rn
结果寄存器,不能使R15
Rm,Rs,Rn
操作寄存器,不能是R15,Rd不能和Rm相同
将Rm和Rs相乘,并将最低有效32位结果放在Rd中
将Rm和Rs相乘,再加上Rn的值,将最低有效32位结果放在Rd中
4.8)UMULL、UMLAL、SMULL和SMLAL无符号和带符号长整数乘法和乘加,结果是64位
{cond}{S}
RdLo,RdHi,Rm,Rs
RdLo和RdHi
是结果寄存器
Rm和Rs
是操作数寄存器
UMULL将Rm和Rs中的值解释为无符号整数。
将两数相乘,并将结果的最低32位放RdLo中,高32位放RdHi中
UMLAL将Rm和Rs中的值解释为无符号整数。
将两数相乘,并将结果加回到RdLo和RdHi的64位无符号整数上。
SMULL将Rm和Rs中的值解释为有符号补码整数。
SMLAL将Rm和Rs中的值解释为有符号补码整数。
并将结果加回到RdLo和RdHi的64位无符号整数上。
5)ARM转移指令
5.1)B和BL跳转指令
B
BL
label
是程序相对偏移表达式。
两条指令都会令程序转移到label上,而BL还会将原来的下一条指令地址保存在R14上
6)ARM协处理指令
7)其他指令
7.1)SWI软件中断
7.2)MRS
将CPSR或SPSR的内容保存到寄存器中
MRS
Rd,psr
Rd目标寄存器,Rd不允许为R15
psrCPSR或SPSR
7.3)MSR
将立即数或通用寄存器的内容加载到CPSR或SPSR的指定区域
MSR
<
psr>
_<
fields>
#immed_8r
Rm
psr
即是CPSR或SPSR
fileds是制定传送区域,可以是
c
控制域屏蔽字节(PSR[7:
0])
x
扩展域屏蔽字节(PSR[15:
8])
s
状态域屏蔽字节(PSR[23:
16])
f
标志域屏蔽字节(PSR[31:
24])
2)按发布权限分。
环境标准按发布权限可分为国家环境标准、地方环境标准和行业环境标准。
8)伪指令
(2)疾病成本法与人力资本法8.1)ADR将程序的相对偏移或寄存器相对偏移地址加载到寄存器中
3.建设项目环境影响评价文件的审查要求1
ADR
register,expr
register
是加载的寄存器
3.评估环境影响的价值(最重要的一步):
采用环境经济学的环境经济损益分析方法,对量化后的环境功能损害后果进行货币化估价,即对建设项目的环境费用或环境效益进行估价。
是程序相对偏移或寄存器相对偏移表达式,取值可以是
3)选择价值。
选择价值(OV)又称期权价值。
我们在利用环境资源的时候,并不希望它的功能很快消耗殆尽,也许会设想未来该资源的使用价值会更大。
非字节对齐地址-255~255
1.筛选环境影响:
环境影响被筛选为三大类,一类是被剔除、不再作任何评价分析的影响,如内部的、小的以及能被控抑的影响;
另一类是需要作定性说明的影响,如那些大的但可能很不确定的影响;
最后一类才是那些需要并且能够量化和货币化的影响。
字节对齐地址-1020~1020
请注意,这条指令是用来获取相对偏移地址的。
第二节 安全预评价即是用当前PC的值,去减去某一个适当的值(编译器自动计算),从而得到expr这个标号的相对地址,将这个标号的相对于当前pc的偏移地址存储到register中。
正是因为这样,这条指令才是一条伪指令,这样的好处是可以绕过程序入口地址的影响,而始终能跳转到准确的地址,因为B这样的跳转指令是跳转到绝对地址上的,而ADR可以获取到一个相对于当前PC的地址,所以用处非常大。
8.2)LDR用常量或地址加载寄存器
LDR
register,=[expr
|
label-expr]
1.法律register
加载寄存器
(3)对环境影响很小、不需要进行环境影响评价的建设项目,填报环境影响登记表。
赋值成数字常量
label-expr
程序相对偏移或外部表达式
(3)介绍评价对象的选址、总图布置、水文情况、地质条件、工业园区规划、生产规模、工艺流程、功能分布、主要设施、设备、装置、主要原材料、产品(中间产品)、经济技术指标、公用工程及辅助设施、人流、物流等概况。
汇编器可自动识别数字常量,从而完成对register赋值的操作。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 整理 ARM 处理器 寄存器 汇编 指令系统
![提示](https://static.bdocx.com/images/bang_tan.gif)