ARM汇编中^、!、cxsf符号和movs等指令使用
-----------------------------
7.spsr_cxsf,cpsr_cxsf的理解
c-control field maskbyte(PSR[7:0])
x-extension field maskbyte(PSR[15:8])
s-status field maskbyte(PSR[23:16)
f-flags field maskbyte(PSR[31:24]).
老式声明方式:cpsr_flg,cpsr_all在ADS中已经不在支持
cpsr_flg对应cpsr_f
cpsr_all对应cpsr_cxsf
需要使用专用指令对cpsr和spsr操作:mrs,msr
mrs tmp,cpsr //读取CPSR的值
bic tmp,tmp,#0x80 //如果第7位为1,将其清0
msr cpsr_c,tmp //对控制位区psr[7:0]进行写操作
-----------------------------
8.cpsr的理解
CPSR = Current Program Status Register
SPSR = Saved Program Status Registers
CPSR寄存器(和保存它的SPSR寄存器)
(上图)
N,Z,C,V称为ALU状态标志
N:如果结果是负数则置位
Z:如果结果是零则置位
C:如果发生进位则置位
V:如果发生溢出则置位
I:置位表示禁用IRQ中断,清0表示使能IRQ
F:置位表示禁用FIQ中断,清0表示使能FIQ
T:置位表示系统运行在Thumb态,清0表示运行在ARM态
M[4:0]:
10000 User模式,和System系统模式一样
10001 FIQ模式
10010 IRQ模式
10011 SVC超级管理模式
10111 Abort数据异常模式
11011 Undefined未定义指令模式
11111 System系统模式,和User模式一样
举例:
ands r2,r2,#7使用运算结果改变标志位,如果运算结果r2=0,那么Z置位,EQ相等判断成立
subs r2,r2,#1使用运算结果改变标志位,如果运算结果r2=0,那么Z置位,EQ相等判断成立
beq wordcopy
-----------------------------
9.指令后缀和条件判断
(上图)
EQ :等于
NE :不等
CS :无符号>=
CC :无符号
MI :负数
PL :非负[>=0]
VS :溢出
VC :无溢出
HI :无符号>
LS :无符号<=
GE :有符号>=
LT :有符号
GT :有符号>
LE :有符号<=
AL :总是[默认]
对于arm汇编指令,可以参考linux内核的arch/arm目录,那里的汇编指令很丰富[gliethttp_20080603]
__CopyFromStart
; ldr r3, [r9],#4
; str r3, [r7], #4
; sub r8, r8, #4
ldrb r3, [r9], #1
strb r3, [r7], #1
sub r8, r8, #1
cmp r8, #0
bgt __CopyFromStart
b __JumpToBootImage
__JumpToBootImage
MOV pc, r0
ARM汇编中符号和指令使 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)