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

浅析arm汇编中^、、cxsf符号和movs等指令使用学习

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

-----
7.spsr_cxsf,cpsr_cxsf的理解
c - control fieldmaskbyte(PSR[7:0])
x - extension fieldmaskbyte(PSR[15:8])
s - status fieldmaskbyte(PSR[23:16)
f - flags fieldmaskbyte(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:总是[默认]

浅析linux中r0~r15寄存器对应的别名

r0
r1
r2
r3
r4
r5
r6
r7
r8
r9
r10->s1
r11->fp
r12->ip
r13->sp
r14->lr
r15->pc

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