微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > arm的汇编指令精选合辑

arm的汇编指令精选合辑

时间:06-04 来源:网络整理 点击:

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》

  其中:

《操

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

网站地图

Top