ARM指令集的基本格式(所有指令都是32bit)
<Opcode>{<cond>}{s} <Rd>, <Rn>{, <Operand2>}
Opcode:指令操作码,表示指令所执行的具体操作。例如MOV
,ADD
,SUB
等
Rd:目标寄存器编码。
Rn:包含第一个操作数的寄存器编码。
cond:条件码(如EQ、NE ),表示指令执行条件。
S:决定指令的操作是否影响cpsr的值。
Operand2:第2操作数,很灵活,可为立即数、寄存器数或者寄存器的移位数。
其中{}内表示可有可无!
一条32位的ARM指令的编码格式如下图所示:
其中ARM指令的条件码如下图所示:
ex1:对于一个c++程序片段:
if (a > b)
a ++ ;
else
b ++ ;
可以用操作码 + 条件码实现
MOV R0, #a ;将立即数a送入寄存器R0中
MOV R1, #b ;将立即数b送入寄存器R1中
CMP R0, R1 ;将R0 - R1改变CPSR中的标志寄存器,若相等Z置位,否则清零
ADDHI R0, R0, #1 ;当条件码符合时执行加法指令,即a ++
ADDLS R1, R1, #1 ;当条件码符合时执行加法指令,即b ++
ex2:对于一个c++程序片段:
if ((a != 10) && (b != 20))
a += b;
可以由操作码 + 条件码实现
MOV R0, #a ;将立即数a送入寄存器R0中
MOV R1, #b ;将立即数b送入寄存器R1中
CMP R0, #10 ;改变CPSR标志寄存器中Z的内容
CMPNE R1, #20 ;条件码NE,查表可知当CPSR中Z的内容为1时,执行该条指令
ADDNE R0, R0, R1 ;条件码NE,查表可知当CPSR中Z的内容为1时,执行该条指令