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

arm的汇编指令精选合辑

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

子集从存储器读取以及存储到存储中。

  PUSH和POP指令使用堆栈指针(R13)作为基址实现满递减堆栈。除可传送R0~R7外,PUSH还可以用于存储连接寄存器,POP可以用于读取程序指针。

  Tuhmb指令主要有以下几类指令组成:Tuhmb Load/Store类指令;Thumb数据运算类指令;Thumb转移类指令,以及软件中断指令。

  3.3.1 Thumb Load/Store类指令

  1 Thumb单寄存器Load/Store指令

  Thumb单寄存器传送类指令是ARM单寄存器传送类指令的一个子集,和ARM有相同的指令格式。

  Thumb单寄存器传送指令分以下4种:

  (1) LDR和STR—立即数偏移

  功能:读取寄存器和存储寄存器。寄存器的地址用一个寄存器的数偏移量指明,立即数偏移的半字和字节读取是无符号的。

  格式:

  <操作码>Rd,[Rn,《#immed_5*N》]

  <操作码>包括:LDR,LDRB,STR,STRH和STRH指令

  其中:

  H 指明无符号半字传送。

  B 指明无符号字节传送

  RD 读取和存储寄存器。Rd必须在R0—R7范围内

  RN 基址寄存器.Rn必须在R0—R7范围内

  Immed_5*N 偏移量。Immed_5是一个表达式,其中值在0--31范围内,在汇编时结果是的N倍数。

  对字节传送,N=1

  对半字传送,N=2az

  对字传送, N=4

  注释:

  字传送的地址必须可被4整除,半字传送的地址必须可被2整除。

  若系统中有系统协处理器(CP15),则可允许对准检查。若允许对准检查,则非对准的传送会引起对准异常

  若系统没有协处理系统器(CP15)或禁止对准检查,则:

  非对准读取使Rd不可靠

  非对准存使存储器的2个或4个字节不可靠。对半字存储,不可靠的存储器位置是address AND NOT 0x1; 于字存储器,则是address AND NOT 0x3

  例:

  LDR R3,[R5,#0] ;(R5)→R3

  STRB R0,[R3,#3] ;(R0)→((R3)+31)

  STRH R7,[R3,#16] ;(R7)→((R3)+16)

  LDRH R2,[R4,#Label—{PC}]

  (2) LDR和STR---寄存器偏移

  功能:读取寄存器和存储寄存器。存储器的地址用一个寄存器的基于寄存器偏移指明存储器地址。

  格式:

  《操作码》Rd,[Rn,Rm]

  《操作码》是下列情况之一:

  读取寄存器,4字节字

  存储寄存器,2字节字

  读取寄存器,2字节无符号半字

  读取寄存器,2字节字有符号半字,有符号位扩展(即高位字节与符号字节相同)

  存储寄存器,2字节半字

  读取寄存器,无符号半字

  读取寄存器,有符号半字,有符号位扩展(即高位字节与符号位相同)

  存储寄存器,字节

  含偏移量的寄存器,Rm必须在R0~R7范围内

  注释:

  同3.3.1节第1条指令。

  例:

  LDR R2,[R1,R5]; ((R1)+(R5))---R2

  STRH R0,[R0,R1]; (R0)---((R0)+(R1))

  STRB R1,[R7,R0]; (R1)---(R7)+(R0)

  (3) LDR----PC相对偏移

  功能:读取寄存器和存储器。存储器中的地址用中内容的立即数偏移指明。字节码结构:

  格式:

  LDR Rd,[PC,#immed_8*4]

  LDR Rd,Label

  其中:

  immed_8*4偏移量。它是一个表达式,取值(在汇编时)为4的整数倍,范围在0~1020内。

  Label 程序相对偏移表达式。必须在当前指令之后且范围内。

  注释:

  同3.3.1节第1条指令

  例:+

  LDR R2,[PC,#1016]; ((PC)+1026)---R2

  LDR R5,localdata

  (4) LDR和STR---SP相对偏移

  功能:读取寄存器和存储寄存器。存储器的地址用中内容的立即数偏移指明。

  格式:LDR Rd,[SP,#immed_8*4]

  STR Rd,[SP,#immed_8*4]

  其中:

  immed_8*4

  偏移量。它是一个表达式,取值(在汇编时)为4的整数倍,范围在0~1020内。

  注释:

  同3.3.1节第1条指令。

  例:

  LDR R0,[SP,#920]; ((SP)+920)---R0

  STR R1,[SP,#20]; (R1)---(SP)+20

  2 Thumb多寄存器指令

  功能:Load和多个Store寄存器

  格式:(1)LDMIA Rn!, 《Reglist》 (2)STMIA Rn!,《Reglist》

  其中:

  Reglist 低寄存器或低寄存范围的,用逗号隔开的列表。列表中至少有一个寄存器。

  Rn 目的寄存器,必须是低于寄存器

  注释:

  (1)寄存器以数字顺序取或存储。最低数字的寄存器在的初地址中。的值以中寄存器个数的4倍增加。

  (2)若在Rn寄存器列表中,则

  对于LDMIA指令,Rn的最终值是读取的值,不是增加后的地址。

  对于STMIA指令,Rn的终值有如以下两种情况:

  ---若是寄存器列表中最低的寄存器,则的存储值为初值;

  ---其他情况则不可预知。

  例:

LDMI

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

网站地图

Top