備忘録

備忘録

ARM Opcodeメモ

※2017/05/29 追記
とても理解しやすい解説サイト
https://azeria-labs.com/writing-arm-assembly-part-1/

※2018/04/13追記
理解しやすいスライド
https://azeria-labs.com/downloads/HITB-v1.0.pdf

f:id:kagasu:20180413144316p:plain

レジスタ

A32(32bit)

汎用レジスタ R0-R12
スタックポインタ SP(R13)
リンクレジスタ LR(R14)
プログラムカウンタ PC(R15)

ADD 加算

例. ADD(S) <dst>, <op 1>, <op 2>
dst = op1 + op2;

SUB 減算

例. SUB(S) <dst>, <op 1>, <op 2>
dst = op1 - op2;

EOR 排他的論理和(XOR)

例. EOR  <op 1>, <op 2>
(op1 == op2)? 0 : 1;

LDR レジスタの読み込み

例1. LDR <dst>, <op 1>
dst = op1;

例2. LDR <dst>, [<op 1>]
dst = *(op1);

例3. LDR <dst>, [<op 1>, offset]
dst = *(op1 + offset);

STR レジスタの書き込み

例. STR <src>, [<dst>]
*(dst) = src
1バイト 2バイト 4バイト
ロード (符号なし) LDRB LDRH LDR
ロード (符号付き) LDRSB LDRSH LDR
ストア STRB STRH STR

LSL 論理左シフト

例. LSL <dst>, <src>, <op 1>
dst = src << op1

LSR 論理右シフト

例. LSR <dst>, <src>, <op 1>
dst = src >> op1

CMP 比較

例. CMP <op1>, <op2>
ZF CF
op1 < op2 0 1
op1 > op2 0 0
op1 == op2 1 0