微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM汇编中^、!、cxsf符号和movs等指令使用

ARM汇编中^、!、cxsf符号和movs等指令使用

时间:11-20 来源:互联网 点击:



-----------------------------
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


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top