Arm汇编---寄存器

Arm汇编常见的寄存器

  • 寄存器:r0~r15, sp, lr, sb, sl, fp, ip, pc
  • 条件码:eq, ne, hs, lo, mi, pl, vs, vc, hi, ls, ge, lt, gt, le, al

------------------------------------------ 一、数据寄存器 ---------------------------------------------

;CM3 在一定程度上支持 64 位整数。
;其中 LDRD/STRD 就是为 64 位整数的数据传送而设的,语法 格式为:

    LDRD.W RL, RH, [Rn, #+/-offset] {!}
    STRD.W RL, RH, [Rn, #+/-offset] {!}
    LDRD.W RL, RH, [Rn],#+/-offset
    STRD.W RL, RH, [Rn],#+/-offset

    LDR R2, =0x1000     ;(0x1000)= 0x1234_5678_ABCD_EF00 : 00 EF CD AB 78 56 34 12
    LDRD.W R0, R1,[R2]  ;R0= 0xABCD_EF00, R1=0x1234_5678
    STRD.W R1, R0,[R2]  ;(0x1000)=0xABCD_EF00_1234_5678 : 78 56 34 12 00 EF CD AB

------------------------------------------ 二、指针寄存器 ---------------------------------------------


------------------------------------------ 三、段寄存器 -----------------------------------------------

段寄存器是根据内存分段的管理模式而设置的。内存单元的物理地址由段寄存器的值和一个偏移量组合而成
的,这样可用两个较少位数的值组合成一个可访问较大物理空间的内存地址。


------------------------------------------ 四、标志位 -----------------------------------------------

flag寄存器是按位起作用的,也就是说,它的每一位都有专门的含义,记录特定的信息

溢出 方向 中断 跟踪 符号 辅进位 奇偶 进位
OF DF IF TF SF ZF AF PF CF

ARM架构与体系

ARM7处理器采用3级流水线来增加处理器指令流的速度,能提供0.9MIPS/MHz的指令处理速度。

ARM指令32位、4个字节

31~28 | 27~25 | 24~21 | 20 | 19~16 | 15~12 | 11~0

0000 | 0000 | 0000 | 0000 | 0000 | 0000 | 0000 | 0000

cond | opcode | Rn | Rd | Op2

ARM指令格式一般如下:
{}{s},{,}
格式中< >的内容是必不可少的,{ }中的内容可忽略

表示操作码。如ADD表示算术加法
{} 表示指令执行的条件域。如EQ、NE等,缺省为AL。
{S} 决定指令的执行结果是否影响CPSR的值,使用该后缀则指令执行结果影响CPSR的值,否则不影响
表示目的寄存器
表示第一个操作数,为寄存器
表示第二个操作数,可以是立即数。寄存器和寄存器移位操作数

text:00000F5E BEQ loc_F74

解释1:

31-28 : cond(条件域) => 0000 #因为是B指令 所以无条件

27-25 : 101 #因为101就是扽与BEQ

24 : 0 #B就是0 BL就是1

23-0 : offset相对偏移量

offset= (0F74-pc值)/4 #处理器处于ARM状态(三级流水:PC总是指向第3条指令)时,每条指令为4个字节 ,PC值 = 当前程序执行位置 + 8字节 ,除4 是代码对齐处理

0000 1010 0000 0000 0011-》 A003-》 300A

解释2

31-28字段,cond是条件码,就是表明这条语句里是否有大于、等于、非零等的条件判断。

27-26位为保留位,恒为00

25位,shifter_operand段存放的是立即数还是寄存器,若为寄存器则为0,如果是立即数则为1

24-21 位为opcode

20位:表明指令是否会影响程序状态寄存器,如果是就是1,否则为0。

19-16位,表示第一个源操作数寄存器。

11-0 目的寄存器

http://armconverter.com/ 在线转化指令

寄存器交互指令

LDR R1,[R2],把R2指向的位置的数据给R1

STR R1,[R2],在R2指向的地址,存储R1

PUSH:入栈
POP:出栈

数据算数指令

ADD R0, R1, R2 -> R0 = R1 + R2

ADD R0, R1, #256 -> R0 = R1 + 256

ADD R0, R2, R3,LSL#1 -> R0 = R2 + (R3 << 1)

SUB R0, R2, R3,LSL#1 ; R0 = R2 - (R3 << 1)

数据逻辑运算指令

与:AND
或:ORR
异或:EOR

LSL:逻辑左移
LSR:逻辑右移

比较指令

CMP:比较指令

其他指令

SWT:切换用户模式
伪指令:DCB


ARM寄存器

R0-R7: 通用寄存器
R8-R10:不常用的通用寄存器
R11:基质寄存器(FP)
R12:暂时寄存器(IP)
R13:堆栈制作(SP)
R14:链接寄存器(LR)
CPSR:状态寄存器

ESP:32位寄存器,sp 是16位寄存器,ESP寄存器通常用来表示栈顶的值。

猜你喜欢

转载自blog.csdn.net/csdn546229768/article/details/128728831