【ARM】汇编指令结构分析

133 阅读2分钟

一、BL指令

1.指令架构

2.属性解析

(1)cond

(2)L

当是BL指令的时候,L位会被设置成1,从而会存储返回地址到R14寄存器中。如果不是BL指令而是B指令,则L位会被置位0,并且指令简单的完成跳转,不会存储返回地址到R14寄存器中

(3)signed_immed_24
跳转的目标地址,计算规则如下:
(1)将24位有符号数立即扩展为30位有符号数
(2)将(1)的计算结果左移2位扩展为32位有符号数
(3)将(2)的计算结果加8再加PC指针的值,就是目标地址

二、LDR指令

1.立即数偏移寻址

(1)指令架构

(2)属性解析
属性含义
Rd目的寄存器
Rn基址寄存器
offset_12立即数偏移
U表示正负,+offset还是-offset
(3)示例
LDR PC,[PC - 4]
1110 0101 0001 1111 1111 000000000100 

2.寄存器偏移寻址

(1)指令架构

(2)属性解析
属性含义
Rd目的寄存器
Rn基址寄存器
Rm寄存器偏移
U表示正负,+Rm还是-Rm
(3)示例
LDR PC,[R1 + PC]
1110 0111 1001 0001 1111 000000001111 

三、MOV指令

1.指令架构

2.属性解析

(1)立即数时,shifter_operand具体结构如下:

(2)旋转方式:alisdair.mcdiarmid.org/arm-immedia…

(3)立即数存在位数限制和具体数字大小限制,并不能覆盖所有的数字

四、ARM的三级流水线指令

blog.csdn.net/fs5710/arti…

处理器处于ARM状态时,每条指令为4个字节,所以PC值为正在执行的指令地址加8字节,即是:

PC值 = 当前程序执行位置 + 8字节

处理器处于Thumb状态时,每条指令为2字节,所以PC值为正在执行的指令地址加4字节,即是:

PC值 = 当前程序执行位置 + 4字节