こ のセ ク シ ョ ン では、 次の内容について説明 し ます。
• プ ロ セ ッ サの 16 ビ ッ ト 命令の概要
• プ ロ セ ッ サの 32 ビ ッ ト 命令の概要
Cortex-M3 の 16 ビ ッ ト 命令の一覧を、 テーブル 2-4 に示 し ます。
テーブル 2-4 Cortex-M3 の 16 ビ ッ ト 命令の概要
操作 アセ ン ブ ラ
レ ジ ス タ の値 と C フ ラ グ を レ ジ ス タ の値に加算 ADC <Rd>, <Rm>
3 ビ ッ ト 即値を レ ジ ス タ に加算 ADD <Rd>, <Rn>, #<immed_3>
8 ビ ッ ト 即値を レ ジ ス タ に加算 ADD <Rd>, #<immed_8>
下位レ ジ ス タ の値を下位レ ジ ス タ の値に加算 ADD <Rd>, <Rn>, <Rm>
上位レ ジ ス タ の値を下位ま たは上位レ ジ ス タ の値に加算 ADD <Rd>, <Rm>
PC 相対 4 × (8 ビ ッ ト 即値) で レ ジ ス タ に加算 ADD <Rd>, PC, #<immed_8> * 4 SP 相対 4 × (8 ビ ッ ト 即値) で レ ジ ス タ に加算 ADD <Rd>, SP, #<immed_8> * 4 4 × (7 ビ ッ ト 即値) を SP に加算 ADD SP, #<immed_7> * 4 レ ジ ス タ の値を ビ ッ ト 単位論理積 AND <Rd>, <Rm>
即値の数値に よ り 算術右シ フ ト ASR <Rd>, <Rm>, #<immed_5>
レ ジ ス タ の数値に よ り 算術右シ フ ト ASR <Rd>, <Rs>
条件付 き 分岐 B<cond> <target address>
無条件分岐 B <target_address>
ビ ッ ト ク リ ア BIC <Rd>, <Rm>
ソ フ ト ウ ェ アブ レー ク ポ イ ン ト BKPT <immed_8>
リ ン ク 付 き 分岐 BL <Rm>
リ ン ク 付 き 分岐 と 状態遷移 BLX <Rm>
分岐 と 状態遷移 BX <Rm>
比較 し て非 0 で分岐 CBNZ <Rn>,<label>
比較 し て 0 で分岐 CBZ <Rn>,<label>
レ ジ ス タ 値の 2 の補数 (負数、 negation) を別の レ ジ ス タ の値 と 比較 CMN <Rn>, <Rm>
8 ビ ッ ト 即値 と 比較 CMP <Rn>, #<immed_8>
レ ジ ス タ と 比較 CMP <Rn>, <Rm>
上位レ ジ ス タ を下位ま たは上位レ ジ ス タ と 比較 CMP <Rn>, <Rm>
プ ロ セ ッ サ状態変更 CPS <effect>, <iflags>
上位ま たは下位レ ジ ス タ の値を別の上位ま たは下位レ ジ ス タ に コ ピー CPY <Rd> <Rm>
レ ジ ス タ の値を ビ ッ ト 単位で排他的論理和 EOR <Rd>, <Rm>
次の命令を条件付け 次の 2 つの命令を条件付け 次の 3 つの命令を条件付け 次の 4 つの命令を条件付け
IT <cond>
IT<x> <cond>
IT<x><y> <cond>
IT<x><y><z> <cond>
複数ワ ー ド を連続す る メ モ リ か ら ロ ー ド LDMIA <Rn>!, <registers>
ベース レ ジ ス タ のア ド レ ス + 5 ビ ッ ト 即値オ フ セ ッ ト の メ モ リ か ら ワー ド を ロ ー ド
LDR <Rd>, [<Rn>, #<immed_5> * 4]
ベース レ ジ ス タ のア ド レ ス + レ ジ ス タ オ フ セ ッ ト の メ モ リ か ら ワー ド を ロ ー ド LDR <Rd>, [<Rn>, <Rm>]
PC ア ド レ ス + 8 ビ ッ ト 即値オ フ セ ッ ト の メ モ リ か ら ワ ー ド を ロ ー ド LDR <Rd>, [PC, #<immed_8> * 4]
SP ア ド レ ス + 8 ビ ッ ト 即値オ フ セ ッ ト の メ モ リ か ら ワ ー ド を ロ ー ド LDR, <Rd>, [SP, #<immed_8> * 4]
レ ジ ス タ ア ド レ ス + 5 ビ ッ ト 即値オ フ セ ッ ト の メ モ リ か ら バ イ ト [7:0] を ロ ー ド LDRB <Rd>, [<Rn>, #<immed_5>]
レ ジ ス タ ア ド レ ス + レ ジ ス タ オ フ セ ッ ト の メ モ リ か ら バ イ ト [7:0] を ロ ー ド LDRB <Rd>, [<Rn>, <Rm>]
レ ジ ス タ ア ド レ ス + 5 ビ ッ ト 即値オ フ セ ッ ト の メ モ リ か ら ハーフ ワー ド [15:0]
を ロ ー ド
LDRH <Rd>, [<Rn>, #<immed_5> * 2]
レ ジ ス タ ア ド レ ス + レ ジ ス タ オ フ セ ッ ト の メ モ リ か ら ハーフ ワー ド [15:0] を ロ ー ド
LDRH <Rd>, [<Rn>, <Rm>]
レ ジ ス タ ア ド レ ス + レ ジ ス タ オ フ セ ッ ト の メ モ リ か ら 符号付 き バ イ ト [7:0] を ロ ー ド
LDRSB <Rd>, [<Rn>, <Rm>]
テーブル 2-4 Cortex-M3 の 16 ビ ッ ト 命令の概要 (続 く )
操作 アセ ン ブ ラ
レ ジ ス タ ア ド レ ス + レ ジ ス タ オ フ セ ッ ト の メ モ リ か ら 符号付 き ハーフ ワ ー ド [15:0] を ロ ー ド
LDRSH <Rd>, [<Rn>, <Rm>]
即値に よ り 論理左シ フ ト LSL <Rd>, <Rm>, #<immed_5>
レ ジ ス タ の値に よ り 論理左シ フ ト LSL <Rd>, <Rs>
即値に よ り 論理右シ フ ト LSR <Rd>, <Rm>, #<immed_5>
レ ジ ス タ の値に よ り 論理右シ フ ト LSR <Rd>, <Rs>
8 ビ ッ ト 即値を レ ジ ス タ に移動 MOV <Rd>, #<immed_8>
下位レ ジ ス タ の値を下位レ ジ ス タ に移動 MOV <Rd>, <Rn>
上位ま たは下位レ ジ ス タ の値を上位ま たは下位レ ジ ス タ に移動 MOV <Rd>, <Rm>
レ ジ ス タ の値を乗算 MUL <Rd>, <Rm>
レ ジ ス タ の値の否定 (1 の補数、 complement) を レ ジ ス タ に移動 MVN <Rd>, <Rm>
レ ジ ス タ の値を負 (2 の補数、 negative) に し て レ ジ ス タ に保存 NEG <Rd>, <Rm>
無操作 NOP <c>
レ ジ ス タ の値を ビ ッ ト 単位で論理和 ORR <Rd>, <Rm>
ス タ ッ ク か ら 複数レ ジ ス タ を ポ ッ プ POP <registers>
ス タ ッ ク か ら 複数レ ジ ス タ お よ び PC を ポ ッ プ POP <registers, PC>
複数レ ジ ス タ を ス タ ッ ク へプ ッ シ ュ PUSH <registers>
LR お よ び複数レ ジ ス タ を ス タ ッ ク へプ ッ シ ュ PUSH <registers, LR>
ワー ド 中のバ イ ト 順を反転 し て、 レ ジ ス タ へ コ ピー REV <Rd>, <Rn>
2 つのハーフ ワ ー ド 中でそれぞれのバ イ ト 順を反転 し て、 レ ジ ス タ へ コ ピー REV16 <Rd>, <Rn>
下位ハーフ ワー ド [15:0] でバ イ ト 順を反転、 符号拡張 し て、 レ ジ ス タ へ コ ピー REVSH <Rd>, <Rn>
レ ジ ス タ 内の量に よ り 、 右 ロ ーテー ト ROR <Rd>, <Rs>
レ ジ ス タ の値 と C フ ラ グ を レ ジ ス タ の値か ら 減算 SBC <Rd>, <Rm>
イ ベン ト 送信 SEV<c>
複数の レ ジ ス タ か ら ワー ド を連続す る メ モ リ 位置へス ト ア STMIA <Rn>!, <registers>
テーブル 2-4 Cortex-M3 の 16 ビ ッ ト 命令の概要 (続 く )
操作 アセ ン ブ ラ
レ ジ ス タ のア ド レ ス + 5 ビ ッ ト 即値のオ フ セ ッ ト へレ ジ ス タ の ワー ド を ス ト ア STR <Rd>, [<Rn>, #<immed_5> * 4]
レ ジ ス タ のア ド レ スへレ ジ ス タ の ワ ー ド を ス ト ア STR <Rd>, [<Rn>, <Rm>]
SP ア ド レ ス + 8 ビ ッ ト 即値のオ フ セ ッ ト へレ ジ ス タ の ワ ー ド を ス ト ア STR <Rd>, [SP, #<immed_8> * 4]
レ ジ ス タ のア ド レ ス + 5 ビ ッ ト 即値のオ フ セ ッ ト へレ ジ ス タ のバ イ ト [7:0] を ス ト ア
STRB <Rd>, [<Rn>, #<immed_5>]
レ ジ ス タ のア ド レ スへレ ジ ス タ のバ イ ト [7:0] を ス ト ア STRB <Rd>, [<Rn>, <Rm>]
レ ジ ス タ のア ド レ ス + 5 ビ ッ ト 即値のオ フ セ ッ ト へレ ジ ス タ のハーフ ワー ド [15:0] を ス ト ア
STRH <Rd>, [<Rn>, #<immed_5> * 2]
レ ジ ス タ のア ド レ ス + レ ジ ス タ に よ る オ フ セ ッ ト へレ ジ ス タ のハーフ ワー ド [15:0] を ス ト ア
STRH <Rd>, [<Rn>, <Rm>]
3 ビ ッ ト 即値を レ ジ ス タ か ら 減算 SUB <Rd>, <Rn>, #<immed_3>
8 ビ ッ ト 即値を レ ジ ス タ の値か ら 減算 SUB <Rd>, #<immed_8>
レ ジ ス タ の値を減算 SUB <Rd>, <Rn>, <Rm>
4 × (7 ビ ッ ト 即値) を SP か ら 減算 SUB SP, #<immed_7> * 4 8 ビ ッ ト 即値の呼び出 し コ ー ド に よ り 、 オペレーテ ィ ン グ シ ス テ ムのサービ ス
呼び出 し
SVC <immed_8>
レ ジ ス タ か ら バ イ ト [7:0] を抽出 し 、 レ ジ ス タ に移動 し て、 32 ビ ッ ト に符号拡張 SXTB <Rd>, <Rm>
レ ジ ス タ か ら ハーフ ワ ー ド [15:0] を抽出 し 、 レ ジ ス タ に移動 し て、 32 ビ ッ ト に 符号拡張
SXTH <Rd>, <Rm>
別の レ ジ ス タ の値 と 論理積を実行 し て、 レ ジ ス タ の設定 さ れてい る ビ ッ ト を テ ス ト
TST <Rn>, <Rm>
レ ジ ス タ か ら バ イ ト [7:0] を抽出 し 、 レ ジ ス タ に移動 し て、 32 ビ ッ ト にゼ ロ拡張 UXTB <Rd>, <Rm>
レ ジ ス タ か ら ハーフ ワ ー ド [15:0] を抽出 し 、 レ ジ ス タ に移動 し て、 32 ビ ッ ト に ゼ ロ 拡張
UXTH <Rd>, <Rm>
イ ベン ト 待ち WFE <c>
割 り 込み待ち WFI <c>
テーブル 2-4 Cortex-M3 の 16 ビ ッ ト 命令の概要 (続 く )
操作 アセ ン ブ ラ
Cortex-M3 の 32 ビ ッ ト 命令の一覧を、 テーブル 2-5 に示 し ます。
テーブル 2-5 Cortex-M3 の 32 ビ ッ ト 命令の概要
操作 アセ ン ブ ラ
レ ジ ス タ の値、 12 ビ ッ ト 即値、 C ビ ッ ト を加算 ADC{S}.W <Rd>, <Rn>, #<modify_constant(immed_12>
レ ジ ス タ の値、 シ フ ト し た レ ジ ス タ の値、 C ビ ッ ト を加算 ADC{S}.W <Rd>, <Rn>, <Rm>{, <shift>}
レ ジ ス タ の値 と 12 ビ ッ ト 即値を加算 ADD{S}.W <Rd>, <Rn>, #<modify_constant(immed_12)>
レ ジ ス タ の値 と シ フ ト し た レ ジ ス タ の値を加算 ADD{S}.W <Rd>, <Rm>{, <shift>}
レ ジ ス タ の値 と 12 ビ ッ ト 即値を加算 ADDW.W <Rd>, <Rn>, #<immed_12>
レ ジ ス タ の値 と 12 ビ ッ ト 即値を ビ ッ ト 単位論理積 AND{S}.W <Rd>, <Rn>, #<modify_constant(immed_12>
レ ジ ス タ の値 と シ フ ト さ れた レ ジ ス タ の値を ビ ッ ト 単位論理積 AND{S}.W <Rd>, <Rn>, Rm>{, <shift>}
レ ジ ス タ の数値に よ り 算術右シ フ ト ASR{S}.W <Rd>, <Rn>, <Rm>
条件分岐 B{cond}.W <label>
ビ ッ ト フ ィ ール ド を ク リ ア BFC.W <Rd>, #<lsb>, #<width>
ビ ッ ト フ ィ ール ド を 1 つの レ ジ ス タ の値か ら 別の レ ジ ス タ の値 に挿入
BFI.W <Rd>, <Rn>, #<lsb>, #<width>
レ ジ ス タ の値 と 12 ビ ッ ト 即値の否定 (1 の補数) と を ビ ッ ト 単 位の論理積
BIC{S}.W <Rd>, <Rn>, #<modify_constant(immed_12)>
レ ジ ス タ の値 と シ フ ト さ れた レ ジ ス タ の値の否定 (1 の補数) と を ビ ッ ト 単位の論理積
BIC{S}.W <Rd>, <Rn>, <Rm>{, <shift>}
リ ン ク 付 き 分岐 BL <label>
リ ン ク 付 き 分岐 (即値) BL<c> <label>
無条件分岐 B.W <label>
排他 ク リ アは、 実行中のプ ロ セ ッ サの ロ ーカルレ コ ー ド で、 ア ド レ ス が排他ア ク セ ス の要求を受けてい る も のを ク リ ア し ます。
CLREX <c>
レ ジ ス タ の値に含まれ る 先行ゼ ロ の数を返す CLZ.W <Rd>, <Rn>
レ ジ ス タ の値 と 12 ビ ッ ト 即値の 2 の補数 と を比較 CMN.W <Rn>, #<modify_constant(immed_12)>
レ ジ ス タ の値 と シ フ ト さ れた レ ジ ス タ の値の 2 の補数 と を比較 CMN.W <Rn>, <Rm>{, <shift>}
レ ジ ス タ の値 と 12 ビ ッ ト 即値 と を比較 CMP.W <Rn>, #<modify_constant(immed_12)>
レ ジ ス タ の値 と シ フ ト さ れた レ ジ ス タ の値 と を比較 CMP.W <Rn>, <Rm>{, <shift>}
デー タ メ モ リ バ リ ア DMB <c>
デー タ 同期化バ リ ア DSB <c>
レ ジ ス タ の値 と 12 ビ ッ ト 即値で排他的論理和 EOR{S}.W <Rd>, <Rn>, #<modify_constant(immed_12)>
レ ジ ス タ の値 と シ フ ト さ れた レ ジ ス タ の値で排他的論理和 EOR{S}.W <Rd>, <Rn>, <Rm>{, <shift>}
命令同期化バ リ ア ISB <c>
ポ ス ト イ ン ク リ メ ン ト (IA) ま たはプ リ デ ク リ メ ン ト (DB) で、 メ モ リ か ら レ ジ ス タ へ複数 ロ ー ド
LDM{IA|DB}.W <Rn>{!}, <registers>
ベース レ ジ ス タ のア ド レ ス + 12 ビ ッ ト 即値のオ フ セ ッ ト の メ モ リ か ら ワー ド を ロ ー ド
LDR.W <Rxf>, [<Rn>, #<offset_12>]
ベース レ ジ ス タ のア ド レ ス + 12 ビ ッ ト 即値のオ フ セ ッ ト の メ モ リ か ら PC へ ワー ド を ロ ー ド (分岐)
LDR.W PC, [<Rn>, #<offset_12>]
ポ ス ト イ ンデ ク ス で、 ベース レ ジ ス タ のア ド レ ス に 8 ビ ッ ト 即 値を オ フ セ ッ ト し た メ モ リ か ら PC へ ワー ド を ロ ー ド (分岐)
LDR.W PC, [Rn], #<+/-<offset_8>
ポ ス ト イ ンデ ク ス で、 ベース レ ジ ス タ のア ド レ ス に 8 ビ ッ ト 即 値を オ フ セ ッ ト し た メ モ リ か ら ワー ド を ロ ー ド
LDR.W <Rxf>, [<Rn>], #+/-<offset_8>
プ レ イ ンデ ク ス で、 ベース レ ジ ス タ のア ド レ ス に 8 ビ ッ ト 即値 を オ フ セ ッ ト し た メ モ リ か ら ワー ド を ロ ー ド
LDR.W <Rxf>, [<Rn>, #<+/-<offset_8>]!
LDRT.W <Rxf>, [<Rn>, #<offset_8>]
プ レ イ ンデ ク ス で、 ベース レ ジ ス タ のア ド レ ス に 8 ビ ッ ト 即値 を オ フ セ ッ ト し た メ モ リ か ら PC へ ワー ド を ロ ー ド (分岐)
LDR.W PC, [<Rn>, #+/-<offset_8>]!
位置が 0、 1、 2、 ま たは 3 つ左にシ フ ト さ れた レ ジ ス タ のア ド レ ス の メ モ リ か ら ワー ド を ロ ー ド
LDR.W <Rxf>, [<Rn>, <Rm>{, LSL #<shift>}]
位置が 0、 1、 2、 ま たは 3 つ左にシ フ ト さ れた レ ジ ス タ のア ド レ ス の メ モ リ か ら PC へ ワー ド を ロ ー ド (分岐)
LDR.W PC, [<Rn>, <Rm>{, LSL #<shift>}]
PC ア ド レ ス に 12 ビ ッ ト 即値を オ フ セ ッ ト し た メ モ リ か ら ワ ー ド を ロ ー ド
LDR.W <Rxf>, [PC, #+/-<offset_12>]
PC ア ド レ ス に 12 ビ ッ ト 即値を オ フ セ ッ ト し た メ モ リ か ら PC へ ワー ド を ロ ー ド (分岐)
LDR.W PC, [PC, #+/-<offset_12>]
ベース レ ジ ス タ のア ド レ ス + 12 ビ ッ ト 即値のオ フ セ ッ ト の メ モ リ か ら バ イ ト [7:0] を ロ ー ド
LDRB.W <Rxf>, [<Rn>, #<offset_12>]
テーブル 2-5 Cortex-M3 の 32 ビ ッ ト 命令の概要 (続 く )
操作 アセ ン ブ ラ