ARM指令语法格式,寻址方式

操作系统 2016-10-12

ARM指令语法格式

<opcode>{<cond>}{S} <Rd>, <Rn>,<shifter_operand>

每一条ARM指令的条件码域(4bit)

EQEqual相等Z=1
NENoequal不相等Z=0CS/HSCarrySet/HighorSame无符号数>=C=1CC/LOCarryClear/LOwer无符号数<C=0MIMInus负数N=1PLPlus非负数N=0VSoVerflowSet上溢出V=1VCoVerflowClear没有上溢出V=0HIHIgh无符号>C=1&&Z=0LSLowerorSame无符号数<=C=0GEGreaterorEqual带符号数>=N=1&&V=1或 N=0&&V=0LTLessThan带符号数<N=1&&V=0或 N=0&&V=1GTGreaterThan带符号数>Z=0&&N=VLELessEqual带符号数<= Z=1&&N!=VAL无条件执行

寻址方式

数据处理指令的操作数寻址方式 :11种

<opcode>{<cond>}{S} <Rd>,   <Rn>,   <shifter_operand>
#<immediate>
<Rm>
<Rm>,LSL       #<shift_imm>
<Rm>,LSL       <Rs>
<Rm>,LSR       #<shift_imm>
<Rm>,LSR       <Rs>
<Rm>,ASR   #<shift_imm>
<Rm>,ASR   <Rs>
<Rm>,ROR   #<shift_imm>
<Rm>,ROR   <Rs>
<Rm>,RRX

字及无符号字节的Load/Store指令的寻址方式 :9种

LDR{<cond>}{B}          {T} <Rd>,       <address_mode>
[<Rn>,  #+/- <offset_12>]
[<Rn>,  #+/- <Rm>]
[<Rn>,  #+/- <Rm>,  <shift>#<shift_imm>]
[<Rn>,  #+/- <offset_12>]!
[<Rn>,  #+/- <Rm>]!
[<Rn>,  #+/- <Rm>,  <shift>#<shift_imm>]!
[<Rn>], #+/- <offset_12>
[<Rn>], #+/- <Rm>
[<Rn>], #+/- <Rm>,  <shift>#<shift_imm>

杂类Load/Store指令的寻址方式 :6种

LDR|STR{<cond>}H|SH|SB|D        <Rd>,   <addressing_mode>
[<Rn>,  #+/- <offset_8>]
[<Rn>,  #+/- <Rm>]
[<Rn>,  #+/- <offset_8>]!
[<Rn>,  #+/- <Rm>]!
[<Rn>], #+/- <offset_8>
[<Rn>], #+/- <Rm>

批量Load/Store指令的寻址方式 :4种

LDR|STR{<cond>}H|SH|SB|D        <Rd>,   <addressing_mode>
IA              @Increment After    
IB              @Increment Before
DA              @Decrement After
DB              @Decrement Before
FD              @Full Decending
ED              @Empty Decending
FA              @Full Ascending
EA              @Empty Ascending

协处理器Load/Store指令的寻址方式 :4种

<opcode>{<cond>}{L}    <coproc>,    <CRd>,  <addressing_mode>
[<Rn>,  #+/- <offset_8>*4]
[<Rn>,  #+/- <offset_8>*4]!
[<Rn>], #+/- <offset_8>*4
[<Rn>], <option>