arm的汇编指令精选合辑
A R3!,(R0,R4); (R0)---(R3),(R4)---(R3)+4; (R3)+8---R3
STMIA R0!,(R3,R5,R7);((R0)--R3,((R0)+4)---R5,
;((R0)+8)---R7,(R0)+12---R0
3 堆栈指令
功能:低寄存器和可选的LR进栈,低寄存器和可选的PC出栈。
格式:POP {《REglist》{,PC}}
PUSH {《Reglist》{,LR}}
其中:Reglist
低寄存器或寄存器范围的,用逗号隔开的列表。
注释:
(1)Thumb堆栈是满递减堆栈,向下增长,且SP指向堆栈的最后入口。
(2)寄存器以数字顺序存储在堆栈中。最低数字的寄存器其地址最低。
(3)POP{Reglist}这条指令引起处理器转移到从堆栈弹出给PC的地址,这通常是从子程序返回,其中LR在子程序开头压进堆栈。
(4)对于ARMv5T及以上的版本,则
若读到PC中的值的位[1:0]是b00,则处理器变换到ARM状态
位[1:0]不允许的值b10。
(5)条件码标志。这些指令不影响条件码标志。
例:
PUSH {R0,R4---R7} ;R0,R4---R7进栈-
PUSH {R0,LR}
POP {R2,R5}
POP {R0---R7,PC}
3.3.2 Thumb数据运算类指令
Thumb数据运算指令有以下8种:
1 ADD和SUM-----低寄存器
功能:2个寄存器的,内容相加或相减,结果放到第3个寄存器中。
格式:《操作码》Rd,Rn,Rm
《操作码》包括:ADD,SUB指令。
其中:
Rd 目的寄存器。必须是低寄存器
Rn 第操作寄存器。必须是低寄存器
Rm 第2操作寄存器。必须是低寄存器。
注释:这些指令更新标志N,Z,C,V。
例:ADD R3,R1,R5。
2 ADD和SUB----小整数
功能:寄存器中的值加上或减去一个小整数,结果放在另一个不同寄存器中。
格式:《操作码》 Rd,Rn,# 《3位立即数》
《操作码》包括:ADD,SUB指令。
其中:
Rd目的寄存器。必须是低寄存器(R0~R7)
Rn第1操作数寄存器。必须是低寄存器(R0~R7)
Expr3 表达式,为取值范围在—7~+7内的整数。
注释:
这些指令更新标志N,Z,C,V.
例:SUB R0,R4,#5 ; (R4)---5---R0
3 ADD,SUB,MOV,CMP----大整数
功能:寄存器中的值对于一个大事整数进行ADD,SUB,MOV,CMP运算,结果放在另一个不同的寄存器中。
格式:
《操作码》 Rd|Rn,#《8位立即数》
《操作码》包括:ADD,SUB,MOV,CMP指令。
其中:
Rd,Rn 目的寄存器。必须是低寄存器(R0~R7)
Expre8 表达式,为取值范围在—255~+255内的整数。
注释:这些指令更新标志N,Z,C,V.
例:
ADD R7,#201
ADD R1,vc+4 ; vc+4汇编时必取值范围为—255~+255的整数
4 ADD,MOV,CMP----高或低寄存器
功能:将寄存器中值进行运算,结果送回到第一操作数寄存器。
格式:
《操作码》 Rd|Rn,Rm
《操作码》包括:ADD,MOV,CMP指令。
其中:
Rd,Rn目的寄存器,也是第1操作数寄存器。
Rm第二操作数寄存器。
Rd,Rn,Rm使用高或低寄存器,当和是低寄存器,指令"ADD,Rd,Rm"汇编成"ADD Rd,Rm"。
注释:
若Rd,Rn和Rm是低寄存器,则更新条件码标志N,Z,C和V,其他情况下这些标志不受影响。
例:ADD R0,R8
ADD R2,R4 ; 等价于"ADD R2,R2,R4",不影响标志。
5 ADD和SUB----SP
功能:SP加上或减去立即数常量。
格式:
《操作码》SP,#《expr》
《操作码》包括:ADD,SUB指令。
其中:
expr表达式,取值范围在—508~+508内的4倍数的整数。expr为负值的ADD指令汇编成相应的带正数常量的指令。expr为负值的指令汇编相应的带正数常量的ADD指令。
注释:
这条指令指示不影响条件码标志。
例:
ADD SP,#312
SUB SP,#96
SUB SP,#abc+8; abc+8汇编时必须取值为范围在---508~+508内4的整数倍。
6 ADD---PC或SP相对偏移
功能:SP或PC值加上一立即相对数常量,结果放入低寄存器。
格式:
ADD Rd,Rp,#《expr》
其中:
Rd 目的寄存器。Rd必须在R0~R7范围内。
Rp SP|PC.RP是PC,则使用值是(当前指令地址+4)AND&FFFFFFC。
Expr 表达式,取值为范围在0~1020的4整倍数。
注释:
这条指令不影响条件码标志。
例:
ADD R2,SP,#64
ADD R6,PC,#980
ADD R0,PC,#lit—{PC}; lit—{PC}必须取值成范围在0~1020的4的
;整数倍
7 ASR,LSL,LSR和ROR运算
功能:移位和循环移位操作。这些指令可使用寄存器中的值或立即数移位。
格式1:
《操作码》Rd,Rn,《#immed_5》
其中:
《操
- 什么是LED驱动时序?LCD背光驱动程序设计(04-26)
- LCD驱动的移植及其GUI仿真如何进行,LCD数模转换现实原理及其源代码(04-25)
- wince代码写入LCD驱动参考,数码产品怎样分别是不是LCD坏点(04-26)
- ARM微处理器助记符指令及其功能描述(04-30)
- 布线工程师如何充分“掌控”时钟信号?(02-21)
- FPGA组成、工作原理和开发流程(10-13)