1.环境及优化项
采用-O2优化选项,通过arm处理器架构下的gcc编译器编译用例生成汇编码查看其生成的指令。至于为什么用O2选项,是因为在某些用例中,加入-O3选项之后,arm处理器架构下gcc编译器生成的汇编会变得更加复杂(比如一个简单的循环)。
2.ARM指令格式
先简单地介绍一下ARM的指令格式,与x86(Intel)架构和alpha架构下有所不同。
基本格式
<opcode> { <cond>} {S} <Rd> , <Rn> , {<opcode2>}
其中,<>内的项是必须的,{}内的项是可选的,比如<opcode>是指令助记符,是必须的,而{<cond>}为 指令执行条件,是可选的,如果不写则使用默认条件AL(无条件执行)。
格式 |
含义 |
Opcode |
指令助记符,如LDR,STR 等 |
Cond |
执行条件,如EQ,NE 等 |
S |
是否影响CPSR 寄存器的值,书写时影响CPSR,否则不影响 |
Rd |
目标寄存器 |
Rn |
第一个操作数的寄存器 |
operand2 |
第二个操作数 |
指令格式举例如下
LDR R0,[R1] ; 读取R1 地址上的存储器单元内容,执行条件AL(无条件执行)
ADDS R1,R1,#1 ; 加法指令,R1+1=R1 影响CPSR 寄存器,带有S
SUBNES R1,R1,#0xD; 条件执行减法运算(NE),R1-0xD=>R1,影响CPSR 寄存器,带有S