DSPコア ユーザーズマニュアル

Ximo16A
ユーザーズマニュアル
2013.12.20 版
表紙
(C) 2009-2013 New Japan Radio Co., Ltd.
Preliminary
Ximo16A
Preliminary
更新履歴
ドラフト初版 .........................................
2009.07.03
改訂 1 版 .............................................
2010.01.25
改訂 2 版 .............................................
2013.12.20
ii 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
1 はじめに ..................................................................................................1
2 アーキテクチャ概要 ................................................................................2
2.1 構成 ......................................................................................................................2
2.1.1 アドレス空間 ................................................................................................2
2.1.2 バス ...............................................................................................................2
2.2 コアレジスタ........................................................................................................3
2.2.1 ステータスレジスタとコンディションコードレジスタ................................5
2.2.2 pm レジスタ..................................................................................................7
2.3 レジスタバンク ....................................................................................................8
3 メモリ構成 ..............................................................................................8
3.1 メモリマップの概要 .............................................................................................8
3.2 メモリ上のデータ配置 .........................................................................................9
3.3 メモリ上の命令語の配置......................................................................................9
4 アドレッシングモード ..........................................................................10
4.1 コアレジスタ ( 直接アドレッシング ) ................................................................ 10
4.2 メモリ................................................................................................................. 10
4.2.1 ポインタレジスタ間接アドレッシング ....................................................... 10
4.2.2 ポインタレジスタ相対アドレッシング ....................................................... 11
4.2.3 絶対アドレッシング.................................................................................... 11
4.3 ポインタレジスタの自動更新機能 .....................................................................11
4.3.1 オペランドサイズによる更新 .....................................................................11
4.3.2 m0/m1 レジスタによる更新........................................................................11
5 例外処理 ................................................................................................12
5.1 リセット ............................................................................................................. 12
5.2 割込み................................................................................................................. 13
5.2.1 通常の割込み処理 ....................................................................................... 13
5.2.2 割込みの優先度 ...........................................................................................13
5.2.3 割込みからの復帰 ....................................................................................... 13
5.3 高速割込み ......................................................................................................... 13
5.3.1 高速割込みの処理 ....................................................................................... 14
5.3.2 コア内部スタックと高速割込みからの復帰................................................ 14
5.3.3 ネストした高速割込み ................................................................................ 14
5.4 ソフトウェアによる割込み / 例外 ...................................................................... 14
5.4.1 trap 命令...................................................................................................... 14
5.4.2 debug 命令 ..................................................................................................14
5.5 デバッグ例外...................................................................................................... 15
5.6 エラー例外 ......................................................................................................... 15
5.6.1 未定義命令例外 ...........................................................................................15
5.6.2 バスエラー例外 ...........................................................................................15
5.6.3 COP タイムアウト例外............................................................................... 15
5.6.4 多重のエラー例外 ....................................................................................... 15
6 データ演算モデル .................................................................................16
6.1 データ形式 ......................................................................................................... 16
6.1.1 符号無し数 ..................................................................................................16
6.1.2 符号付き数 ..................................................................................................16
6.1.3 固定小数点型 ..............................................................................................16
6.2 レジスタ上のデータ形式.................................................................................... 16
6.3 飽和処理と丸め処理 ...........................................................................................17
6.3.1 飽和処理...................................................................................................... 17
6.3.2 丸め処理...................................................................................................... 18
7 命令セット概要 .....................................................................................19
7.1 命令オプコードの割り当て ................................................................................ 19
7.2 コアレジスタエンコード表 ................................................................................ 19
7.3 表記 .................................................................................................................... 20
7.3.1 命令一覧の表記 ...........................................................................................20
7.3.2 動作説明中の表記 ....................................................................................... 20
7.3.3 コンディションコード動作の表記 ..............................................................21
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
iii 頁
Ximo16A
Preliminary
8 命令一覧 ................................................................................................22
8.1 ロード命令 ......................................................................................................... 22
8.2 ストア命令 ......................................................................................................... 22
8.3 スタック操作命令...............................................................................................22
8.4 即値ロード命令 ..................................................................................................22
8.5 レジスタ間転送命令 ...........................................................................................22
8.6 加算命令 ............................................................................................................. 23
8.7 減算命令 ............................................................................................................. 23
8.8 比較命令 ............................................................................................................. 23
8.9 乗算命令 ............................................................................................................. 24
8.10 その他の算術命令............................................................................................. 24
8.11 論理演算命令.................................................................................................... 24
8.12 ビット操作命令 ................................................................................................ 24
8.13 シフト命令 ....................................................................................................... 24
8.14 プログラムフロー制御命令 / 特殊命令 ............................................................. 25
9 ロード命令 ............................................................................................26
10 ストア命令 ..........................................................................................38
11 スタック操作命令 ...............................................................................51
12 即値ロード命令 ...................................................................................61
13 レジスタ間転送命令 ............................................................................66
14 加算命令 ..............................................................................................81
15 減算命令 ............................................................................................102
16 比較命令 ............................................................................................123
17 乗算命令 ............................................................................................128
18 その他の算術命令 .............................................................................136
19 論理演算命令 .....................................................................................154
20 ビット操作命令 .................................................................................162
21 シフト命令 ........................................................................................170
22 プログラムフロー制御命令 / 特殊命令 ..............................................200
23 並列転送命令の形式について ...........................................................221
23.1 並列実行可能なロード命令 ............................................................................221
23.2 並列実行可能なストア命令 ............................................................................221
23.3 並列転送時の制限事項 ...................................................................................222
24 命令エンコード一覧 ..........................................................................223
24.1 16 ビット長命令 .............................................................................................223
24.1.1 プログラムフロー制御命令.....................................................................223
24.1.2 ロード命令 ( 間接アドレッシング ).........................................................226
24.1.3 ロード命令 (fp レジスタ相対 ) ................................................................227
24.1.4 ストア命令 ( 間接アドレッシング ).........................................................228
24.1.5 ストア命令 (fp レジスタ相対 ) ................................................................230
24.1.6 スタック操作命令 ...................................................................................231
24.1.7 ペリフェラルアクセス ............................................................................232
24.1.8 16 ビットデータレジスタ演算 ................................................................233
24.1.9 32 ビットデータレジスタ演算 ................................................................237
24.1.10 ポインタレジスタ演算 ..........................................................................240
24.1.11 型変換付きデータ転送 ..........................................................................241
24.1.12 回転操作命令 ........................................................................................242
24.1.13 即値シフト命令 (16 ビットワード ) ......................................................243
24.1.14 即値シフト命令 (32 ビットロングワード ) ...........................................244
24.1.15 ビット操作命令 .....................................................................................245
24.1.16 16 ビットデータレジスタ短即値演算 ...................................................246
24.1.17 32 ビットデータレジスタ短即値演算 ...................................................246
24.1.18 ポインタレジスタ短即値演算 ...............................................................247
24.1.19 短即値ロード ........................................................................................248
24.1.20 レジスタ間データ転送 ..........................................................................248
24.1.21 プログラムフロー制御命令 ( ショートオフセットによる条件付分岐 ).249
iv 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
24.2 32 ビット長命令 1 ..........................................................................................250
24.2.1 ロード命令 ( 相対アドレス ) ...................................................................250
24.2.2 ロード命令 ( 絶対アドレス ) ...................................................................251
24.2.3 ストア命令 ( 相対アドレス ) ...................................................................252
24.2.4 ストア命令 ( 絶対アドレス ) ...................................................................253
24.2.5 即値ロード ..............................................................................................254
24.2.6 即値演算..................................................................................................254
24.2.7 プログラムフロー制御 ............................................................................256
24.2.8 条件付データ転送 ...................................................................................257
24.2.9 I/O 操作命令 ............................................................................................258
24.2.10 スタックフレーム構築 ..........................................................................259
24.2.11 内部スタックレジスタアクセス............................................................259
24.3 32 ビット長命令 2( 並列転送可能 DSP 演算命令 ).........................................260
24.3.1 16 ビットデータレジスタ演算命令.........................................................260
24.3.2 32 ビットデータレジスタ演算命令.........................................................261
24.3.3 乗算命令..................................................................................................261
24.3.4 アキュームレータ - データレジスタ算術演算命令 .................................263
24.3.5 シフト命令 ..............................................................................................264
24.3.6 即値シフト命令.......................................................................................265
24.3.7 アキュームレータ間演算命令 .................................................................266
24.3.8 アキュームレータレジスタ - データレジスタ間転送命令.......................269
24.3.9 no operation( 並列転送実行用 )...............................................................271
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
v頁
Ximo16A
1
Preliminary
はじめに
この文章は制御用途向けデジタルシグナルプロセッサ ximo16 のアーキテクチャ、及びアセンブラ言
語について説明します。
1頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
2
2.1
Ximo16A
アーキテクチャ概要
構成
図 2-1 にコアのブロック図を示します。コアはフロー制御ユニット、命令デコードユニット、デー
タアドレス生成ユニット、データ演算ユニットの 4 つの部分から構成されます。
フロー制御ユニットでは 2 つゼロオーバーヘッドループ機構、及び分岐予測器によるプログラムフ
ロー制御が行なわれます。
命令デコードユニットでは、命令キューによるの可変長命令の整列、命令デコード、分岐命令によ
るプログラムフロー制御などが行なわれます。
データアドレス生成ユニットは、ポインタ演算用に 2 つの 16 ビットアドレス演算器を持っていま
す。この演算器は有効アドレス計算及びポインタレジスタ自動更新のために用いられます。命令毎に
最大 2 つのアドレス生成と2つポインタレジスタの更新を行なうことが可能です。ポインタレジスタ
の自動更新ではポストインクリメント / デクリメント、リングバッファ用のモジュロアドレッシング、
FFT 用のビットリバースアドレッシングをサポートしています。
データ演算ユニットでは、演算器として、1 つの 40 ビット ALU、1 つの 40 ビットバレルシフタ、1
つの 16 ビット乗算器を持っています。
40 ビット ALU では 16/32/40 ビットの算術論理演算を行ないます。40 ビットバレルシフタでは最大
40 ビットデータの+ 16 ∼− 16 ビットシフトが行なえます。40 ビット長の演算では 2 本の 40 ビット
アキュームレータレジスタによって演算結果を保持することができます。16 ビット乗算器は 16 ビッ
ト × 16 ビットの乗算を 1 サイクルで行い 32 ビットの乗算結果を得ることができます。ALU と乗算器
は、命令によって同時に使用することができます。1 命令内で加減算と乗算を並列に実行することで 1
システムクロック毎に 1 回の積和演算を実行することが可能です。
2.1.1
アドレス空間
アドレス空間は 16 ビットで、ワード長が 16 ビットです。よって 64KWord の空間を持ちます。デー
タアドレス / プログラムアドレスとも同じ論理空間内に存在します。
データメモリとして扱う場合、16 ビットワードまたは 32 ビットロングワードとしてアクセスでき
ます。32 ビットロングワードとしてアクセスする場合、データは偶数アドレスに整列されている必要
があります。
2.1.2
バス
コアは統一された 1 つの論理空間を持ちますが、ハーバード型のアーキテクチャで構成されており、
プログラムバスとデータバスは分離されています。
プログラムバスは 1 サイクルあたり 64 ビット分の命令語をメモリより読み込みます。読み込まれた
命令語は命令キューによって整列されます。
データバスはリード / ライト共通の 32 ビットバスが 1 つと、リード専用の 32 ビットバスが 1 つあ
ります。命令によって、2 つのデータバスは同時に使用することができます。
・32 ビット リード / ライト共通データバス (X バス )
・32 ビット リードデータバス (Y バス )
・64 ビット プログラムバス (P バス )
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
2頁
Ximo16A
Preliminary
図 2-1: コアブロック図
16
フロー制御ユニット
命令デコードユニット
c1
s1
e1
c0
s0
e0
pc
m1
m0
sp
l1
n1
l0
n0
fp
p5
p4
p3
p2
p1
p0
Program
Address
Gen.
64
Instruction Queue
Instruction Decoder
2.2
d14
d13
d11
d9
d7
d5
d3
d1
d12
d10
d8
d6
d4
d2
d0
Program Data Bus
データアドレス生成ユニット
Data
Address
Gen. 1
Data
Address
Gen. 0
16
16
データ演算ユニット
d15
Program Address Bus
32
Barrel
Shifter
40-bit
ALU
40
Data Address Bus X
Data Address Bus Y
Write Data Bus X
16x16
MPY
32
32
a1
a0
32
32
Read Data Bus X
Read Data Bus Y
コアレジスタ
レジスタユーザモデルを図 2-2 を示します。
コアのレジスタは 16 本の 16 ビットデータレジスタと 8 本の 16 ビットポインタレジスタを中心に
構成されています。
このほかに、40 ビットのアキュームレータレジスタ 2 本、データアドレス生成の設定レジスタ 3 本
x2 セット、ハードウェアループ設定レジスタ 3 本 x2 セットなどから成ります。
3頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
図 2-2: レジスタモデル
a1i[7:0]
a1i[7:0]
d15[15:0]
d7h[15:0]
d14[15:0]
d7l[15:0]
d15.14[31:0]
d13[15:0]
d6h[15:0]
d12[15:0]
d6l[15:0]
d13.12[31:0]
d11[15:0]
d5h[15:0]
d10[15:0]
d5l[15:0]
d11.10[31:0]
d9[15:0]
d4h[15:0]
d8[15:0]
d4l[15:0]
d9.8[31:0]
d7[15:0]
d3h[15:0]
d6[15:0]
d3l[15:0]
d7.6[31:0]
d5[15:0]
d2h[15:0]
d4[15:0]
d2l[15:0]
d5.4[31:0]
d3[15:0]
d1h[15:0]
d2[15:0]
d1l[15:0]
d3.2[31:0]
d1[15:0]
d0h[15:0]
d0[15:0]
d0l[15:0]
d1.0[31:0]
a1h[15:0]
a1h[15:0]
a1l[15:0]
a1l[15:0]
a1[39:0]
a0i[7:0]
a0i[7:0]
a0h[15:0]
a0h[15:0]
a0l[15:0]
a0l[15:0]
a0[39:0]
sp[15:0]
m1[15:0]
m1[15:0]
c1[15:0]
fp[15:0]
fp[15:0]
l1[15:0]
l1[15:0]
s1[15:0]
p5[15:0]
p5[15:0]
n1[15:0]
b1[15:0]
e1[15:0]
p3[15:0]
p3[15:0]
m0[15:0]
m0[15:0]
c0[15:0]
p2[15:0]
p2[15:0]
l0[15:0]
l0[15:0]
s0[15:0]
p1[15:0]
p1[15:0]
n0[15:0]
b0[15:0]
e0[15:0]
pc[15:0]
st[15:0]
pm[15:0]
spc[15:0]
sst[15:0]
sc1[15:0]
p4[15:0]
p4[15:0]
p0[15:0]
p0[15:0]
ss1[15:0]
se1[15:0]
sc0[15:0]
ss0[15:0]
se0[15:0]
表 1:レジスタの種類
種類
機能
リセット時
汎用データレジスタ
d0 - d15
d1.0 - d15.14
d0 から d15 までの 16 ビット、16 本のレジスタを表します。
通常は 16 ビットレジスタとして使用されますが、命令によって 32 ビッ
ト、8 本のレジスタとして使用できます。
不定
アキュームレータレジスタ
a0
a0i/a0h/a0l
a1
a1i/a1h/a1l
2 本の 40 ビットレジスタ a0/a1 を表します。アキュームレータレジス
タは 8 ビットの a0i/a1i、16 ビットの a0h/a1h、16 ビットの a0l/a1l、
と 3 つの部位に分解してアクセスすることができます。
a0i/a1i を読み出す場合は、最上位ビットであるビット 7 から符号拡張
した値が得られます。これら上位の 8 ビットは積和演算などの累加算に
よるオーバーフローを保持するために用いられます。
不定
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
4頁
Ximo16A
Preliminary
表 1:レジスタの種類
種類
機能
リセット時
p0/p1/p2/p3/p4/p5/fp/sp の 8 本の 16 ビットレジスタを表します。こ
れらのレジスタはアドレス空間を指示するためのポインタレジスタとし
て用いられます。
sp はスタックトップを指示するためのポインタとして使用されます。
fp はスタックフレームを指示するためのポインタとして、一部の命令
で特殊な操作、アドレッシングがサポートされています。
p0-5/fp:
不定
ステータスレジスタ
st
cc
st レジスタを表します。ALU/ シフト演算での各コンディションコード
ビット、割込みレベルを表すビットなどから成ります。
cc レジスタはコンディションコードレジスタで、st レジスタの下位 8
ビットのみを指します。このシンボルでアクセスする場合、上位 8 ビッ
トの読み出し / 書きこみはできません。
0xC000
動作モードレジスタ
pm
pm レジスタを表します。予測分岐やストアバッファの設定ビットなど
から成ります。
0x0000
プログラムカウンタレジスタ
pc
実行するプログラムのアドレスを指示します。プログラムフロー制御命
令によって操作されます。
不定
ループカウンタレジスタ
c0/c1
2 本の 16 ビットレジスタ c0/c1 を表します。ハードウェアループ動作
でのループ回数カウンタとして使用されます。
0x0000
ループスタートレジスタ
s0/s1
2 本の 16 ビットレジスタ s0/s1 を表します。ハードウェアループ動作
でのループ上限アドレスを指示するレジスタとして使用されます。
不定
ループエンドレジスタ
e0/e1
2 本の 16 ビットレジスタ e0/e1 を表します。ハードウェアループ動作
でのループ下限アドレスを指示するレジスタとして使用されます。
不定
ポインタモデファイレジスタ
m0/m1
2 本の 16 ビットレジスタ m0/m1 を表します。通常はポインタレジスタ
の自動更新でのステップ値として使用されます。
不定
バッファサイズレジスタ
l0/l1
2 本の 16 ビットレジスタ l0/l1 を表します。データアドレス生成ユ
ニットの動作モード設定や循環バッファアドレッシング時のバッファサ
イズ値として使用されます。
0x0000
バッファアドレスレジスタ
n0/n1
2 本の 16 ビットレジスタ n1/n0 を表します。循環バッファアドレッシ
ング時のバッファの先頭アドレスとして使用されます。
不定
pc 内部スタックレジスタ
spc
高速割込み時に pc レジスタの値がコピーされます。
不定
st 内部スタックレジスタ
sst
高速割込み時に st レジスタの値がコピーされます。
不定
c0/c1 内部スタックレジスタ
sc0/sc1
高速割込み時に c0/c1 レジスタの値がコピーされます。
不定
s0/s1 内部スタックレジスタ
ss0/ss1
高速割込み時に s0/s1 レジスタの値がコピーされます。
不定
e0/e1 内部スタックレジスタ
se0/se1
高速割込み時に e0/e1 レジスタの値がコピーされます。
不定
ポインタレジスタ
p0 - p5/fp/sp
2.2.1
sp:
0xFFDF
ステータスレジスタとコンディションコードレジスタ
ステータスレジスタ st は 16 ビット幅のレジスタで、ビット 7 からビット 0 は演算のコンディショ
ンコードレジスタ cc で構成されています。このほかに割込みステータスビット、レジスタバンクビッ
トなどがあります。
表 2:st レジスタのビット割り当て
ビット位置
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
シンボル
I1
I0
FI
EE
-
-
-
B
U
E
S
F
N
V
Z
C
5頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
表 3:st レジスタ内のビット
ビット
説明
リセット後の値
C
加算命令の場合、キャリーが発生するとセットされ、そうでない場合クリアされます。減算 / 比較
命令の場合ボローが発生するとセットされ、そうでない場合クリアされます。
演算の結果がゼロの場合にセットされ、そうでない場合にクリアされます。
演算の結果、オーバーフローが発生するとセットされ、そうでない場合にクリアされます。
演算結果の最上位ビットがコピーされます。
演算の結果、オーバーフローが発生するとセットされます。ユーザーが明示的にクリアしない限り
クリアされないスティッキービットです。
演算の結果、飽和処理が行なわれた場合にセットされます。ユーザーが明示的にクリアしない限り
クリアされないスティッキービットです。
アキュームレータをディスティネーションとする演算の結果、アキュームレータのビット 39 から
ビット 31 までが全て 1 または全て 0 で無い場合にセットされ、そうでない場合にクリアされます。
これは 40 ビットアキュームレータの値を 2 の補数とした場合、アキュームレータの拡張ワード部分
に有意なデータが存在しているかどうかを指示します。
コンディションコピー命令 ccp によってセットまたはクリアされます。
レジスタバンクの現在選択されているバンクを表します。
エラー例外の発生を表すステータスビットです。
エラー例外を受け付けるとセットされます。詳細は「5.6 エラー例外」を参照して下さい。
高速割込みのステータスを表すビットです。
高速割込みを受け付けるとセットされます。詳細は「5.3 高速割込み」を参照して下さい。
コアの割込みマスクレベルとして使用されます。
コアの割込みマスクレベルとして使用されます。
0
Z
V
N
F
S
E
U
B
EE
FI
I0
I1
2.2.1.1
0
0
0
0
0
0
0
0
0
0
1
1
コンディションコードレジスタ
コンディションコードレジスタ cc は st レジスタの下位 8 ビットで構成されます。このレジスタには
ALU/ シフタによる演算のコンディションが格納されます。
一部の命令はシンボル cc によってこのレジスタのみにアクセスすることが可能です。
2.2.1.2
コンディションコード
条件付きブランチ / ジャンプ命令、条件付きレジスタ間転送命令、コンディションコピー命令では以
下のコンディションコードを使用できます。
表 4:コンディションコード一覧
シンボ
ル
condition
フィールド
真の条件
zc
zs
gt
ge
lt
le
ugt
ule
uge/cc
ult/cs
vc
vs
nc
ns
al
fc
fs
sc
ss
ec
es
uc
us
b_00000
b_00001
b_00010
b_00011
b_00100
b_00101
b_00110
b_00111
b_01000
b_01001
b_01010
b_01011
b_01100
b_01101
b_01111
b_10000
b_10001
b_10010
b_10011
b_10100
b_10101
b_10110
b_10111
Z clear
等しく無い
!=
Z set
等しい
==
signed greater than
大きい ( 符号有り )
>
signed greater than or eqaul
大きい又は等しい ( 符号有り ) >=
signed less than
小さい ( 符号有り )
<
signed less than or equal
小さい又は等しい ( 符号有り ) <=
unsigned greater than
大きい ( 符号無し )
>
unsigned less than or equal
小さい又は等しい ( 符号無し )
<=
unsigned greater than or equal (C clear) 大きい又は等しい ( 符号無し ) >=
unsigned less than (C set)
小さい ( 符号無し )
<
V clear
オーバーフロー無し
V set
オーバーフロー有り
N clear
正又はゼロ
>=0
N set
負
< 0
always
条件無し ( 常に真 )
F clear
スティッキーオーバーフロー無し
F set
スティッキーオーバーフロー有り
S clear
飽和演算無し
S set
飽和演算有り
E clear
拡張アキュームレータ不使用
E set
拡張アキュームレータ使用
U clear
U ビットクリア
U set
U ビットセット
2013.12.20 版
意味
(C) 2009-2013 New Japan Radio Co., Ltd.
比較命令後
の意味
ビットの状態
Z=0
Z=1
N=V and Z=0
N=V
N!=V
N!=V or Z=1
C=0 and Z=0
C=1 or Z=1
C=0
C=1
V=0
V=1
N=0
N=1
F=0
F=1
S=0
S=1
E=0
E=1
U=0
U=1
6頁
Ximo16A
Preliminary
pm レジスタ
2.2.2
pm(Processor Mode)レジスタはコア全体の動作モードを切り替える設定ビットから構成されていま
す。分岐予測機能の on/off、ストアバッファの on/off、丸めモードの切り替えビットなどからなります。
表 5:pm レジスタのビット割り当て
ビット位置
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
シンボル
-
-
-
-
-
-
-
-
-
-
-
RM
-
-
BPEN SBEN
0
表 6:pm レジスタ内のビット
ビット
説明
リセット後の値
SBEN
ストアバッファの設定ビットです。
0: ストアバッファオフ
1: ストアバッファオン
分岐予測器の設定ビットです。
0: 分岐予測オフ ( 全エントリ無効 )
1: 分岐予測オン
rnd 命令での丸めモードを選択します。
0:四捨五入
1: 偶数丸め
0
BPEN
RM
2.2.2.1
0
0
SBEN ビット
コアはストアバッファと呼ばれるメモリへの書き込みデータ用一時バッファを持っており、SBEN
ビットをセットするとストアバッファの動作を有効にします。
ストアバッファはメモリへの遅延書き込みを実現することでバス競合によるコアのパイプラインス
トールを軽減することが可能です。ストアバッファを有効にしている場合、データメモリ空間へのア
クセスは命令の実行順と異なる場合があります。
たとえば以下のような命令手続きを実行するとき、
mov.w (0x1000), d0
mov.w d0, (0x1001)
ストアバッファが有効な場合、アドレス 0x1000 への書き込みは一度ストアバッファに保持され、ア
ドレス 0x1001 からの読み出しが先に処理されます。コアのパイプラインはストールしません。
ストアバッファが無効な場合、アドレス 0x1000 への書き込み終了を待ってからアドレス 0x1001 か
らの読み出しが実行され、その間コアはストールします。この動作は読み書きする相手がメモリであ
る場合、ユーザが特に意識する必要はありません。しかし IO 領域にマップされるペリフェラルに対す
るアクセスを行なう場合、バスアクセスの順序が意味を持つことがあるため注意が必要です。
以下のケースでは SBEN ビットの状態に関わらずストアバッファを含む書き込みトランザクション
が全て処理された後に実行されることが保障されます。
・同じアドレスに対する Write After Read
・movp.w 命令によるリードアクセス
・メモリオペランドに対するビット操作命令
2.2.2.2
BPEN ビット
コアは分岐先アドレスを最大 16 個保持することができる分岐予測器をもっており、BPEN ビットを
セットすると分岐予測器の動作が有効になります。
分岐予測器はフルアソシエイティブ型の 16 エントリ分岐先アドレスキャッシュと各エントリに対す
る 2 ビットの分岐方向履歴バッファから構成されています。コアは bra/jmp/call 命令のいずれかを実行
する場合に分岐予測器に対してエントリの作成 ( すでにエントリが存在する場合は、分岐履歴バッファ
の更新 ) を行います。
エントリの作成 / 破棄は FIFO 方式で行なわれ、エントリに無い分岐命令が現れると最も古いエント
リが捨てられます。
エントリに存在する分岐命令を実行する場合、分岐方向履歴に基づきプリフェッチの段階で投機的
7頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
に分岐が実行され、プリフェッチの方向が変化します。その予測がヒットしている場合は、bra/jmp/
call 命令は最速 1 システムクロックで実行可能です。予測がヒットしなかった場合には、分岐動作が再
実行されるため命令の実行結果に差はありません。
但しプログラムに対して自己書き換えを行なった場合には、分岐先アドレスキャッシュに存在する
有効エントリと実際のプログラムの同期性が破壊されます。その結果、暴走を引き起こす危険性があ
ります。こういった操作を行なう場合は一度 BPEN ビットをクリアして全エントリを破棄し、プログ
ラムメモリと分岐先アドレスキャッシュとの同期性を確保する必要があります。
2.2.2.3
RM ビット
詳細は「6.3.2 丸め処理」を参照して下さい。
2.3
レジスタバンク
コアレジスタの一部はレジスタのバンクをもっています。バンク化されているレジスタは d0 - d15 /
a0, a1 / p0 - p5, fp / m0, m1 / l0, l1 / n0, n1 レジスタで、それぞれ 1 つのバンクを持ちます。リセット
直後はバンク 0 の常態にあります。st レジスタ内の B ビットにコアレジスタの現在使用されているバ
ンクの状態が表示されます。
B ビットの値を直接書き換えることで、どちらのバンクのレジスタにもアクセスすることが可能で
す。ただしバンク 1(B=1) は高速割込みのサービスルーチンにおけるコンテキストとして使用すること
を前提としています。このため高速割込みの受付時には B ビットは自動的に 1 にセットされ、レジス
タのバンクはバンク 1 の方向へ切り替わります。
3
3.1
メモリ構成
メモリマップの概要
64K のワードアドレスの内、アドレス 0x0000 から 0x00FF までは IO 領域がマップされます。また
アドレス 0xFFE0 から 0xFFFF がベクタテーブルとなります。
メモリは図 3-1 のようにデータ RAM 及びプログラム RAM がアドレス空間内にマップされます。こ
の例では 0x4000 から 0x5FFF までがデータメモリ、0x8000 から 0xBFFF までがプログラムメモリと
なります。これらの配置はデバイスのインテグレーションにより異なります。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
8頁
Ximo16A
Preliminary
図 3-1: メモリマップ例
0x0000
IO
(256)
0x00FF
0x4000
DATA RAM
(8K)
0x5FFF
0x8000
PROGRAM RAM
(16K)
0xBFFF
0xFFE0
0xFFFF
3.2
VECTOR TABLE
(32)
メモリ上のデータ配置
メモリ上のデータは 16 ビットワードと 32 ビットロングワードがあります。16 ビットワードデータ
の配置はリトルエンディアンです。32 ビットロングワードデータは、必ず偶数アドレス境界からアク
セスする必要があります。
図 3-2: メモリ上のデータ配置
X+1
15
31
X
ワード1
0 15
ロングワード
奇数番地
3.3
ワード0
0
0
X番地
X+2番地
偶数番地
メモリ上の命令語の配置
命令語には 1 ワード命令 (16 ビット長命令 ) と 2 ワード命令 (32 ビット長命令 ) があります。2 ワー
ド命令に対する偶数アドレス境界へのアライメントは必要ありません。命令は下図のように配置され
ます。
9頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
図 3-3: メモリ上の命令配置
15
0
1ワード命令
W1
15
0 15
0
W1
W2
Y+1
Y
2ワード命令
16-bit命令1
16-bit命令0
Y番地
32-bit命令2
W2
32-bit命令2
W1
Y+2番地
32-bit命令4
W1
16-bit命令3
Y+4番地
32-bit命令4
W2
Y+6番地
アドレッシングモード
4
コアレジスタ ( 直接アドレッシング )
4.1
コアレジスタを命令中のオペランドとする場合は、レジスタ名を使用します。表 1「レジスタの種
類」のレジスタを参照して下さい。
メモリ
4.2
命令中のオペランドでメモリ上のデータを表す場合、( ) を使用します。
ポインタレジスタ間接アドレッシング
4.2.1
ポインタレジスタ Preg を使った間接アドレッシングが使用できます。アドレッシングを指示する命
令フィールドは次のように割り当てられます。
bit 15
14
13
12
11
10
9
8
7
6
5
4
3
Addressing
Mode
2
1
Pointer
Preg#
0
AddressingMode には次の修飾を使用できます。
アドレッシングモー
ド
(AddressingMode
フィールド )
シンボル
有効アドレス
ポインタ自動更新
b_000
b_001
b_010
b_011
b_100
b_101
b_110
b_111
(Preg)
Preg
[reserved]
(Preg+)
Preg
(Preg-)
Preg
(Preg+,m0) Preg
(Preg-,m0) Preg
(Preg+,m1) Preg
(Preg-,m1) Preg
[reserved]
Post Increment
Post Decrement
Post Increment
Post Decrement
Post Increment
Post Decrement
by
by
by
by
by
by
Operand Size
Operand Size
m0 register
m0 register
m1 register
m1 register
※「8 命令一覧」などでの表記「(Preg)」は、これらのアドレッシングモードを代表して表してい
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
10 頁
Ximo16A
Preliminary
ます。実際には上表のアドレッシングを全て使用することができます。
このモードでは Preg の値が有効アドレスとして使用されます。またアドレッシングの修飾によって
使用したポインタの値を更新することができます。(Preg+),(Preg-) 修飾では 16 ビットワードアクセス
の場合、+1 または -1 され、32 ビットロングワードアクセスの場合、+2 または -2 されます。
m0/m1 によるインクリメント / デクリメントでは m0 または m1 にセットされている値が更新値と
して使用されます。またこのモードでは l レジスタ、n レジスタの設定によって特殊なポインタ更新が
可能です。この機能については「4.3 ポインタレジスタの自動更新機能」を参照して下さい。
4.2.2
ポインタレジスタ相対アドレッシング
ポインタレジスタ Preg に対する相対アドレッシングが使用できます。
アドレッシングモード
シンボル
有効アドレス
16-bit offset
(IMM16,Preg) Preg+IMM16
short offset (fp のみ ) (-IMM6,fp) fp-IMM6
ポインタ自動更新
-
このモードでは使用するポインタレジスタにオフセット値を加算した値が有効アドレスとして使用
されます。ポインタレジスタの値は変更されません。
6 ビットのショートオフセット付きのアドレッシングは fp レジスタに対してのみ使用することがで
きます。6 ビットのオフセット値 IMM6 は、7 ビットの符号付き数の負の値から、MSB を省いた形式
で表現されます。よって 0x3F で -1、0x00 で -64 を表します。
4.2.3
絶対アドレッシング
命令中の即値フィールドが有効アドレスとなります。
アドレッシングモード
シンボル
有効アドレス
ポインタ自動更新
absolute
absolute
(peripheral)
(IMM16)
(IMM8)
IMM16
IMM8
-
4.3
ポインタレジスタの自動更新機能
4.3.1
オペランドサイズによる更新
(Preg+) または (Preg-) のアドレッシングモードでは、命令によって定まるオペランドサイズ分がポ
インタレジスタからインクリメントまたはデクリメントされます。16 ビットワードアクセスならば +1
または -1、32 ビットロングワードアクセスならば +2 または -2 がポインタレジスタに加えられます。
4.3.2
m0/m1 レジスタによる更新
アドレッシングモード、(Preg+, m0),(Preg-, m0),(Preg+, m1), (Preg-, m1) では、インクリメント、デ
クリメントのステップ値に m0 又は m1 レジスタの値が選択されます。このモードでは l0/l1 レジスタ、
n0/n1 レジスタの設定によって特殊な機能を持ったポインタの更新が可能です。
m0/l0/n0 および m1/l1/n1 レジスタは暗黙の組として動作し、m0 レジスタによる更新では、l0/n0 レ
ジスタによる設定が、m1 レジスタによる更新では l1/n1 レジスタによる設定が有効になります。
4.3.2.1
リニア更新アドレッシング
このアドレッシングモードではポインタレジスタに対して、m レジスタの値が、加算または減算さ
れます。このモードを選択するには対応する l レジスタの値を 0x0000 に設定します。n レジスタの値
は、このモードの動作に影響を与えません。
11 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
4.3.2.2
Ximo16A
モジュロアドレッシング
このアドレッシングモードでは l レジスタ及び n レジスタで指定したアドレスの範囲内でポインタ値
がラップアラウンドします。
l レジスタでバッファのサイズを、n レジスタでバッファの先頭アドレスを、m レジスタで更新のス
テップ値を設定します。
このモードを選択するには、l レジスタを 0x0001 ∼ 0x8000 の範囲に設定します。また m レジスタ
の値は l レジスタで設定したバッファサイズより大きな値を取ることは出来ません。ポインタレジスタ
の更新は次のアルゴリズムによって決定されます。
1. インクリメント (Preg+, m0),(Preg+, m1) 場合
(Preg_old + m) >= ( n + l ) の場合、Preg は
Preg_new = (Preg_old + m) - l
それ以外では
Preg_new = Preg_old + m
となります。
2. デクリメント (Preg-, m0), (Preg-,m1) の場合
(Preg_old - m) < n の場合、Preg は
Preg_new = (Preg_old - m) + l
それ以外では
Preg_new = Preg_old - m
となります。
4.3.2.3
ビットリバースアドレッシング
このアドレッシングモードでは FFT 演算で使用されるビットリバース加算によるポインタレジスタ
の更新を行ないます。このモードを選択するには l レジスタの値を 0xFFFF に設定します。n レジスタ
の値は、このモードの動作に影響を与えません。
このモードではポインタレジスタと m レジスタのビットの並びを反転させてから加算又は減算し、
その結果のビットの並びを、再び反転させてからポインタレジスタの新しい値とします。
p0 を 0xF000、m0 を 0x0008、l0 を 0xFFFF として (p0+,m0) による更新を行なう場合、p0 の値は
次のように変化します。
0xF000 → 0xF008 → 0xF004 → 0xF00C → 0xF002 → 0xF00A → 0xF006 →
このモードでは m の値に 2 の累乗の値を取るとき、有意な動作をします。
5
例外処理
コアはリセット、割込み要求、エラー状態などの例外要因が検出された場合に、通常とは異なるプ
ログラムフローを発生させることで、例外要因に対して処理を行なうことが出来ます。この処理を例
外処理と呼びます。
例外処理を行なうルーチンの先頭アドレスはメモリ空間内のベクタテーブルによって設定され、各
例外要因の発生により、ベクタテーブルに設定されたアドレスへジャンプします。
ベクタテーブルの詳細については、SIM(System Integration Module) 及びデバイスのインテグレー
ションに関する仕様を参照して下さい。
5.1
リセット
リセット信号により、コア内のレジスタは初期値がセットされ、コアは割込み禁止状態になります。
また分岐予測、ストアバッファの機能もオフになります。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
12 頁
Ximo16A
Preliminary
リセット信号が解除されるとメモリ上の割込みベクタテーブルに設定されたリセットベクタのアド
レスへジャンプします。
5.2
割込み
5.2.1
通常の割込み処理
ベクタテーブルは割込み要因の種類ごとのベクタアドレスを持ち、各種の割込みサービスルーチン
の先頭アドレスとして使用されます。
コアが割込み許可状態のとき、割込みコントローラから割込み要求が発生すると割込み処理が開始
されます。
遷移動作として、割込みが発生した時点のプログラムカウンタ pc の値とステータスレジスタ st の値
が、sp レジスタの指すデータメモリのスタックにプッシュされます。また st レジスタ内の割込みマス
クビット I1,I0 は受け付けた割込みのレベルによって新しい値が設定されます。その後、ベクタテーブ
ルで定められた割込みサービスルーチンへジャンプします。
5.2.2
割込みの優先度
割込みには優先度のレベルがあり、割込みコントローラの設定によって各割込み要因に対して、独
立した割込みレベルを設定することが可能です。割込みレベルは、優先度の高い順に、NMI、レベル
2、レベル 1、レベル 0 があります。
コアは、st レジスタ内の割込みマスクビット I1,I0 によって許可される割込みのレベルが設定されま
す。割込みレベルと I1,I0 ビットの対応は表 7 のようになります。また NMI を除く割込みでは、割込み
受付時に I1,I0 ビットが、受け付けた割込みのレベルよりも 1 つ高い値に設定され、自動的に同じレベ
ルの割込みがマスクされます。その対応は表 8 のようになります。
NMI では I1,I0 ビットともに 1 がセットされます。この割込みを I1,I0 ビットの値によってマスクす
ることは出来ません。
表 7:I1,I0 ビットと割込みレベル
割込みが許可されるレベル
割込みがマスクされるレベル
NMI
NMI,2
NMI,2,1
NMI,2,1,0
2,1,0
1,0
0
-
st レジスタ
I1
I0
1
1
0
0
1
0
1
0
表 8:割込み受付後の I1,I0 ビット
受け付けた割込みレベル
NMI
2
1
0
5.2.3
st レジスタ
( 割込み受付後 )
I1
I0
1
1
1
0
1
1
0
1
割込みからの復帰
割込み処理から復帰するには rti 命令を使用します。rti 命令は sp レジスタの指すデータメモリのス
タックトップから st レジスタと pc レジスタを復帰し、割込み処理前のルーチンへ戻ります。
5.3
高速割込み
コアは割込み発生から割込みサービスルーチンの実行開始までに必要とされる時間を短縮するため
に、高速割込みの機能を持っています。高速割込みは、SIM(System Integration Module) に高速割込み
として扱う割込みリソースと、その割込みベクタアドレスを設定することで利用可能になります。
13 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
5.3.1
Ximo16A
高速割込みの処理
コアが割込み許可状態のとき、高速割込み要求が発生すると、高速割込みの処理が開始されます。
高速割込では、遷移動作として pc, st, c0, c1, s0, s1, e0, e1 レジスタがコア内部スタック spc, sst,
sc0, sc1, ss0, ss1, se0, se1 レジスタへコピーされます。
そして st レジスタ内の高速割込みステータスビット FI とレジスタバンク切り替えビット B とが 1 に
セットされます。割込みマスクビット I1,I0 は高速割込みに割り当てられた割込みの優先度によって設
定されます。その後コアは SIM(System Integration Module) に設定されたベクタアドレスへジャンプし
ます。
この一連の動作は高速割込み受付時にハードウェアの動作で行なわれます。高速割込みを受け付け
た時点で、pc、st、及びハードウェアループに関連するレジスタは内部スタックへコピーされ、また
データレジスタ、ポインタレジスタはバンクが切り替わります。このためサービスルーチンにおいて
は、ほとんどのコアリソースに対して退避 / 復帰を行なう必要がありません。
5.3.2
コア内部スタックと高速割込みからの復帰
高速割込み受付時にコアレジスタを保存するために、pc, st, c0, c1, s0, s1, e0, e1 に対して、それぞ
れ深さ 1 の内部スタック用レジスタ spc, sst, sc0, sc1, ss0, ss1, se0, se1 があります。高速割込み発生
時には、対応するレジスタの値がコピーされます。
高速割込みからの復帰には rtf 命令を使用します。rtf 命令が実行された場合、これらの内部スタック
からコアレジスタを復帰し、割込み前のルーチンへ戻ります。
内部スタックレジスタに直接アクセスできる命令として movst.w 命令が用意されています。
5.3.3
ネストした高速割込み
基本的にネストした高速割込みを行なうことは出来ません。
st レジスタ内の FI ビットがセットされている状態で高速割込み要求が発生し、その割込みの優先度
がコアの割込みマスクレベルよりも高い場合、この割込みはスプリアス割込みとして処理されます。高
速割込みは発生しません。
5.4
ソフトウェアによる割込み / 例外
5.4.1
trap 命令
trap 命令はソフトウェア割込みを発生させる命令です。この命令が実行されると、trap 命令の次の
命令のアドレスとステータスレジスタが、sp レジスタの指すデータメモリのスタックにプッシュされ
ます。
またこの命令は NMI と同じ優先度で処理され、st レジスタ内の I1,I0 ビットには 1 がセットされま
す。その後、ベクタテーブルで定められたサービスルーチンへジャンプします。
復帰するには rti 命令を用います。rti 命令実行後、trap 命令の次の命令から実行が再開されます。
5.4.2
debug 命令
debug 命令はデバッグ例外を発生させる命令です。ソフトウェアでブレイクポイントを設定する場
合に使用します。
この命令が実行されると、遷移動作として、debug 命令のある番地とステータスレジスタが、sp レ
ジスタの指すデータメモリのスタックにプッシュされます。またこの命令は NMI と同じ優先度で処理
され、st レジスタ内の I1,I0 ビットには 1 がセットされます。その後ベクタテーブルで定められたサー
ビスルーチンへジャンプします。
復帰するには rti 命令を用います。ただし、debug 命令では戻り番地として debug 命令のある番地が
スタックされますので、そのまま rti 命令を実行すると再びブレイクポイントのトラップが発生します。
debug 命令を本来の命令に書き換えてから復帰を行なう必要があります。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
14 頁
Ximo16A
5.5
Preliminary
デバッグ例外
コアのデバッグモードがソフトウェアデバッグモードであり、かつデバッグユニットに設定したブ
レイク条件が成立した場合に発生します。
遷移動作として、ブレイク条件が成立した時点のプログラムカウンタ pc の値とステータスレジスタ
st の値が、sp レジスタの指すデータメモリのスタックにプッシュされます。デバッグ例外は NMI と同
じ優先度で処理され、st レジスタ内の I1,I0 ビットには 1 がセットされます。その後、ベクタテーブル
で定められたサービスルーチンへジャンプします。この例外のベクタは debug 命令で使用されるベク
タと同じものです。
デバッグユニットの詳細は DBG16 モジュールを参照して下さい。
5.6
エラー例外
エラー例外には、未定義命令例外、バスエラー例外、COP タイムアウト例外があります。これらの
例外が発生すると NMI の割込みとして処理され、ベクタテーブルで設定されたエラーベクタアドレス
へジャンプします。
遷移動作として、戻り番地とステータスレジスタが、sp レジスタの指すデータメモリのスタックに
プッシュされます。エラー例外は NMI と同じ優先度で処理され、st レジスタ内の I1,I0 ビットには 1 が
セットされます。またエラー例外の発生を表す st レジスタ内のビット EE が 1 にセットされます。そ
の後、ベクタテーブルで定められたサービスルーチンへジャンプします。
エラー要因は SIM(System Integration Module) の SIMEXCP レジスタに表示され、サービスルーチン
から参照することで発生したエラーの要因を知ることができます。
5.6.1
未定義命令例外
未定義のオプコードを持つ命令が実行されようとした場合に発生します。この例外では戻り番地と
して未定義命令のある番地がスタックに保存されます。
5.6.2
バスエラー例外
プログラムメモリ、またはデータメモリへのアクセスで不正な番地、不正なアライメントのアクセ
ス、バスのタイムアウトがあった場合に発生します。
プログラムメモリへのアクセスで発生したバスエラー例外は、エラーが発生した命令の先頭番地が
戻り番地としてスタックに保存されます。
データメモリのアクセスで発生したバスエラーでは、エラーを引き起こした命令のアドレスと、戻
り番地としてスタックされるアドレスとの間に同期性は保証されません。バスエラー発生後、数命令
後の実行番地が戻り番地としてスタックに保存されます。
5.6.3
COP タイムアウト例外
SIM(System Integration Module) が持つ COP(Watch Dog Timer 機能 ) は、そのタイムアウトを割込
み要因として使うことができます。COP のタイムアウト割込みはエラー例外として処理されます。
5.6.4
多重のエラー例外
st レジスタのエラー例外ステータスビット EE が 1 の状態で新たなエラー例外が発生した場合、コ
アは多重エラーの発生と判断します。多重エラーが検出された場合、コアは外部に対してリセット要
求を出し、動作を停止します。復帰はリセットによって行なわれます。
15 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
データ演算モデル
6
6.1
データ形式
6.1.1
符号無し数
符号無し数は全て正の値として扱われます。16 ビットワードの場合、0x0000 が最小値で 0xFFFF が
最大値です。
6.1.2
符号付き数
符号付き数は 2 の補数表現の数として扱われます。16 ビットワードの場合、0x8000 が最小値で
0x7FFF が最大値です。
6.1.3
固定小数点型
6.1.3.1
1.15 符号付き固定小数
16 ビットワードの符号付き数の最上位 1 ビットを整数部、残りの 15 ビットを小数部として扱うデー
タ形式です。
10 進の小数として表現する場合、次の範囲と精度を持ちます。
最小値 : -1.0 (0x8000)
最大値 : 0.999969482421875 (0x7FFF)
1LSB の精度 : 0.000030517578125 (0x0001)
6.1.3.2
1.31 符号付き固定小数
32 ビットロングワードの符号付き数の最上位 1 ビットを整数部、残りの 31 ビットを小数部として
扱うデータ形式です。
10 進の小数として表現する場合、次の範囲と精度を持ちます。
最小値 : -1.0 (0x8000 0000)
最大値 : 0.9999999995343387126922607421875 (0x7FFF FFFF)
1LSB の精度 : 0.0000000004656612873077392578125 (0x0000 0001)
6.1.3.3
9.31 符号付き固定小数
40 ビット拡張ロングワードの符号付き数の上位 9 ビットを整数部、残りの 31 ビットを小数部とし
て扱うデータ形式です。
10 進の小数として表現する場合、次の範囲と精度を持ちます。
最小値 : -256.0 (0x80 0000 0000)
最大値 : 255.9999999995343387126922607421875 (0x7F FFFF FFFF)
1LSB の精度 : 0.0000000004656612873077392578125 (0x00 0000 0001)
6.2
レジスタ上のデータ形式
コアレジスタ上では 16 ビットワード、32 ビットロングワード、40 ビット拡張ロングワードを扱う
ことができます。40 ビット拡張ロングワードはアキュームレータレジスタのみで操作することが可能
で、ロングワードを上位に 8 ビット拡張したものになります。拡張ロングワードとそれ以外のデータ
型で演算を行なう命令では、図 6-1 に示すようにデータ形式が変換されます。この変換はアキューム
レータに対する演算が固定小数点型で行なわれることを前提としています。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
16 頁
Ximo16A
Preliminary
図 6-1: レジスタ上のデータ形式
15
0
16-bitワード
31
0
32 31
0
32-bitロングワード
39
40-bit拡張ロングワード
アキュームレータに対する算術演算時
32 31
39
ゼロ又は
符号拡張
16-bitワード
16 15
0
ゼロ詰め
32 31
39
ゼロ又は
符号拡張
32-bitロングワード
S
39
0
S
32 31
0
40-bit拡張ロングワード
6.3
飽和処理と丸め処理
6.3.1
飽和処理
オーバーフローに対する誤差の軽減として演算時、またはデータ転送時に飽和処理を行なうことが
可能です。
6.3.1.1
演算時の飽和処理
加減算または左シフトにおいて、演算結果にオーバーフローが発生することがあります。ここでは、
本来正の結果が得られるはずの演算で負の結果となる場合を正のオーバーフロー、負の結果が得られ
るはずの演算で正の結果となる場合を負のオーバーフローと呼びます。
たとえば、16 ビットワードの 2 の補数で表現できる正の最大数 0x7FFF に 1 を加算する場合、結果
は 0x8000 となり、オーバーフローを起こします。
正のオーバーフローでは表現できる正の最大値、負のオーバーフローでは表現できる負の最小値に
演算結果を制限することでオーバーフローによる誤差を抑えることができ、この操作を飽和処理と呼
びます。
16 ビットワードをディスティネーションとする場合、正のオーバーフローでは 0x7FFF、負のオー
バーフローでは 0x8000 へ制限されます。
32ビットロングワードをディスティネーションとする場合、正のオーバーフローでは0x7FFF FFFF、
負のオーバーフローでは 0x8000 0000 へ制限されます。
40 ビット拡張ロングワードをディスティネーションとする場合、正のオーバーフローでは 0x7F
FFFF FFFF、負のオーバーフローでは 0x80 0000 0000 へ制限されます。
飽和処理が可能な命令には、飽和処理オプションを持つ算術命令、算術左シフト命令、アキューム
レータを対象とした算術命令などがあります。
6.3.1.2
データ転送時の飽和処理
アキュームレータレジスタは 40 ビットの拡張ロングワードを格納することができるため、データレ
ジスタや、メモリ上のデータオペランドよりも大きな値を保持することができます。40 ビット拡張ロ
ングワードの上位 8 ビットに意味のあるデータが存在する場合、上位ビットを切り捨てて 16 ビット
ワードや 32 ビットワードへデータを転送すると大きな誤差を生じます。
こうしたケースでも拡張ロングワードの値に飽和処理を適用し、データ転送に伴う誤差を最小限に
おさえることができます。
たとえば a0 レジスタの値が 0xFE 7431 2350 であった場合、この内容をロングワードレジスタ d1.0
へ転送を行なうと、飽和処理の有無で以下ように結果が変化します。
17 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
d1.0 = 0x8000 0000 ( 飽和有り , 負の最小値へ制限される。)
d1.0 = 0x7431 2350 ( 飽和無し , 上位ビットが切り捨てられ、正の値になる。)
データ転送に伴う飽和処理の有無は命令のオプションで明示的に指示します。
6.3.2
丸め処理
値の丸め ( 四捨五入 ) を行なう算術命令として rnd.l 命令及び rnd 命令があります。
丸めを行なう対象オペランドの下位ワードがちょうど 0.5(0x8000) の時、四捨五入を行なうと切り上
げのみが発生し、計算結果に切り上げ方向への偏りが生じます。
この偏りを防ぐために rnd 命令に対して偶数丸めモードを設定することが可能です。このモードは
pm レジスタ内の RM ビットに 1 をセットすることで設定されます。
偶数丸めモードでは対象オペランドの下位ワードが 0x8000 であった場合、上位ワードが必ず偶数に
なる方向へ丸めを行ないます。すなわち、上位ワードの最下位ビットが 0 であった場合には下位ワー
ドは切り捨てられます。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
18 頁
Ximo16A
Preliminary
命令セット概要
7
命令は 16 ビット長の命令と 32 ビット長の命令がサポートされます。16 ビット長の命令は一般的に
よく使用される単純な命令に割り当てられています。32 ビット長命令では複雑な指示が必要な命令、
大きな即値パラメータが必要な命令などに割り当てられています。
演算命令とロード命令 / ストア命令は分離されており、演算命令のソース、ディスティネーションは
必ずコアレジスタ又は命令の即値フィールドから得られます。
特定の 32 ビット長命令ではロード命令 / ストア命令との並列発行が可能です。32 ビット長命令と
16 ビット長のロード命令かストア命令 2 つを組み合わせた、並列転送命令付きの 64 ビット長複合命
令として 1 クロックで処理することが可能です。並列転送命令の形式については「23 並列転送命令の
形式について」を参照して下さい。
命令オプコードの割り当て
7.1
表 9 に命令のビット 15 からビット 12 へのオプコード割り当てを示します。
表 9:命令オプコード bit15:12 の主な割り当て
bit13:12
7.2
bit15:14
00
01
10
11
00
プログラムフロー制御
特殊命令
ロード / ストア 1
ロード / ストア 2
スタック操作
ロード / ストア 3
スタックフレーム相対
01
16 ビット演算命令
32 ビット演算命令
短即値付き演算命
令
短即値付き命令
レジスタ間転送命令
10
分岐命令
-
-
-
11
32 ビット長命令 1
32 ビット長命令 2
32 ビット長演算命令
( 並列転送可能 )
-
コアレジスタエンコード表
コアレジスタのエンコード表を表 10 に示します。命令フィールド中のレジスタのナンバー / グルー
プの指定にはこの値が用いられます。
表 10:コアレジスタエンコード表
Register Group
0 Dreg16_Even
1 Dreg16_Odd
2 Preg
3 DAG_Reg
4 ACC_Reg
5 Loop_Reg
6 Sys_Reg
7 Dreg32
8 Stack_Reg ※
Register Number
0
1
2
d0
d2
d4
d1
d3
d5
p0
p1
p2
m0
l0
n0
a0l
a0h
a0i
c0
s0
e0
st
cc
pm
d1.0
d3.2
d5.4
sc0
ss0
se0
3
d6
d7
p3
d7.6
spc
4
d8
d9
p4
m1
a1l
c1
d9.8
sc1
5
d10
d11
p5
l1
a1h
s1
d11.10
ss1
6
d12
d13
fp
n1
a1i
e1
d13.12
se1
7
d14
d15
sp
d15.14
sst
※ Stack_Reg に直接アクセスする命令は movst.w 命令のみです。
通常は高速割込み、及び高速割込みからの復帰命令 (rtf 命令 ) が
スタックとして使用します。
19 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
7.3
Ximo16A
表記
ここでは各命令の説明で使用するオペランドや操作の略記について定めます。
7.3.1
命令一覧の表記
EA
7.3.2
有効アドレス、及びアドレッシングモードを表します。
IMMbit
bit で表されるビット幅を持つ即値を表します。
Dreg16
d0 - d15 までの 16 ビットデータレジスタを表します。
Dreg32
d1.0 - d15.14 までの 32 ビットデータレジスタを表します。
Preg
p0 - p5/fp/sp のポインタレジスタを表します。
A
a0/a1 のアキュームレータレジスタを表します。
Creg
c0/c1 レジスタを表します。
Sreg
s0/s1 レジスタを表します。
Ereg
e0/e1 レジスタを表します。
(...)
メモリ空間へのアドレッシングを表します。
<...>
命令で使用するオプションを表します。
動作説明中の表記
=
右辺から左辺への値の代入を表します。
+
加算を表します。
-
減算を表します。
論理否定を表します。
&
論理和を表します。
¦
論理積を表します。
^
排他的論理和を表します。
<<
左シフトを表します。
>>
右シフトを表します。
==
右辺値と左辺値の比較を表します。
等しい場合、真を、等しくない場合、偽を返します。
MEM[EA]
アドレス EA の 16 ビットワードのメモリデータを表します。
LONG_MEM[EA] アドレス EA の 32 ビットロングワードのメモリデータを表します。
Dreg16s
ソースとなる 16 ビットデータレジスタを表します。
Dreg16d
ディスティネーションとなる 16 ビットデータレジスタを表します。
Dreg32s
ソースとなる 32 ビットデータレジスタを表します。
Dreg32d
ディスティネーションとなる 32 ビットデータレジスタを表します。
As
ソースとなるアキュームレータレジスタを表します。
Ad
ディスティネーションとなるアキュームレータレジスタを表します。
Pregs
ソースとなるポインタレジスタを表します。
Pregd
ディスティネーションとなるポインタレジスタを表します。
Pointer
ポインタレジスタが間接アドレッシング用のポインタとして使用される場合に、その
ポインタレジスタを表します。
Reg[B]
Reg で示されるレジスタの B ビット目を表します。
Reg[MSB:LSB] Reg で示されるレジスタの MSBit から LSBit までの部分を表します。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
20 頁
Ximo16A
7.3.3
21 頁
Preliminary
コンディションコード動作の表記
-
値が変化しないビットを表します。
0
命令によって常にクリアされるビットを表します。
1
命令によって常にセットされるビットを表します。
↑↓
命令によってセットまたはクリアされるビットを表します。
↑
命令によってセットされるビットを表します。
( クリアはされません。)
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
命令一覧
8
8.1
ロード命令
mov.w Dreg16, (EA)
mov.l Dreg32, (EA)
mov.w Preg, (EA)
mov.w A, (Preg), <s/u>
mov.l A, (Preg), <s/u>
movp.w d0, (IMM8)
8.2
ストア命令
mov.w (EA), Dreg16
mov.l (EA), Dreg32
mov.w (EA), Preg
mov.w (Preg), A, <s/u>
mov.l (Preg), A, <s/u>
movp.w (IMM8), d0
8.3
スタック操作命令
pop.w Reg
push.w Reg
pop.l Dreg32
push.l Dreg32
popm.w Reg
pushm.w Reg
lnk IMM16
ulnk
alsp
8.4
即値ロード命令
movi.w Reg, IMM16
movsi.w Dreg16, IMM5
movsi.w Preg, IMM5
movsi.l Dreg32d, IMM5
8.5
レジスタ間転送命令
mov.w Reg, Reg
mov.l Dreg32, Dreg32
cmov.w Dreg16, Dreg16, <condition>
cmov.l Dreg32, Dreg32, <condition>
movs Dreg32, Dreg16
movz Dreg32, Dreg16
mov.w Dreg16, A, <s/u>
mov.l Dreg32, A, <s/u>
mov.w A, Dreg16, <s/u>
mov.l A, Dreg32, <s/u>
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
22 頁
Ximo16A
Preliminary
mov A, A
movst.w d0, Stack_Reg
8.6
movst.w Stack_Reg, d0
加算命令
add.w Dreg16, Dreg16
add.l Dreg32, Dreg32
adc.w Dreg16, Dreg16
add.w Dreg16, Dreg16, Dreg16, <ns/sa>
add.l Dreg32, Dreg32, Dreg32, <ns/sa>
add.w Preg, Preg
adsi.w Dreg16, IMM4
adsi.w Preg, IMM4
adsi.l Dreg32, IMM4
addi.w Dreg16, IMM16
addi.w Preg, IMM16
add A, Dreg16, <s/u>
add A, Dreg32, <s/u>
add A, A
adl A, A
8.7
減算命令
sub.w Dreg16, Dreg16
sub.l Dreg32, Dreg32
sbc.w Dreg16, Dreg16
sub.w Dreg16, Dreg16, Dreg16, <ns/sa>
sub.l Dreg32, Dreg32, Dreg32, <ns/sa>
sub.w Preg, Preg
sbsi.w Dreg16, IMM4
sbsi.w Preg, IMM4
sbsi.l Dreg32, IMM4
subi.w Dreg16, IMM16
subi.w Preg, IMM16
sub A, Dreg16, <s/u>
sub A, Dreg32, <s/u>
sub A, A
sbl A, A
8.8
比較命令
cmp.w Dreg16, Dreg16
cmpi.w Dreg16, IMM16
cmp.l Dreg32, Dreg32
cmp A, A
23 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
8.9
Ximo16A
乗算命令
mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu>
clr A, mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu>
add A, Dreg32, <s/u>, mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu>
sub A, Dreg32, <s/u>, mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu>
8.10
その他の算術命令
neg.w Dreg16, Dreg16, <ns/sa>
neg.l Dreg32, Dreg32, <ns/sa>
neg A, A
abs.w Dreg16, Dreg16
abs.l Dreg32, Dreg32
abs A, A
rnd.l Dreg32d, Dreg32s
rnd A, A
div Dreg32d, Dreg32s
sat A, A
clr A
8.11
論理演算命令
and.w Dreg16, Dreg16
andi.w Dreg16, IMM16
or.w Dreg16, Dreg16
ori.w Dreg16, IMM16
eor.w Dreg16, Dreg16
eori.w Dreg16, IMM16
com.w Dreg16, Dreg16
8.12
ビット操作命令
bset Dreg16, IMM4
bset (IMM16), IMM4
bclr Dreg16, IMM4
bclr (IMM16), IMM4
btgl Dreg16, IMM4
btst Dreg16, IMM4
8.13
btst (IMM16), IMM4
シフト命令
asl.w Dreg16, Dreg16
asr.w Dreg16, Dreg16
asli.w Dreg16, IMM4
asri.w Dreg16, IMM4
asl.l Dreg32, Dreg32
asr.l Dreg32, Dreg32
asli.l Dreg32, IMM4
asri.l Dreg32, IMM4
asl A, Dreg32
asr A, Dreg32
asli A, IMM4
asri A, IMM4
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
24 頁
Ximo16A
Preliminary
lsl.w Dreg16, Dreg16
lsr.w Dreg16, Dreg16
lsli.w Dreg16, IMM4
lsri.w Dreg16, IMM4
lsl.l Dreg32, Dreg32
lsr.l Dreg32, Dreg32
lsli.l Dreg32, IMM4
lsri.l Dreg32, IMM4
lsl A, Dreg32
lsr A, Dreg32
lsli A, IMM4
lsri A, IMM4
rol.w Dreg16
ror.w Dreg16
8.14
プログラムフロー制御命令 / 特殊命令
nop
dnop
jmp Preg
jmp IMM16, <condition>
call Preg
call IMM16
bra IMM7, <condition>
loop Creg, IMM16
loopi Creg, IMM16, IMM8
ret
rti
rtf
ftrap
trap
debug
sleep
ccp <condition>
lea (Preg)
25 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
9
Ximo16A
ロード命令
mov.w Dreg16, (EA)
mov.l Dreg32, (EA)
mov.w Preg, (EA)
mov.w A, (Preg), <s/u>
mov.l A, (Preg), <s/u>
movp.w d0, (IMM8)
概要 :
この章ではロード命令について説明します。ロード命令ではメモリ上のデータをコアレジス
タへ転送することができます。16 ビットワードデータレジスタ、32 ビットロングワードデータ
レジスタ、ポインタレジスタ、アキュームレータレジスタをディスティネーションに取ることが
できます。アキュームレータに対しては符号拡張、ゼロ拡張を選択できます。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
26 頁
Ximo16A
Preliminary
mov.w Dreg16, (EA)
Load 16-bit data register
EA は以下に示すアドレッシングモードを代表しています。
1. ポインタレジスタ間接 / ポインタレジスタ間接 + 後更新
bit 15
0
14
0
13
0
12
1
11
0
10
0
9
Dreg
16d
Even
/Odd
8
7
6
Dreg16d
(Destination
Dreg16#)
5
4
3
Addressing
Mode
2
1
Pointer
Preg#
0
5
4
3
Dreg16d
(Destination
Dreg16#)
2
1
Pointer
Preg#
0
シンタックス :
mov.w Dreg16d, (Pointer)
mov.w Dreg16d, (Pointer+)
mov.w Dreg16d, (Pointer-)
mov.w Dreg16d, (Pointer+,m0)
mov.w Dreg16d, (Pointer-,m0)
mov.w Dreg16d, (Pointer+,m1)
mov.w Dreg16d, (Pointer-,m1)
2. オフセット付きポインタレジスタ間接
bit 15
1
14
1
13
0
12
0
11
0
10
0
9
0
8
0
7
0
6
Dreg
16d
Even
/Odd
IMM16
シンタックス :
mov.w Dreg16d, (IMM16,Pointer)
3. 6 ビットオフセット付きフレームポインタレジスタ間接
bit 15
0
14
0
13
1
12
1
11
0
10
0
9
8
7
6
5
Dreg IMM6(-64 to -1)
16d
Even
/Odd
4
3
2
1
0
Dreg16d
(Destination
Dreg16#)
シンタックス :
mov.w Dreg16d, (-IMM6,fp)
4. 絶対アドレス
bit 15
1
14
1
13
0
12
0
11
0
10
0
9
0
8
1
7
0
6
Dreg
16d
Even
/Odd
5
4
3
Dreg16d
(Destination
Dreg16#)
2
X
1
X
0
X
IMM16
シンタックス :
mov.w Dreg16d, (IMM16)
27 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
オペランド :
Dreg16d
Pointer
IMM16
IMM6
d0 - d15
p0 - p5/fp/sp
0x0000 - 0xFFFF
-64 - -1 (0x00 - 0x3F)
オペレーション :
Dreg16d = MEM[EA]
説明 :
それぞれのアドレッシングモードで示される有効アドレスから 16 ビットワードのメモリオ
ペランドを読み込み、Dreg16d へ格納します。
ポインタレジスタの自動更新 (1. ポインタレジスタ間接+後更新 ) ではアドレッシングモード
の指示に従ってポインタレジスタの値が更新されます。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例 1:
mov.w d0, (p0)
before
after
d0
p0
MEM[0x1000]
0x0000
0x1000
0x5555
d0
p0
MEM[0x1000]
0x0000
0x1000
0x5555
d0
p0
MEM[0x1000]
0x5555
0x1000
0x5555
例 2:
mov.w d0, (p0+)
before
after
d0
p0
MEM[0x1000]
0x5555
0x1001
0x5555
アドレス 0x1000 からロードした後に p0 がインクリメント (+1) されます。
例 3:
mov.w d0, (0x100,p0)
before
after
d0
p0
MEM[0x1100]
0x0000
0x1000
0x5555
d0
p0
MEM[0x1100]
0x5555
0x1000
0x5555
有効アドレスは p0 に displacement である 0x100 を加算した 0x1100 になります。
例 4:
mov.w d0, (0x1000)
before
d0
MEM[0x1100]
after
0x0000
0x5555
d0
MEM[0x1000]
0x5555
0x5555
補足:
アドレッシングモードの詳細については「4 アドレッシングモード」を参照して下さい。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
28 頁
Ximo16A
Preliminary
mov.l Dreg32, (EA)
Load 32-bit data register
EA は以下に示すアドレッシングモードを代表しています。
1. ポインタレジスタ間接 / ポインタレジスタ間接 + 後更新
bit 15
0
14
0
13
0
12
1
11
0
10
1
9
0
8
7
6
Dreg32d
(Destination
Dreg32#)
5
4
3
Addressing
Mode
2
1
Pointer
Preg#
0
5
4
3
Dreg32d
(Destination
Dreg32#)
2
1
Pointer
Preg#
0
シンタックス :
mov.l Dreg32d, (Pointer)
mov.l Dreg32d, (Pointer+)
mov.l Dreg32d, (Pointer-)
mov.l Dreg32d, (Pointer+,m0)
mov.l Dreg32d, (Pointer-,m0)
mov.l Dreg32d, (Pointer+,m1)
mov.l Dreg32d, (Pointer-,m1)
2. オフセット付きポインタレジスタ間接
bit 15
1
14
1
13
0
12
0
11
0
10
0
9
0
8
0
7
1
6
0
IMM16
シンタックス :
mov.l Dreg32d, (IMM16,Pointer)
3. 6 ビットオフセット付きフレームポインタレジスタ間接
bit 15
0
14
0
13
1
12
1
11
0
10
1
9
0
8
7
6
5
IMM6(-64 to -1)
4
3
2
1
0
Dreg32d
(Destination
Dreg32#)
シンタックス :
mov.l Dreg32d, (-IMM6,fp)
4. 絶対アドレス
bit 15
1
14
1
13
0
12
0
11
0
10
0
9
0
8
1
7
1
6
0
5
4
3
Dreg32d
(Destination
Dreg32#)
2
X
1
X
0
X
IMM16
シンタックス :
mov.l Dreg32d, (IMM16)
29 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
オペランド :
Dreg32d
Pointer
IMM16
IMM6
d1.0 - d15.14
p0 - p5/fp/sp
0x0000 - 0xFFFF
-64 - -1 (0x00 - 0x3F)
オペレーション :
Dreg32d = LONG_MEM[EA]
説明 :
それぞれのアドレッシングモードで示される有効アドレスから 32 ビットロングワードのメ
モリオペランドを読み込み、Dreg32d へ格納します。
ポインタレジスタの自動更新 (1. ポインタレジスタ間接 + 後更新 ) ではアドレッシングモード
の指示に従ってポインタレジスタの値が更新されます。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例 1:
mov.l d1.0, (p0)
before
d1.0
p0
MEM[0x1000]
MEM[0x1001]
after
0x00000000
0x1000
0x5555
0x4444
d1.0
p0
MEM[0x1000]
MEM[0x1001]
0x00000000
0x1000
0x5555
0x4444
d1.0
p0
MEM[0x1000]
MEM[0x1001]
0x44445555
0x1000
0x5555
0x4444
例 2:
mov.l d1.0, (p0+)
before
d1.0
p0
MEM[0x1000]
MEM[0x1001]
after
0x44445555
0x1002
0x5555
0x4444
アドレス 0x1000 からロードした後に p0 がインクリメント (+2) されます。
例 3:
mov.l d1.0, (0x100,p0)
before
d1.0
p0
MEM[0x1100]
MEM[0x1101]
after
0x00000000
0x1000
0x5555
0x4444
d1.0
p0
MEM[0x1100]
MEM[0x1101]
0x44445555
0x1000
0x5555
0x4444
有効アドレスは p0 に displacement である 0x100 を加算した 0x1100 になります。
例 4:
mov.l d1.0, (0x1000)
before
d1.0
MEM[0x1100]
MEM[0x1101]
2013.12.20 版
after
0x00000000
0x5555
0x4444
d1.0
MEM[0x1000]
MEM[0x1101]
0x44445555
0x5555
0x4444
(C) 2009-2013 New Japan Radio Co., Ltd.
30 頁
Ximo16A
Preliminary
補足:
アドレッシングモードの詳細については「4 アドレッシングモード」を参照して下さい。
32 ビットロングワードのメモリアクセスは偶数アドレス境界から行なわなければなりませ
ん。
31 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
mov.w Preg, (EA)
Load pointer register
EA は以下に示すアドレッシングモードを代表しています。
1. ポインタレジスタ間接 / ポインタレジスタ間接 + 後更新
bit 15
0
14
0
13
0
12
1
11
0
10
1
9
1
8
7
6
Pregd
(Destination
Preg#)
5
4
3
Addressing
Mode
2
1
Pointer
Preg#
0
5
4
3
Pregd
(Destination
Preg#)
2
1
Pointer
Preg#
0
シンタックス :
mov.w Pregd, (Pointer)
mov.w Pregd, (Pointer+)
mov.w Pregd, (Pointer-)
mov.w Pregd, (Pointer+,m0)
mov.w Pregd, (Pointer-,m0)
mov.w Pregd, (Pointer+,m1)
mov.w Pregd, (Pointer-,m1)
2. オフセット付きポインタレジスタ間接
bit 15
1
14
1
13
0
12
0
11
0
10
0
9
0
8
0
7
1
6
1
IMM16
シンタックス :
mov.w Pregd, (IMM16,Pointer)
3. 6 ビットオフセット付きフレームポインタレジスタ間接
bit 15
0
14
0
13
1
12
1
11
0
10
1
9
1
8
7
6
5
IMM6(-64 to -1)
4
3
2
1
0
Pregd
(Destination
Preg#)
シンタックス :
mov.w Pregd, (-IMM6,fp)
4. 絶対アドレス
bit 15
1
14
1
13
0
12
0
11
0
10
0
9
0
8
1
7
1
6
1
5
4
3
Pregd
(Destination
Preg#)
2
X
1
X
0
X
IMM16
シンタックス :
mov.w Pregd, (IMM16)
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
32 頁
Ximo16A
Preliminary
オペランド :
Pregd
Pointer
IMM16
IMM6
p0 - p5/fp/sp
p0 - p5/fp/sp
0x0000 - 0xFFFF
-64 - -1 (0x00 - 0x3F)
オペレーション :
Pregd = MEM[EA]
説明 :
それぞれのアドレッシングモードで示される有効アドレスから 16 ビットワードのメモリオ
ペランドを読み込み、Preg へ格納します。
ポインタレジスタの自動更新 (1. ポインタレジスタ間接+後更新 ) ではアドレッシングモード
の指示に従ってポインタレジスタの値が更新されます。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例 1:
mov.w p0, (p0)
before
after
p0
MEM[0x1000]
0x1000
0x5555
p0
MEM[0x1000]
0x0000
0x1000
0x5555
p1
p0
MEM[0x1000]
0x5555
0x5555
例 2:
mov.w p1, (p0+)
before
after
p1
p0
MEM[0x1000]
0x5555
0x1001
0x5555
アドレス 0x1000 からロードした後に p0 がインクリメント (+1) されます。
例3
mov.w p1, (0x100,p0)
before
after
p1
p0
MEM[0x1100]
0x0000
0x1000
0x5555
p1
p0
MEM[0x1100]
0x5555
0x1000
0x5555
有効アドレスは p0 に displacement である 0x100 を加算した 0x1100 になります。
例 4:
mov.w p1, (0x1000)
before
p1
MEM[0x1100]
after
0x0000
0x5555
p1
MEM[0x1000]
0x5555
0x5555
補足:
アドレッシングモードの詳細については「4 アドレッシングモード」を参照して下さい。
この命令で 1. ポインタレジスタ間接 / ポインタレジスタ間接 + 後更新版を用いてポインタの
33 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
自動更新を行なう場合、Pregs と Pointer に同じレジスタを取ることは出来ません。
例 : × mov.w p4, (p4-)
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
34 頁
Ximo16A
Preliminary
mov.w A, (Preg), <s/u>
Load accumulator (word operand)
bit 15
0
14
0
13
1
12
0
11
0
10
0
9
0
8
0
7
s/u
s:0
u:1
6
5
4
3
Ad Addressing
a0:0 Mode
a1:1
2
1
Pointer
Preg#
0
シンタックス :
mov.w Ad, (Pointer), <s/u>
mov.w Ad, (Pointer+), <s/u>
mov.w Ad, (Pointer-), <s/u>
mov.w Ad, (Pointer+,m0), <s/u>
mov.w Ad, (Pointer-,m0), <s/u>
mov.w Ad, (Pointer+,m1), <s/u>
mov.w Ad, (Pointer-,m1), <s/u>
オペランド :
Ad
Pointer
a0/a1
p0 - p5/fp/sp
オペレーション :
Ad = MEM[EA] << 16
説明 :
Pointer が示すアドレスから 16 ビットワードのメモリオペランドを読み込み、16 ビット左シ
フトして Ad へ格納します。<s/u> オプションでメモリオペランドを符号拡張するか、ゼロ拡張
するか選択します。
ポインタレジスタの自動更新が指定されている場合、アドレッシングモードの指示に従って
ポインタレジスタの値が更新されます。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例:
mov.w a0, (p0+), s
before
a0
p0
MEM[0x2020]
after
0x0000000001
0x2020
0xFC76
a0
p0
MEM[0x2020]
0xFFFC760000
0x2021
0xFC76
補足:
アドレッシングモードの詳細については「4 アドレッシングモード」を参照して下さい。
35 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
mov.l A, (Preg), <s/u>
Load accumulator (long word operand)
bit 15
0
14
0
13
1
12
0
11
0
10
0
9
0
8
1
7
s/u
s:0
u:1
6
5
4
3
Ad Addressing
a0:0 Mode
a1:1
2
1
Pointer
Preg#
0
シンタックス :
mov.l Ad, (Pointer), <s/u>
mov.l Ad, (Pointer+), <s/u>
mov.l Ad, (Pointer-), <s/u>
mov.l Ad, (Pointer+,m0), <s/u>
mov.l Ad, (Pointer-,m0), <s/u>
mov.l Ad, (Pointer+,m1), <s/u>
mov.l Ad, (Pointer-,m1), <s/u>
オペランド :
Ad
Pointer
a0/a1
p0 - p5/fp/sp
オペレーション :
Ad = LONG_MEM[EA]
説明 :
Pointer が示すアドレスから 32 ビットロングワードのメモリオペランドを読み込み、Ad へ格
納します。<s/u> オプションでメモリオペランドを符号拡張するか、ゼロ拡張するか選択します。
ポインタレジスタの自動更新が指定されている場合、アドレッシングモードの指示に従って
ポインタレジスタの値が更新されます。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例:
mov.l a0, (p0+), s
before
a0
p0
MEM[0x2020]
MEM[0x2021]
after
0x0100010001
0x2020
0xFC76
0x0123
a0
p0
MEM[0x2020]
MEM[0x2021]
0x000123FC76
0x2022
0xFC76
0x0123
補足:
アドレッシングモードの詳細については「4 アドレッシングモード」を参照して下さい。
32 ビットロングワードのメモリアクセスは偶数アドレス境界から行なわなければなりませ
ん。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
36 頁
Ximo16A
Preliminary
movp.w d0, (IMM8)
Load from peripherals
bit 15
0
14
0
13
1
12
0
11
0
10
1
9
0
8
X
7
6
IMM8
5
4
3
2
1
0
シンタックス :
movp.w d0, (IMM8)
オペランド :
IMM8
0 - 255
オペレーション :
d0 = MEM[IMM8]
説明 :
アドレス 0 ∼ 255 のメモリオペランドを d0 レジスタへ格納します。I/O 領域アクセスに用い
る命令です。
コンディションコード :
U
-
E
-
S
-
F
-
N
V
↑↓ 0
Z
C
↑↓ 0
C: 常にクリアされます。
Z: ロードされるデータがゼロの場合にセットされ、そうでない場合にクリアされます。
V: 常にクリアされます。
N: ロードされるデータの最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
例:
movp.w d0, (0x30)
before
d0
MEM[0x0030]
st
after
0x0000
0xFC76
0x0000
d0
MEM[0x0030]
st
0xFC76
0xFC76
0x0008 N=1
補足:
この命令はストアバッファのオン / オフに関わらずバスアクセスの順序性が保証されます。
37 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
10 ストア命令
mov.w (EA), Dreg16
mov.l (EA), Dreg32
mov.w (EA), Preg
mov.w (Preg), A, <s/u>
mov.l (Preg), A, <s/u>
movp.w (IMM8), d0
概要 :
この章ではストア命令について説明します。ストア命令ではコアレジスタの内容をメモリへ
転送します。16 ビットワードデータレジスタ、32 ビットロングワードデータレジスタ、ポイン
タレジスタ、アキュームレータレジスタをソースに取ることができます。アキュームレータに対
しては飽和処理を選択することができます。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
38 頁
Ximo16A
Preliminary
mov.w (EA), Dreg16
Store 16-bit data register
EA は以下に示すアドレッシングモードを代表しています。
1. ポインタレジスタ間接 / ポインタレジスタ間接 + 後更新
bit 15
0
14
0
13
0
12
1
11
1
10
0
9
Dreg
16s
Even
/Odd
8
7
6
Dreg16s
(Source
Dreg16#)
5
4
3
Addressing
Mode
2
1
Pointer
Preg#
0
5
4
3
Dreg16s
(Source
Dreg16#)
2
1
Pointer
Preg#
0
シンタックス :
mov.w (Pointer), Dreg16s
mov.w (Pointer+), Dreg16s
mov.w (Pointer-), Dreg16s
mov.w (Pointer+,m0), Dreg16s
mov.w (Pointer-,m0), Dreg16s
mov.w (Pointer+,m1), Dreg16s
mov.w (Pointer-,m1), Dreg16s
2. オフセット付きポインタレジスタ間接
bit 15
1
14
1
13
0
12
0
11
0
10
0
9
1
8
0
7
0
6
Dreg
16s
Even
/Odd
IMM16
シンタックス :
mov.w (IMM16,Pointer), Dreg16s
3. 6 ビットオフセット付きフレームポインタレジスタ間接
bit 15
0
14
0
13
1
12
1
11
1
10
0
9
8
7
6
5
Dreg IMM6(-64 to -1)
16s
Even
/Odd
4
3
2
1
0
Dreg16s
(Source
Dreg16#)
シンタックス :
mov.w (-IMM6,fp), Dreg16s
4. 絶対アドレス
bit 15
1
14
1
13
0
12
0
11
0
10
0
9
1
8
1
7
0
6
Dreg
16s
Even
/Odd
5
4
3
Dreg16s
(Source
Dreg16#)
2
X
1
X
0
X
IMM16
シンタックス :
mov.w (IMM16), Dreg16s
39 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
オペランド :
Dreg16s
Pointer
IMM16
IMM6
d0 - d15
p0 - p5/fp/sp
0x0000 - 0xFFFF
-64 - -1 (0x00 - 0x3F)
オペレーション :
MEM[EA] = Dreg16d
説明 :
Dreg16s の内容を、それぞれのアドレッシングモードで示される 16 ビットメモリオペラン
ドへ格納します。
ポインタレジスタの自動更新 (1. ポインタレジスタ間接+後更新 ) ではアドレッシングモード
の指示に従ってポインタレジスタの値が更新されます。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例 1:
mov.w (p0), d0
before
after
d0
p0
MEM[0x1000]
0x5555
0x1000
0x0000
d0
p0
MEM[0x1000]
0x5555
0x1000
0x0000
d0
p0
MEM[0x1000]
0x5555
0x1000
0x5555
例 2:
mov.w (p0+), d0
before
after
d0
p0
MEM[0x1000]
0x5555
0x1001
0x5555
アドレス 0x1000 へストアした後に p0 がインクリメント (+1) されます。
例 3:
mov.w (0x100,p0), d0
before
after
d0
p0
MEM[0x1100]
0x5555
0x1000
0x0000
d0
p0
MEM[0x1100]
0x5555
0x1000
0x5555
有効アドレスは p0 に displacement である 0x100 を加算した 0x1100 になります。
例 4:
mov.w (0x1000), d0
before
d0
MEM[0x1100]
after
0x5555
0x0000
d0
MEM[0x1000]
0x5555
0x5555
補足:
アドレッシングモードの詳細については「4 アドレッシングモード」を参照して下さい。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
40 頁
Ximo16A
Preliminary
mov.l (EA), Dreg32
Store 32-bit data register
EA は以下に示すアドレッシングモードを代表しています。
1. ポインタレジスタ間接 / ポインタレジスタ間接 + 後更新
bit 15
0
14
0
13
0
12
1
11
1
10
1
9
0
8
7
6
Dreg32s
(Source
Dreg32#)
5
4
3
Addressing
Mode
2
1
Pointer
Preg#
0
5
4
3
Dreg32s
(Source
Dreg32#)
2
1
Pointer
Preg#
0
シンタックス :
mov.l (Pointer), Dreg32s
mov.l (Pointer+), Dreg32s
mov.l (Pointer-), Dreg32s
mov.l (Pointer+,m0), Dreg32s
mov.l (Pointer-,m0), Dreg32s
mov.l (Pointer+,m1), Dreg32s
mov.l (Pointer-,m1), Dreg32s
2. オフセット付きポインタレジスタ間接
bit 15
1
14
1
13
0
12
0
11
0
10
0
9
1
8
0
7
1
6
0
IMM16
シンタックス :
mov.l (IMM16,Pointer), Dreg32s
3. 6 ビットオフセット付きフレームポインタレジスタ間接
bit 15
0
14
0
13
1
12
1
11
1
10
1
9
0
8
7
6
5
IMM6(-64 to -1)
4
3
2
1
0
Dreg32s
(Source
Dreg32#)
シンタックス :
mov.l (-IMM6,fp), Dreg32s
4. 絶対アドレス
bit 15
1
14
1
13
0
12
0
11
0
10
0
9
1
8
1
7
1
6
0
5
4
3
Dreg32s
(Source
Dreg32#)
2
X
1
X
0
X
IMM16
シンタックス :
mov.l (IMM16), Dreg32s
41 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
オペランド :
Dreg32s
Pointer
IMM16
IMM6
d1.0 - d15.14
p0 - p5/fp/sp
0x0000 - 0xFFFF
-64 - -1 (0x00 - 0x3F)
オペレーション :
LONG_MEM[EA] = Dreg32s
説明 :
Dreg32s の内容を、それぞれのアドレッシングモードで示される 32 ビットロングワードの
メモリオペランドへ格納します。
ポインタレジスタの自動更新 (1. ポインタレジスタ間接+後更新 ) ではアドレッシングモード
の指示に従ってポインタレジスタの値が更新されます。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例 1:
mov.l d1.0, (p0)
before
d1.0
p0
MEM[0x1000]
MEM[0x1001]
after
0x44445555
0x1000
0x0000
0x0000
d1.0
p0
MEM[0x1000]
MEM[0x1001]
0x44445555
0x1000
0x0000
0x0000
d1.0
p0
MEM[0x1000]
MEM[0x1001]
0x44445555
0x1000
0x5555
0x4444
例 2:
mov.l d1.0, (p0+)
before
d1.0
p0
MEM[0x1000]
MEM[0x1001]
after
0x44445555
0x1002
0x5555
0x4444
アドレス 0x1000 からロードした後に p0 がインクリメント (+2) されます。
例 3:
mov.l d1.0, (0x100,p0)
before
d1.0
p0
MEM[0x1100]
MEM[0x1101]
after
0x44445555
0x1000
0x0000
0x0000
d1.0
p0
MEM[0x1100]
MEM[0x1101]
0x44445555
0x1000
0x5555
0x4444
有効アドレスは p0 に displacement である 0x100 を加算した 0x1100 になります。
補足:
アドレッシングモードの詳細については「4 アドレッシングモード」を参照して下さい。
32 ビットロングワードのメモリアクセスは偶数アドレス境界から行なわなければなりませ
ん。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
42 頁
Ximo16A
Preliminary
mov.w (EA), Preg
Store pointer register
EA は以下に示すアドレッシングモードを代表しています。
1. ポインタレジスタ間接 / ポインタレジスタ間接 + 後更新
bit 15
0
14
0
13
0
12
1
11
1
10
1
9
1
8
7
Pregs
(Source
Preg#)
6
5
4
3
Addressing
Mode
2
1
Pointer
Preg#
0
6
1
5
4
3
Pregs
(Source
Dreg32#)
2
1
Pointer
Preg#
0
3
2
1
Pregs
(Source
Preg#)
0
3
2
X
0
X
シンタックス :
mov.w (Pointer), Pregs
mov.w (Pointer+), Pregs
mov.w (Pointer-), Pregs
mov.w (Pointer+,m0), Pregs
mov.w (Pointer-,m0), Pregs
mov.w (Pointer+,m1), Pregs
mov.w (Pointer-,m1), Pregs
2. オフセット付きポインタレジスタ間接
bit 15
1
14
1
13
0
12
0
11
0
10
0
9
1
8
0
7
1
IMM16
シンタックス :
mov.w (IMM16,Pointer), Pregs
3. 6 ビットオフセット付きフレームポインタレジスタ間接
bit 15
0
14
0
13
1
12
1
11
1
10
1
9
1
8
7
6
5
IMM6(-64 to -1)
4
シンタックス :
mov.w (-IMM6,fp), Pregs
4. 絶対アドレス
bit 15
1
14
1
13
0
12
0
11
0
10
0
9
1
8
1
7
1
6
1
5
4
Pregs
(Source
Preg#)
1
X
IMM16
シンタックス :
mov.w (IMM16), Pregs
43 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
オペランド :
Pregs
Pointer
IMM16
IMM6
p0 - p5/fp/sp
p0 - p5/fp/sp
0x0000 - 0xFFFF
-64 - -1 (0x00 - 0x3F)
オペレーション :
MEM[EA] = Pregs
説明 :
Pregs の内容を、それぞれのアドレッシングモードで示される 16 ビットメモリオペランドへ
格納します。
ポインタレジスタの自動更新 (1. ポインタレジスタ間接+後更新 ) ではアドレッシングモード
の指示に従ってポインタレジスタの値が更新されます。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例 1:
mov.w (p1), p0
before
after
p0
p1
MEM[0x1000]
0x5555
0x1000
0x0000
p0
p1
MEM[0x1000]
0x1000
0x0000
p1
MEM[0x1000]
0x5555
0x1000
0x5555
例 2:
mov.w (p0+), p0
before
after
p0
MEM[0x1000]
0x1001
0x1000
アドレス 0x1000 からロードした後に p0 がインクリメント (+1) されます。
例 3:
mov.w p1, (0x100,p0)
before
after
p1
p0
MEM[0x1100]
0x5555
0x1000
0x0000
p1
p0
MEM[0x1100]
0x5555
0x1000
0x5555
有効アドレスは p0 に displacement である 0x100 を加算した 0x1100 になります。
例 4:
mov.w p1, (0x1000)
before
p1
MEM[0x1100]
after
0x5555
0x0000
p1
MEM[0x1000]
0x5555
0x5555
補足:
アドレッシングモードの詳細については「4 アドレッシングモード」を参照して下さい。
この命令で 1. ポインタレジスタ間接 / ポインタレジスタ間接 + 後更新版を用いてポインタの
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
44 頁
Ximo16A
Preliminary
自動更新を行いながら、そのポインタレジスタをストアする場合、ストアされる値は自動更新前
の値です。
45 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
mov.w (Preg), A, <s/u>
Store accumulator (word operand)
bit 15
0
14
0
13
1
12
0
11
1
10
0
9
0
8
0
7
s/u
s:0
u:1
6
5
4
3
As Addressing
a0:0 Mode
a1:1
2
1
Pointer
Preg#
0
シンタックス :
mov.w (Pointer), As, <s/u>
mov.w (Pointer+), As, <s/u>
mov.w (Pointer-), As, <s/u>
mov.w (Pointer+,m0), As, <s/u>
mov.w (Pointer-,m0), As, <s/u>
mov.w (Pointer+,m1), As, <s/u>
mov.w (Pointer-,m1), As, <s/u>
オペランド :
As
Pointer
a0/a1
p0 - p5/fp/sp
オペレーション :
MEM[EA] = As[31:16]
説明 :
アキュームレータ As のビット 31 から 16 を Pointer が示す 16 ビットメモリオペランドへ格
納します。s オプションが指示される場合、As の値に対して飽和処理が行なわれます。As の値
は変化しません。
ポインタレジスタの自動更新が指定されている場合、アドレッシングモードの指示に従って
ポインタレジスタの値が更新されます。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例 1:
mov.w (p0+), a0, u
before
a0
p0
MEM[0x2020]
after
0xFC76543210
0x2020
0x0000
a0
p0
MEM[0x2020]
0xFC76543210
0x2021
0x7654
例 1:
mov.w (p0+), a0, s
before
a0
p0
MEM[0x2020]
after
0xFC76543210
0x2020
0x0000
a0
p0
MEM[0x2020]
0xFC76543210
0x2021
0x8000
0xFC 7654 は 0x8000 へ制限されます。
補足:
アドレッシングモードの詳細については「4 アドレッシングモード」を参照して下さい。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
46 頁
Ximo16A
Preliminary
飽和処理が有効な場合、結果は最小で 0x8000、最大で 0x7FFF の間に制限されます。飽和処
理の詳細については「6.3 飽和処理と丸め処理」を参照して下さい。
47 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
mov.l (Preg), A, <s/u>
Store accumulator (long word operand)
bit 15
0
14
0
13
1
12
0
11
1
10
0
9
0
8
1
7
s/u
s:0
u:1
6
5
4
3
As Addressing
a0:0 Mode
a1:1
2
1
Pointer
Preg#
0
シンタックス :
mov.l (Pointer), As, <s/u>
mov.l (Pointer+), As, <s/u>
mov.l (Pointer-), As, <s/u>
mov.l (Pointer+,m0), As, <s/u>
mov.l (Pointer-,m0), As, <s/u>
mov.l (Pointer+,m1), As, <s/u>
mov.l (Pointer-,m1), As, <s/u>
オペランド :
As
Pointer
a0/a1
p0 - p5/fp/sp
オペレーション :
LONG_MEM[EA] = Ad[31:0]
説明 :
アキュームレータ As のビット 31 から 0 を Pointer が示す 32 ビットロングワードのメモリ
オペランドへ格納します。s オプションが指示される場合、As の値に対して飽和処理が行なわ
れます。As の値は変化しません。
ポインタレジスタの自動更新が指定されている場合、アドレッシングモードの指示に従って
ポインタレジスタの値が更新されます。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例 1:
mov.l (p0+), a0, u
before
a0
p0
MEM[0x2020]
MEM[0x2021]
after
0xFC76543210
0x2020
0x0000
0x0000
a0
p0
MEM[0x2020]
MEM[0x2021]
0xFC76543210
0x2022
0x3210
0x7654
例 1:
mov.l (p0+), a0, s
before
a0
p0
MEM[0x2020]
MEM[0x2021]
after
0xFC76543210
0x2020
0x0001
0x0000
a0
p0
MEM[0x2020]
MEM[0x2021]
0xFC76543210
0x2021
0x0000
0x8000
0xFC 7654 3210 は 0x8000 0000 へ制限されます。
補足:
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
48 頁
Ximo16A
Preliminary
アドレッシングモードの詳細については「4 アドレッシングモード」を参照して下さい。
32 ビットロングワードのメモリアクセスは偶数アドレス境界から行なわなければなりませ
ん。
飽和処理が有効な場合、結果は最小で 0x8000 0000、最大で 0x7FFF FFFF の間に制限され
ます。飽和処理の詳細については「6.3 飽和処理と丸め処理」を参照して下さい。
49 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
movp.w (IMM8), d0
Store to peripherals
bit 15
0
14
0
13
1
12
0
11
1
10
1
9
0
8
X
7
6
IMM8
5
4
3
2
1
0
シンタックス :
movp.w (IMM8), d0
オペランド :
IMM8
0 - 255
オペレーション :
MEM[IMM8] = d0
説明 :
d0 レジスタの内容をアドレス 0 ∼ 255 のメモリオペランドへ格納します。I/O 領域アクセス
に用いる命令です。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例:
movp.w (0x30), d0
before
d0
MEM[0x0030]
after
0x0000
0xFC76
d0
MEM[0x0030]
0xFC76
0xFC76
補足:
この命令はストアバッファのオン / オフに関わらずバスアクセスの順序性が保証されます。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
50 頁
Ximo16A
Preliminary
11 スタック操作命令
pop.w Reg
push.w Reg
pop.l Dreg32
push.l Dreg32
popm.w Reg
pushm.w Reg
lnk IMM16
ulnk
alsp
概要 :
この章ではスタック操作命令について説明します。スタックトップを指示するスタックポイ
ンタには sp レジスタが使用されます。スタックの成長方向は下位アドレス方向で、スタックへ
のプッシュ時は sp をプリデクリメントします。スタックへのレジスタの保存及び復帰のための、
push/pop 命令があります。
関数呼び出しに伴うスタック領域の操作では、スタックフレーム用のポインタとして fp レジ
スタの使用を前提としています。これらをサポートするために link/unlink 命令が用意されていま
す。
51 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
pop.w Reg
Pop register
bit 15
0
14
0
13
1
12
0
11
0
10
0
9
1
8
0
7
X
6
X
5
4
3
Register
Group#
2
1
Reg#
0
シンタックス :
pop.w Regd
オペランド :
Regd
d0 - d15
p0 - p5/fp
a0i/a0h/a0l/a1i/a1h/a1l
m0/m1/l0/l1/n0/n1
c0/c1/s0/s1/e0/e1
st/pm/cc
オペレーション :
Regd = MEM[sp]
sp = sp + 1
説明 :
sp レジスタの指すアドレスからメモリオペランドを読み出し、Regd へ格納します。sp はそ
の後でインクリメント (+1) されます。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例:
pop.w a0h
before
a0
sp
MEM[0x0122]
after
0x0000000000
0x0122
0xAAAA
a0
sp
MEM[0x0122]
0x00AAAA0000
0x0123
0xAAAA
補足 :
sp レジスタ自身を pop することはできません。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
52 頁
Ximo16A
Preliminary
pop.l Dreg32
Pop 32-bit data register
bit 15
0
14
0
13
1
12
0
11
0
10
0
9
1
8
0
7
X
6
X
5
4
3
Register
Group#
2
1
Reg#
0
シンタックス :
pop.l Dreg32d
オペランド :
Dreg32d
d1.0 - d15.14
オペレーション :
Dreg32d = LONG_MEM[sp]
sp = sp + 2
説明 :
sp レジスタの指すアドレスから 32 ビットロングワードのメモリオペランドを読み出し、
Dreg32d へ格納します。sp はその後でインクリメント (+2) されます。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例:
pop.l d5.4
before
d5.4
sp
MEM[0x0122]
MEM[0x0123]
after
0x00000000
0x0122
0x1234
0x5678
d5.4
sp
MEM[0x0122]
MEM[0x0123]
0x56781234
0x0124
0x1234
0x5678
補足 :
32 ビットロングワードのメモリアクセスは偶数アドレス境界から行なわなければなりませ
ん。
53 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
popm.w Reg
Pop multiple register
bit 15
0
14
0
13
1
12
0
11
0
10
0
9
1
8
1
7
X
6
X
5
4
3
Register
Group#
2
1
Reg#
0
シンタックス :
popm.w Regd
オペランド :
Regd
d0 - d15
p0 - p5
説明 :
Dreg16 版では d15 レジスタから指定されたレジスタまでを、連続して pop します。
Preg 版では p5 レジスタから指定されたレジスタまでを、連続して pop します。
例 1:
popm.w d13
この命令は以下の手続きと同じ結果が得られます。
pop.w d15
pop.w d14
pop.w d13
例 2:
popm.w p3
この命令は以下の手続きと同じ結果が得られます。
pop.w p5
pop.w p4
pop.w p3
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
54 頁
Ximo16A
Preliminary
push.w Reg
push register
bit 15
0
14
0
13
1
12
0
11
1
10
0
9
1
8
0
7
X
6
X
5
4
3
Register
Group#
2
1
Reg#
0
シンタックス :
push.w Regs
オペランド :
Regs
d0 - d15
p0 - p5/fp
a0i/a0h/a0l/a1i/a1h/a1l
m0/m1/l0/l1/n0/n1
c0/c1/s0/s1/e0/e1
st/pm/cc
オペレーション :
sp = sp - 1
MEM[sp] = Regs
説明 :
sp レジスタをデクリメント (-1) し、そのアドレスの示すメモリに Regs の内容を格納します。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例:
push.w d0
before
d0
sp
MEM[0x0122]
after
0x2222
0x0123
0x0000
d0
sp
0x2222
0x0122
0x2222
補足 :
sp レジスタ自身を push することはできません。
55 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
push.l Dreg32
push 32-bit data register
bit 15
0
14
0
13
1
12
0
11
1
10
0
9
1
8
0
7
X
6
X
5
4
3
Register
Group#
2
1
Reg#
0
シンタックス :
push.l Dreg32s
オペランド :
Dreg32s
d1.0 - d15.14
オペレーション :
sp = sp - 2
LONG_MEM[sp] = Dreg32s
説明 :
sp レジスタをデクリメント (-2) し、そのアドレスの示すロングワードのメモリに Dreg32s の
内容を格納します。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例:
push.l d1.0
before
d1.0
sp
MEM[0x0120]
MEM[0x0121]
after
0x22221111
0x0122
0x0000
0x0000
d1.0
sp
MEM[0x0120]
MEM[0x0121]
0x22221111
0x0120
0x1111
0x2222
補足 :
32 ビットロングワードのメモリアクセスは偶数アドレス境界から行なわなければなりませ
ん。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
56 頁
Ximo16A
Preliminary
pushm.w Reg
Push multiple register
bit 15
0
14
0
13
1
12
0
11
1
10
0
9
1
8
1
7
X
6
X
5
4
3
Register
Group#
2
1
Reg#
0
シンタックス :
pushm.w Regs
オペランド :
Regs
d0 - d15
p0 - p5
説明 :
Dreg16 版では指定されたレジスタから d15 レジスタまでを、連続して push します。
Preg 版では指定されたレジスタから p5 レジスタまでを、連続して push します。
例 1:
pushm.w d13
この命令は以下の手続きと同じ結果が得られます。
push.w d13
push.w d14
push.w d15
例 2:
pushm.w p3
この命令は以下の手続きと同じ結果が得られます。
pushm.w p3
pushm.w p4
pushm.w p5
57 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
lnk IMM16
Link
bit 15 14
1
1
IMM16
13
0
12
1
11
0
10
0
9
0
8
0
7
1
6
1
5
0
4
X
3
X
2
X
1
X
0
X
シンタックス :
lnk
オペランド :
IMM16
0x0000 - 0xFFFF
オペレーション :
sp = sp - 1
MEM[sp] = fp
fp = sp
sp = sp - IMM16
説明 :
fp レジスタをスタックに push します。このときのスタックトップのアドレスを fp に格納し、
その後 sp レジスタから IMM16 を減算します。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例:
lnk 0xFF
before
after
sp
fp
MEM[0x03FF]
0x0400
0x0501
0x0000
sp
fp
MEM[0x03FF]
0x0300
0x03FF
0x0501
補足 :
関数呼び出しにおけるローカル変数領域の構築を行ないます。
次の手続きと同じ結果が得られます。
push.w fp
mov.w fp, sp
subi.w sp, IMM16
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
58 頁
Ximo16A
Preliminary
ulnk
Unlink
bit 15
0
14
0
13
0
12
0
11
0
10
0
9
0
8
0
7
0
6
0
5
1
4
0
3
0
2
1
1
1
0
0
オペランド :
-
-
オペレーション :
sp = fp
fp = MEM[sp]
sp = sp + 1
説明 :
fp の内容を sp に格納した後、pop.w fp を実行します。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例:
ulnk
before
sp
fp
MEM[0x03FF]
after
0x0300
0x03FF
0x0501
sp
fp
MEM[0x03FF]
0x4000
0x0501
0x0501
補足 :
lnk 命令によって構築したスタック領域を破棄します。
次の手続きと同じ結果が得られます。
mov.w sp, fp
pop.w fp
59 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
alsp
Align stack pointer
bit 15
0
14
0
13
0
12
0
11
0
10
0
9
0
8
0
7
0
6
0
5
1
4
0
3
0
2
1
1
1
0
1
オペランド :
-
-
オペレーション :
sp_new = (sp_old - 1) & 0xFFFE
MEM[sp_new] = sp_old
説明 :
sp から 1 を減算したのち、最下位ビットを 0 にします。その後、変更前の sp の値を、新し
い sp が指すアドレスへストアします。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例 1:
alsp
before
sp
MEM[0x0200]
after
0x0201
0x0000
sp
0x0200
0x0000
sp
0x0200
0x0201
例 2:
alsp
before
sp
MEM[0x01FE]
after
0x01FE
0x0200
補足 :
スタックトップを強制的に偶数アドレスに整列します。次の命令を実行することで alsp 命令
実行前のスタックトップに戻ることができます。
mov.w sp, (sp)
割込みハンドラの開始時などではスタックトップの境界を偶数アドレスに保証することは困
難です。割込みハンドラでスタックトップの偶数アドレス境界を保証する必要がある場合には次
のように実装してください。
_INTERRUPT_HANDLER_:
alsp
....
-- start interrupt handler
....
....
mov.w sp, (sp)
rti
2013.12.20 版
-- return from handler
(C) 2009-2013 New Japan Radio Co., Ltd.
60 頁
Ximo16A
Preliminary
12 即値ロード命令
movi.w Reg, IMM16
movsi.w Dreg16, IMM5
movsi.w Preg, IMM5
movsi.l Dreg32d, IMM5
概要 :
この章では即値ロード命令について説明します。即値ロード命令は命令中に埋め込まれた即
値フィールドの値をコアレジスタへ転送します。
61 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
movi.w Reg, IMM16
Load immediate to register
bit 15
1
14
1
13
0
12
0
11
0
10
1
9
0
8
X
7
X
6
X
5
4
3
Destination
Register
Group#
2
1
0
Regd
(Destination
Register#)
IMM16
シンタックス :
movi.w Regd, IMM16
オペランド :
Regd
d0 - d15
p0 - p5/fp/sp
m0/m1/l0/l1/n0/n1
a0i/a0h/a0l/a1i/a1h/a1l
c0/c1/s0/s1/e0/e1
st/cc/pm
0x0000 - 0xFFFF
IMM16
オペレーション :
Regd = IMM16
説明 :
Regd へ即値 IMM16 を格納します。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例:
movi.w d0, 0x5555
before
d0
after
0x0000
d0
0x5555
補足:
8 ビットレジスタ a0i/a1i/cc をディスティネーションとする場合、16 ビット即値の上位 8 ビッ
トは無視されます。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
62 頁
Ximo16A
Preliminary
movsi.w Dreg16, IMM5
Load short immediate to 16-bit data register
bit 15
0
14
1
13
1
12
0
11
1
10
0
9
0
8
7
6
5
IMM5(-16 to 15)
4
3
Dreg
16d
Even
/Odd
2
1
0
Dreg16d
(Destination
Dreg16#)
シンタックス :
movsi.w Dreg16d, IMM5
オペランド :
Dreg16d
IMM5
d0 - d15
-16 - 15
オペレーション :
Dreg16d = IMM5
説明 :
Dreg16d へ即値 IMM5 を符号拡張して格納します。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例:
movsi.w d0, -7
before
d0
after
0x0000
d0
0xFFF9
補足:
IMM5 は符号付き数として扱われます。
63 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
movsi.w Preg, IMM5
Load short immediate to pointer register
bit 15
0
14
1
13
1
12
0
11
1
10
0
9
1
8
7
6
5
IMM5(-16 to 15)
4
3
1
2
1
0
Pregd
(Destination
Preg#)
シンタックス :
movsi.w Preg, IMM5
オペランド :
Dreg16d
IMM5
p0 - p5/fp/sp
-16 - 15
オペレーション :
Pregd = IMM5
説明 :
Pregd へ即値 IMM5 を符号拡張して格納します。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例:
movsi.w p0, -7
before
p0
after
0x0000
p0
0xFFF9
補足:
IMM5 は符号付き数として扱われます。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
64 頁
Ximo16A
Preliminary
movsi.l Dreg32d, IMM5
Load short immediate to 32-bit data register
bit 15
0
14
1
13
1
12
0
11
1
10
0
9
1
8
7
6
5
IMM5(-16 to 15)
4
3
0
2
1
0
Dreg32d
(Destination
Dreg32#)
シンタックス :
movsi.l Dreg32d, IMM5
オペランド :
Dreg32d
IMM5
d1.0 - d15.14
-16 - 15
オペレーション :
Dreg32d = IMM5
説明 :
Dreg32d へ即値 IMM5 を符号拡張して格納します。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例:
movsi.l d1.0, -7
before
d1.0
after
0x00000000
d1.0
0xFFFFFFF9
補足:
IMM5 は符号付き数として扱われます。
65 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
13 レジスタ間転送命令
mov.w Reg, Reg
mov.l Dreg32, Dreg32
cmov.w Dreg16, Dreg16, <condition>
cmov.l Dreg32, Dreg32, <condition>
movs Dreg32, Dreg16
movz Dreg32, Dreg16
mov.w Dreg16, A, <s/u>
mov.l Dreg32, A, <s/u>
mov.w A, Dreg16, <s/u>
mov.l A, Dreg32, <s/u>
mov A, A
movst.w d0, Stack_Reg
movst.w Stack_Reg, d0
概要 :
この章ではレジスタ間転送命令について説明します。レジスタ間転送命令はコアレジスタの
間でデータを転送します。アキュームレータレジスタ a0/a1 を対象とする転送では符号拡張 / ゼ
ロ拡張 / 飽和処理などが選択できます。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
66 頁
Ximo16A
Preliminary
mov.w Reg, Reg
Move register
bit 15
0
14
1
13
1
12
1
11 10 9
Source
Register
Group#
8
7
6
Destination
Register
Group#
5
4
3
Regs
(Source
Register#)
2
1
0
Regd
(Destination
Register#)
シンタックス :
mov.w Regd, Regs
オペランド :
転送命令が取れるレジスタの組み合わせには次のものがあります。
1.
Regd
d0 - d15
p0 - p5/fp/sp
m0/m1/l0/l1/n0/n1
d0 - d15
p0 - p5/fp/sp
m0/m1/l0/l1/n0/n1
Regs
2.
Regd
a0i/a0h/a0l/a1i/a1h/a1l
c0/c1/s0/s1/e0/e1
st/cc/pm
d0 - d15
Regs
3.
Regd
Regs
d0 - d15
a0i/a0h/a0l/a1i/a1h/a1l
c0/c1/s0/s1/e0/e1
st/cc/pm
オペレーション :
Regd = Regs
説明 :
Regs の内容を Regd に格納します。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例 1:
mov.w d0, a0h
before
d0
a0h
67 頁
after
0x0000
0x0123
d0
a0h
0x0123
0x0123
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
例 2:
mov.w d10, a1i
before
d10
a1i
after
0x0000
0xC0
d10
a1i
0xFFC0
0xC0
補足:
8 ビットレジスタ a0i/a1i をソースとする場合はビット 7 から符号拡張した値がディスティ
ネーションに書き込まれます。
a0i/a1i をディスティネーションとする場合、ソースの上位 8 ビットは無視されます。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
68 頁
Ximo16A
Preliminary
mov.l Dreg32, Dreg32
Move 32-bit data register
bit 15
0
14
1
13
1
12
1
11 10 9
Dreg32:111
8
7
6
Dreg32:111
5
4
3
Regs
(Source
Register#)
2
1
0
Regd
(Destination
Register#)
シンタックス :
mov.l Dreg32d, Dreg32d
オペランド :
Dreg32d
Dreg32s
d1.0 - d15.14
d1.0 - d15.14
オペレーション :
Dreg32d = Dreg32s
説明 :
Dreg32s の内容を Dreg32d に格納します。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例 1:
mov.l d1.0, d3.2
before
d1.0
d3.2
69 頁
after
0x00000000
0x01234567
d1.0
d3.2
0x01234567
0x01234567
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
cmov.w Dreg16, Dreg16, <condition>
Conditional move 16-bit data register
bit 15
1
X
14
1
X
13
0
X
12
1
X
11 10
0
0
Dreg X
16s
Even
/Odd
9
8
7
0
0
0
Dreg16s
(Source
Dreg16#)
6
1
X
5
0
X
4
3
conditon
X
Dreg
16d
Even
/Odd
2
1
0
Dreg16d
(Destintaion
Dreg16#)
シンタックス :
cmov.w Dreg16d, Dreg16s, <condition>
オペランド :
Dreg16d
Dreg16s
d0 - d15
d0 - d15
オペレーション :
If (condition == true) then
Dreg16d = Dreg16s
Endif
説明 :
condition フィールドにより指示された条件が成り立っている場合に、Dreg16s の内容を
Dreg16d へ格納します。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例:
cmov.w d1, d0, ns
before
d0
d1
st
2013.12.20 版
after
0x1111
0x0000
0x0008 N=1
d0
d1
st
0x1111
0x1111
0x0008
(C) 2009-2013 New Japan Radio Co., Ltd.
70 頁
Ximo16A
Preliminary
cmov.l Dreg32, Dreg32, <condition>
Conditional move 32-bit data register
bit 15
1
X
14
1
X
13
0
X
12
1
X
11
0
X
10
0
X
9
8
7
0
0
0
Dreg32s
(Source
Dreg32#)
6
1
X
5
1
X
4
3
2
1
0
conditon
X
X
Dreg32d
(Destintaion
Dreg32#)
シンタックス :
cmov.l Dreg32d, Dreg32s, <condition>
オペランド :
Dreg16d
Dreg16s
d1.0 - d14.15
d1.0 - d14.15
オペレーション :
If (condition == true) then
Dreg32d = Dreg32s
Endif
説明 :
condition フィールドにより指示された条件が成り立っている場合に、Dreg32s の内容を
Dreg32d へ格納します。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例:
cmov.l d1.0, d3.2, ns
before
d1.0
d3.2
st
71 頁
after
0x11112222
0x00000000
0x0008 N=1
d1.0
d3.2
st
0x11112222
0x11112222
0x0008
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
movs Dreg32, Dreg16
Move register with sign extend
bit 15
0
14
1
13
0
12
1
11
0
10
1
9
0
8
0
7
6
Dreg X
16s
Even
/Odd
5
4
3
Dreg16s
(Source
Dreg16#)
2
1
0
Dreg32d
(Destination
Dreg32#)
シンタックス :
movs Dreg32d, Dreg16s
オペランド :
Dreg32d
Dreg16s
d1.0 - d15.14
d0 - d15
オペレーション :
Dreg32d = sign_extend(Dreg16s)
説明 :
Dreg16s の最上位ビットを符号ビットとして符号拡張し、Dreg32d に格納します。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例:
movs d3.2, d0
before
d0
d3.2
2013.12.20 版
after
0xA987
0x01234567
d0
d3.2
0xA987
0xFFFFA987
(C) 2009-2013 New Japan Radio Co., Ltd.
72 頁
Ximo16A
Preliminary
movz Dreg32, Dreg16
Move register with zero extend
bit 15
0
14
1
13
0
12
1
11
0
10
1
9
0
8
1
7
6
Dreg X
16s
Even
/Odd
5
4
3
Dreg16s
(Source
Dreg16#)
2
1
0
Dreg32d
(Destination
Dreg32#)
シンタックス :
movz Dreg32d, Dreg16s
オペランド :
Dreg32d
Dreg16s
d1.0 - d15.14
d0 - d15
オペレーション :
Dreg32d = zero_extend(Dreg16s)
説明 :
Dreg16s をゼロ拡張して、Dreg32d に格納します。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例:
movz d3.2, d0
before
d0
d3.2
73 頁
after
0xA987
0x01234567
d0
d3.2
0xA987
0x0000A987
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
mov.w Dreg16, A, <s/u>
Move accumulator to 16-bit data register
bit 15
1
X
14
1
s/u
s:0
u:1
13 12
1
0
As X
a0:0
a1:1
11
P
X
10
0
X
9
1
X
8
0
X
7
0
X
6
0
X
5
0
X
4
0
X
3
X
Dreg
16d
Even
/Odd
2
1
0
X
X
X
Dreg16d
(Destination
Dreg16#)
シンタックス :
mov.w Dreg16d, As, <s/u>
オペランド :
Dreg16d
As
d0 - d15
a0/a1
オペレーション :
Dreg16d = As[31:16]
説明 :
アキュームレータ As のビット 31 から 16 を Dreg16d へ格納します。s オプションが指示さ
れる場合、As の値に対して飽和処理が行なわれます。As の値は変化しません。
コンディションコード :
U
-
E
-
S
↑
F
-
N
-
V
-
Z
-
C
-
S: 飽和処理が行なわれた場合にセットされます。
例 1:
mov.w d0, a0, u
before
d0
a0
st
after
0x0000
0xFC76543210
0x0000
d0
a0
st
0x7654
0xFC76543210
0x0000
例 2:
mov.w d0, a0, s
before
d0
a0
st
after
0x0000
0xFC76543210
0x0000
d0
a0
st
0x8000
0xFC76543210
0x0020 S=1
0xFC 7654 は 0x8000 へ制限されます。
補足 :
飽和処理が有効な場合、結果は最小で 0x8000、最大で 0x7FFF の間に制限されます。飽和処
理の詳細については「6.3 飽和処理と丸め処理」を参照して下さい。
この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」
を参照して下さい。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
74 頁
Ximo16A
Preliminary
mov.l Dreg32, A, <s/u>
Move accumulator to 32-bit data register
bit 15
1
X
14
1
s/u
s:0
u:1
13 12
1
0
As X
a0:0
a1:1
11
P
X
10
0
X
9
1
X
8
0
X
7
0
X
6
0
X
5
0
X
4
1
X
3
X
X
2
1
0
X
X
X
Dreg32d
(Destination
Dreg32#)
シンタックス :
mov.l Dreg32d, As, <s/u>
オペランド :
Dreg32d
As
d1.0 - d15.14
a0/a1
オペレーション :
Dreg32d = As[31:0]
説明 :
アキュームレータ As のビット 31 から 0 を Dreg32d へ格納します。s オプションが指示され
る場合、As の値に対して飽和処理が行なわれます。As の値は変化しません。
コンディションコード :
U
-
E
-
S
↑
F
-
N
-
V
-
Z
-
C
-
S: 飽和処理が行なわれた場合にセットされます。
例 1:
mov.l d1.0, a0, u
before
d1.0
a0
st
after
0x00000000
0xFC76543210
0x0000
d1.0
a0
st
0x76543210
0xFC76543210
0x0000
例 2:
mov.w d0, a0, s
before
d1.0
a0
st
after
0x00000000
0xFC76543210
0x0000
d1.0
a0
st
0x80000000
0xFC76543210
0x0020 S=1
0xFC 7654 3210 は 0x8000 0000 へ制限されます。
補足 :
飽和処理が有効な場合、結果は最小で 0x8000 0000、最大で 0x7FFF FFFF の間に制限され
ます。飽和処理の詳細については「6.3 飽和処理と丸め処理」を参照して下さい。
この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」
を参照して下さい。
75 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
mov.w A, Dreg16, <s/u>
Move 16-bit data register to accumulator
bit 15
1
14
1
13
1
12
0
11
P
Ad X
a0:0
a1:1
Dreg s/u X
16s s:0
Even u:1
/Odd
10
0
9
1
8
0
7
0
6
0
5
1
4
0
3
X
X
X
X
X
X
X
X
X
2
1
0
Dreg16s
(Source
Dreg16#)
X
X
X
シンタックス :
mov.w Ad, Dreg16s, <s/u>
オペランド :
Ad
Dreg16s
a0/a1
d0 - d15
オペレーション :
Ad = Dreg16s << 16
説明 :
Dreg16s の値を 16 ビット左シフトし、Ad へ格納します。<s/u> オプションで Dreg16s を符
号拡張するか、ゼロ拡張するか選択します。
コンディションコード :
U
-
E
S
↑↓ -
F
-
N
V
↑↓ 0
Z
C
↑↓ 0
C: 常にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: 常にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の
ビット 39 がコピーされます。)
E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ
れ、そうでない場合にクリアされます。
例 1:
mov.w a0, d0, s
before
a0
d0
st
after
0x0000000001
0xFC76
0x0000
a0
d0
st
0xFFFC760000
0xFC76
0x0008 N=1
例 2:
mov.w a0, d0, u
before
a0
d0
st
after
0x0000000001
0xFC76
0x0000
a0
d0
st
0x00FC760000
0xFC76
0x0040 E=1
補足 :
この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」
を参照して下さい。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
76 頁
Ximo16A
Preliminary
mov.l A, Dreg32, <s/u>
Move 32-bit data register to accumulator
bit 15
1
14
1
13
1
12
0
Ad X
a0:0
a1:1
s/u X
s:0
u:1
X
11
P
10
0
9
1
8
0
7
0
6
0
5
1
4
1
3
X
X
X
X
X
X
X
X
X
2
1
0
Dreg32s
(Source
Dreg32#)
X
X
X
シンタックス :
mov.l Ad, Dreg32s, <s/u>
オペランド :
Ad
Dreg32s
a0/a1
d1.0 - d15.14
オペレーション :
Ad = Dreg16s
説明 :
Dreg32s の値を、Ad へ格納します。<s/u> オプションで Dreg16s を符号拡張するか、ゼロ拡
張するか選択します。
コンディションコード :
U
-
E
S
↑↓ -
F
-
N
V
↑↓ 0
Z
C
↑↓ 0
C: 常にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: 常にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の
ビット 39 がコピーされます。)
E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ
れ、そうでない場合にクリアされます。
例 1:
mov.w a0, d1.0, s
before
a0
d1.0
st
after
0x0000000001
0xFC765432
0x0000
a0
d1.0
st
0xFFFC765432
0xFC76
0x0008 N=1
例 2:
mov.w a0, d1.0, u
before
a0
d1.0
st
after
0x0000000001
0xFC765432
0x0000
a0
d1.0
st
0x00FC765432
0xFC765432
0x0040 E=1
補足 :
この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」
を参照して下さい。
77 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
mov A, A
Move accumulator
bit 15
1
X
14
1
X
13
1
As
a0:0
a1:1
12 11
0
P
Ad X
a0:0
a1:1
10
0
X
9
0
X
8
1
X
7
1
X
6
1
X
5
1
X
4
0
X
3
0
X
2
X
X
1
X
X
0
X
X
シンタックス :
mov Ad, As
オペランド :
Ad
As
a0/a1
a0/a1
オペレーション :
Ad = As
説明 :
As の値を Ad へ格納します。
コンディションコード :
U
-
E
S
↑↓ -
F
-
N
V
↑↓ 0
Z
C
↑↓ 0
C: 常にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: 常にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の
ビット 39 がコピーされます。)
E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ
れ、そうでない場合にクリアされます。
例:
mov a1, a0
before
a0
a1
st
after
0x038100C510
0x0000000000
0x0000
a0
a1
st
0x038100C510
0x038100C510
0x0040 E=1
補足 :
この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」
を参照して下さい。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
78 頁
Ximo16A
Preliminary
movst.w d0, Stack_Reg
Move stack register to d0 register
bit 15
1
X
14
1
13
0
12
1
11
0
10
0
9
0
8
0
7
1
6
1
5
1
4
0
3
X
X
X
X
X
X
X
X
X
X
X
X
X
2
1
0
Stack_Reg
(Source
Stack_Reg#)
X
X
X
シンタックス :
movst.w d0, Stack_Reg
オペランド :
Stack_Reg
sc0/ss0/se0/spc/sc1/ss1/se1/sst
オペレーション :
d0 = Stack_Reg
説明 :
Stack_Reg フィールドで指示される内部スタックレジスタの値を d0 レジスタに格納します。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例:
movst.w d0, spc
before
spc
d0
after
0x0123
0x0000
spc
d0
0x0123
0x0123
補足 :
内部スタックレジスタを直接読み出すための命令です。通常内部スタックレジスタは、高速
割込み時にコアのコンテキストを保存するために利用され、rtf 命令によって読み出されます。こ
の命令は内部スタック状態のデバッグを目的とした命令です。
79 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
movst.w Stack_Reg, d0
Move d0 register to stack register
bit 15
1
X
14
1
13
0
12
1
11
0
10
0
9
0
8
0
7
1
6
1
5
1
4
1
3
X
X
X
X
X
X
X
X
X
X
X
X
X
2
1
0
Stack_Reg
(Destintaion
Stack_Reg#)
X
X
X
シンタックス :
movst.w Stack_Reg, d0
オペランド :
Stack_Reg
sc0/ss0/se0/spc/sc1/ss1/se1/sst
オペレーション :
Stack_Reg = d0
説明 :
d0 レジスタの値を Stack_Reg フィールドで指示される内部スタックレジスタに格納します。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例:
movst.w sc0, d0
before
d0
sc0
after
0x0123
0x0000
d0
sc0
0x0123
0x0123
補足 :
内部スタックレジスタに直接書き込むための命令です。通常内部スタックレジスタは、高速
割込み時にコアのコンテキストを保存するために利用され、rtf 命令によって読み出されます。こ
の命令は内部スタック状態のデバッグを目的とした命令です。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
80 頁
Ximo16A
Preliminary
14 加算命令
add.w Dreg16, Dreg16
add.l Dreg32, Dreg32
adc.w Dreg16, Dreg16
add.w Dreg16, Dreg16, Dreg16, <ns/sa>
add.l Dreg32, Dreg32, Dreg32, <ns/sa>
add.w Preg, Preg
adsi.w Dreg16, IMM4
adsi.w Preg, IMM4
adsi.l Dreg32, IMM4
addi.w Dreg16, IMM16
addi.w Preg, IMM16
add A, Dreg16, <s/u>
add A, Dreg32, <s/u>
add A, A
adl A, A
概要 :
この章では加算命令について説明します。加算命令にはいくつかの版があり、データレジス
タ / ポインタレジスタ / アキュームレータレジスタにおいて加算を行なうことができます。
81 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
add.w Dreg16, Dreg16
Add 16-bit data register
bit 15
0
14
1
13
0
12
0
11
0
10
0
9
0
8
0
7
Dreg
16s
Even
/Odd
6
Dreg
16d
Even
/Odd
5
4
3
Dreg16s
(Source
Dreg16#)
2
1
0
Dreg16d
(Destination
Dreg16#)
シンタックス :
add.w Dreg16d, Dreg16s
オペランド :
Dreg16d
Dreg16s
d0 - d15
d0 - d15
オペレーション :
Dreg16d = Dreg16d + Dreg16s
説明 :
Dreg16d と Dreg16s を加算し、Dreg16d へ結果を格納します。
コンディションコード :
U
-
E
-
S
-
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 15 にキャリーが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
F: オーバーフローが発生する場合にセットされます。
例:
add.w d1, d5
before
d1
d5
st
2013.12.20 版
after
0x5521
0xC50E
0x0000
d1
d5
st
0x1A2F
0xC50E
0x0001 C=1
(C) 2009-2013 New Japan Radio Co., Ltd.
82 頁
Ximo16A
Preliminary
adc.w Dreg16, Dreg16
Add 16-bit data register with carry
bit 15
0
14
1
13
0
12
0
11
0
10
0
9
1
8
0
7
Dreg
16s
Even
/Odd
6
Dreg
16d
Even
/Odd
5
4
3
Dreg16s
(Source
Dreg16#)
2
1
0
Dreg16d
(Destination
Dreg16#)
シンタックス :
adc.w Dreg16d, Dreg16s
オペランド :
Dreg16d
Dreg16s
d0 - d15
d0 - d15
オペレーション :
Dreg16d = Dreg16d + Dreg16s + C
説明 :
Dreg16d と Dreg16s とキャリービットとを加算し、Dreg16d へ結果を格納します。
コンディションコード :
U
-
E
-
S
-
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 15 にキャリーが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
F: オーバーフローが発生する場合にセットされます。
例:
adc.w d3, d2
before
d2
d3
st
83 頁
after
0x1234
0x5ABC
0x0001 C=1
d2
d3
st
0x1234
0x6CF1
0x0000
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
add.w Dreg16, Dreg16, Dreg16, <ns/sa>
Add 16-bit data register (with saturate)
bit 15
1
X
14
1
13
1
12
0
11
P
10
0
9
0
8
0
X
X
X
Dreg
16s0
Even
/Odd
Dreg Dreg16s0
16s1 (Source0
Even Dreg16#)
/Odd
7
0
6
0
5
0
4
0
Dreg16s1
(Source1
Dreg16#)
3
ns:0
sa:1
Dreg
16d
Even
/Odd
2
X
1
X
0
X
Dreg16d
(Destination
Dreg16#)
シンタックス :
add.w Dreg16d, Dreg16s0, Dreg16s1, <ns/sa>
オペランド :
Dreg16d
Dreg16s0
Dreg16s1
d0 - d15
d0 - d15
d0 - d15
オペレーション :
Dreg16d = Dreg16s0 + Dreg16s1
説明 :
Dreg16s0 と Dreg16s1 を加算し、Dreg16d へ結果を格納します。<ns/sa> オプションによっ
て演算結果に対する飽和処理の有無を選択します。
コンディションコード :
U
-
E
-
S
↑
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 15 にキャリーが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
F: オーバーフローが発生する場合にセットされます。
S: 演算結果に対して飽和処理が行なわれた場合、セットされます。
例 1:
add.w d0, d1, d2, ns
before
after
d2
d1
d0
st
0x7050
0x3F01
0x0000
0x0000
d2
d1
d0
st
0x7050
0x3F01
0x0000
0x0000
d2
d1
d0
st
0x7050
0x3F01
0xAF51
0x001C F=1,N=1,V=1
例 2:
add.w d0, d1, d2, sa
before
d2
d1
d0
st
after
0x7050
0x3F01
0x7FFF
0x003C S=1,F=1,N=1,V=1
0x7050 + 0x3F01 として演算され、結果は 0x7FFF へ飽和されます。C,Z,V,N,F ビットの動作
は飽和処理による影響を受けません。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
84 頁
Ximo16A
Preliminary
補足 :
飽和処理が有効な場合、結果は最小で 0x8000、最大で 0x7FFF の間に制限されます。飽和処
理の詳細については「6.3 飽和処理と丸め処理」を参照して下さい。
この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」
を参照して下さい。
85 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
add.w Preg, Preg
Add pointer register
bit 15
0
14
1
13
0
12
1
11
0
10
0
9
1
8
1
7
0
6
0
5
4
Pregs
(Source
Preg#)
3
2
1
0
Pregd
(Destination
Pregd#)
シンタックス :
add.w Pregd, Pregs
オペランド :
Pregs
Pregd
p0 - p5/fp/sp
p0 - p5/fp/sp
オペレーション :
Pregd = Pregd + Pregs
説明 :
Pregd と Pregs を加算し、Pregd へ結果を格納します。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例:
add.w p4, p5
before
p4
p5
2013.12.20 版
after
0x1100
0x0500
p4
p5
0x1600
0x0500
(C) 2009-2013 New Japan Radio Co., Ltd.
86 頁
Ximo16A
Preliminary
add.l Dreg32, Dreg32
Add 32-bit data register
bit 15
0
14
1
13
0
12
1
11
0
10
0
9
0
8
0
7
0
6
0
5
4
3
Dreg32s
(Source
Dreg32#)
2
1
0
Dreg32d
(Destination
Dreg32#)
シンタックス :
add.l Dreg32d, Dreg32s
オペランド :
Dreg16d
Dreg16s
d1.0 - d15.14
d1.0 - d15.14
オペレーション :
Dreg32d = Dreg32d + Dreg32s
説明 :
Dreg32d と Dreg32s を加算し、Dreg32d へ結果を格納します。
コンディションコード :
U
-
E
-
S
-
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 31 にキャリーが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
F: オーバーフローが発生する場合にセットされます。
例:
add.l d5.4, d1.0
before
d1.0
d5.4
st
87 頁
after
0x5521F051
0xC50E3200
0x0000
d1.0
d5.4
st
0x1A302251
0xC50E3200
0x0001 C=1
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
add.l Dreg32, Dreg32, Dreg32, <ns/sa>
Add 32-bit data register (with saturate )
bit 15
1
X
14
1
13
1
12
0
11
P
10
0
9
0
8
0
X
X
X
X
X
Dreg32s0
(Source0
Dreg32#)
7
0
6
0
5
1
4
0
Dreg32s1
(Source1
Dreg32#)
3
2
1
0
ns:0 X
X
X
sa:1
X
Dreg32d
(Destination
Dreg32#)
シンタックス :
add.l Dreg32d, Dreg32s0, Dreg32s1, <ns/sa>
オペランド :
Dreg32d
Dreg32s0
Dreg32s1
d1.0 - d15.14
d1.0 - d15.14
d1.0 - d15.14
オペレーション :
Dreg32d = Dreg32s0 + Dreg32s1
説明 :
Dreg32s0 と Dreg32s1 を加算し、Dreg32d へ結果を格納します。<ns/sa> オプションによっ
て演算結果に対する飽和処理の有無を選択します。
コンディションコード :
U
-
E
-
S
↑
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 31 にキャリーが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
F: オーバーフローが発生する場合にセットされます。
S: 演算結果に対して飽和処理が行なわれた場合、セットされます。
例 1:
add.l d5.4, d3.2, d1.0, ns
before
d1.0
d3.2
d5.4
st
after
0x7050C0AD
0x3F0185E0
0x00000000
0x0000
d1.0
d3.2
d5.4
st
0x7050C0AD
0x3F0185E0
0xAF52468D
0x001C F=1,N=1,V=1
例 2:
add.l d5.4, d3.2, d1.0, sa
before
d1.0
d3.2
d5.4
st
after
0x7050C0AD
0x3F0185E0
0x00000000
0x0000
d1.0
d3.2
d5.4
st
0x7050C0AD
0x3F0185E0
0x7FFFFFFF
0x003C S=1,F=1,N=1,V=1
0x7050 C0AD + 0x3F01 85E0 として演算され、結果は 0x7FFF FFFF へ飽和されます。
C,Z,V,N,F ビットの動作は飽和処理による影響を受けません。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
88 頁
Ximo16A
Preliminary
補足 :
飽和処理が有効な場合、結果は最小で 0x8000 0000、最大で 0x7FFF FFFF の間に制限され
ます。飽和処理の詳細については「6.3 飽和処理と丸め処理」を参照して下さい。
この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」
を参照して下さい。
89 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
adsi.w Dreg16, IMM4
Add short immediate to 16-bit data register
bit 15
0
14
1
13
1
12
0
11
0
10
1
9
0
8
0
7
6
5
4
IMM4(0 to 15)
3
Dreg
16d
Even
/Odd
2
1
0
Dreg16d
(Destination
Dreg16#)
シンタックス :
adsi.w Dreg16d, IMM4
オペランド :
Dreg16d
IMM4
d0 - d15
0 - 15
オペレーション :
Dreg16d = Dreg16d + IMM4
説明 :
Dreg16d と IMM4 を加算し、Dreg16d へ結果を格納します。
コンディションコード :
U
-
E
-
S
-
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 15 にキャリーが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
F: オーバーフローが発生する場合にセットされます。
例:
adsi.w d5, 3
before
d5
st
2013.12.20 版
after
0x5521
0x0000
d5
st
0x5524
0x0000
(C) 2009-2013 New Japan Radio Co., Ltd.
90 頁
Ximo16A
Preliminary
adsi.w Preg, IMM4
Add short immediate to pointer register
bit 15
0
14
1
13
1
12
0
11
0
10
1
9
1
8
0
7
6
5
4
IMM4(0 to 15)
3
1
2
1
0
Pregd
(Destination
Preg#)
シンタックス :
adsi.w Preg, IMM4
オペランド :
Preg
IMM4
p0 - p5/fp/sp
0 - 15
オペレーション :
Preg = Preg + IMM4
説明 :
Preg と IMM4 を加算し、Preg へ結果を格納します。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例:
adsi.w p0, 2
before
p0
91 頁
after
0x0050
p1
0x0052
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
adsi.l Dreg32, IMM4
Add short immediate to 32-bit data register
bit 15
0
14
1
13
1
12
0
11
0
10
1
9
1
8
0
7
6
5
4
IMM4(0 to 15)
3
0
2
1
0
Dreg32d
(Destination
Dreg32#)
シンタックス :
adsi.l Dreg32d, IMM4
オペランド :
Dreg16d
IMM4
d1.0 - d15.14
0 - 15
オペレーション :
Dreg32d = Dreg32d + IMM4
説明 :
Dreg32d と IMM4 を加算し、Dreg32d へ結果を格納します。
コンディションコード :
U
-
E
-
S
-
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 15 にキャリーが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
F: オーバーフローが発生する場合にセットされます。
例:
adsi.l d5.4, 3
before
d5.4
st
2013.12.20 版
after
0x5521F021
0x0000
d5.4
st
0x5521F024
0x0000
(C) 2009-2013 New Japan Radio Co., Ltd.
92 頁
Ximo16A
Preliminary
addi.w Dreg16, IMM16
Add immediate to 16-bit data register
bit 15
1
14
1
13
0
12
0
11
0
10
1
9
1
8
0
7
0
6
0
5
0
4
0
3
Dreg
16d
Even
/Odd
2
1
0
Dreg16d
(Destination
Dreg16#)
IMM16
シンタックス :
addi.w Dreg16d, IMM16
オペランド :
Dreg16d
IMM16
d0 - d15
0 - 65535
オペレーション :
Dreg16d = Dreg16d + IMM16
説明 :
Dreg16d と IMM16 を加算し、Dreg16d へ結果を格納します。
コンディションコード :
U
-
E
-
S
-
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 15 にキャリーが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
F: オーバーフローが発生する場合にセットされます。
例:
addi.w d5, 500
before
d5
st
93 頁
after
0x5521
0x0000
d5
st
0x5715
0x0000
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
addi.w Preg, IMM16
Add immediate to pointer register
bit 15
1
14
1
13
0
12
0
11
0
10
1
9
1
8
0
7
1
6
0
5
0
4
0
3
X
2
1
0
Pregd
(Destination
Preg#)
IMM16
シンタックス :
addi.w Preg, IMM16
オペランド :
Preg
IMM16
p0 - p5/fp/sp
0 - 65535
オペレーション :
Pregd = Pregd + IMM16
説明 :
Pregd と IMM16 を加算し、Pregd へ結果を格納します。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例:
addi.w p5, 500
before
p5
2013.12.20 版
after
0x5521
p5
0x5715
(C) 2009-2013 New Japan Radio Co., Ltd.
94 頁
Ximo16A
Preliminary
add A, Dreg16, <s/u>
Add 16-bit data register to accumulator
bit 15
1
14
1
13
1
12
0
11
P
Ad X
a0:0
a1:1
Dreg s/u X
16s s:0
Even u:1
/Odd
10
0
9
0
8
1
7
0
6
0
5
0
4
0
3
0
X
X
X
X
X
X
X
X
2
1
0
Dreg16s
(Source
Dreg16#)
X
X
X
シンタックス :
add Ad, Dreg16s, <s/u>
オペランド :
Ad
Dreg16s
a0/a1
d0 - d15
オペレーション :
Ad = Ad + (Dreg16s<<16)
説明 :
Dreg16s を 16 ビット左シフトし、40 ビットのアキュームレータ Ad へ加算します。<s/u> オ
プションで Dreg16s を符号拡張するか、ゼロ拡張するか選択します。
コンディションコード :
U
-
E
S
↑↓ ↑
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 39 にキャリーが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: Ad にオーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の
ビット 39 がコピーされます。)
F: Ad にオーバーフローが発生する場合にセットされます。
S: 演算結果に対して飽和処理が行なわれた場合にセットされます。
E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ
れ、そうでない場合にクリアされます。
例 1:
add a0, d13, s
before
a0
d13
st
after
0x0070325110
0xF052
0x0000
a0
d13
st
0x0060845110
0xF052
0x0001 C=1
0x00 7032 5110 + 0xFF F052 0000 として演算されます。
例 2:
add a0, d13, u
before
a0
d13
st
after
0x0070325110
0xF052
0x0000
a0
d13
st
0x0160845110
0xF052
0x0040 E=1
0x00 7032 5110 + 0x00 F052 0000 として演算されます。
95 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
例 3:
add a0, d13, s
before
a0
d13
st
after
0x7FF0325110
0x5052
0x0000
a0
d13
st
0x7FFFFFFFFF
0x5052
0x007C V=1,N=1,F=1,S=1,E=1
0x7F F032 5110 + 0x00 5052 0000 として演算され、結果は 0x7F FFFF FFFF へ飽和されま
す。C,Z,V,N,F ビットの動作は飽和処理による影響を受けません。
補足 :
Ad と Dreg16s のデータ型の扱いについては表 6.1「データ形式」を参照して下さい。
s オプションでは符号付きの値として Dreg16s を扱い、演算結果は最小で 0x80 0000 0000、
最大で 0x7F FFFF FFFF の間に制限されます。
u オプションでは符号無しの値として Dreg16s を扱います。演算結果に対する飽和処理は行
なわれません。
飽和処理の詳細については「6.3 飽和処理と丸め処理」を参照して下さい。
この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」
を参照して下さい。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
96 頁
Ximo16A
Preliminary
add A, Dreg32, <s/u>
Add 32-bit data register to accumulator
bit 15
1
14
1
13
1
12
0
Ad X
a0:0
a1:1
s/u X
s:0
u:1
X
11
P
10
0
9
0
8
1
7
0
6
0
5
0
4
1
3
0
X
X
X
X
X
X
X
X
2
1
0
Dreg32s
(Source
Dreg32#)
X
X
X
シンタックス :
add Ad, Dreg32s, <s/u>
オペランド :
Ad
Dreg16s
a0/a1
d1.0 - d15.14
オペレーション :
Ad = Ad + Dreg32s
説明 :
Dreg32s を 40 ビットのアキュームレータ Ad へ加算します。<s/u> オプションで Dreg32s を
符号拡張するか、ゼロ拡張するか選択します。
コンディションコード :
U
-
E
S
↑↓ ↑
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 39 にキャリーが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: Ad にオーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の
ビット 39 がコピーされます。)
F: Ad にオーバーフローが発生する場合にセットされます。
S: 演算結果に対して飽和処理が行なわれた場合にセットされます。
E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ
れ、そうでない場合にクリアされます。
例 1:
add a0, d13.12, s
before
a0
d13.12
st
after
0x0070325110
0xF052C001
0x0000
a0
d13.12
st
0x0060851111
0xF052C001
0x0001 C=1
0x00 7032 5110 + 0xFF F052 C001 として演算されます。
例 2:
add a0, d13.12, u
before
a0
d13.12
st
after
0x0070325110
0xF052C001
0x0000
a0
d13.12
st
0x0160851111
0xF052C001
0x0040 E=1
0x00 7032 5110 + 0x00 F052 C001 として演算されます。
97 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
例 3:
add a0, d13.12, s
before
a0
d13.12
st
after
0x7FF0325110
0x5052C001
0x0000
a0
d13.12
st
0x7FFFFFFFFF
0x5052C001
0x007C V=1,N=1,F=1,S=1,E=1
0x7F F032 5110 + 0x00 5052 C001 として演算され、結果は 0x7F FFFF FFFF へ飽和されま
す。C,Z,V,N,F ビットの動作は飽和処理による影響を受けません。
補足 :
Ad と Dreg32s のデータ型の扱いについては表 6.1「データ形式」を参照して下さい。
s オプションでは符号付きの値として Dreg32s を扱い、演算結果は最小で 0x80 0000 0000、
最大で 0x7F FFFF FFFF の間に制限されます。
u オプションでは符号無しの値として Dreg32s を扱います。演算結果に対する飽和処理は行
なわれません。
飽和処理の詳細については「6.3 飽和処理と丸め処理」を参照して下さい。
この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」
を参照して下さい。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
98 頁
Ximo16A
Preliminary
add A, A
Add accumulator to accumulator
bit 15
1
X
14
1
X
13
1
As
a0:0
a1:1
12 11
0
P
Ad X
a0:0
a1:1
10
0
X
9
0
X
8
1
X
7
1
X
6
0
X
5
0
X
4
0
X
3
0
X
2
X
X
1
X
X
0
X
X
シンタックス :
add Ad, As
オペランド :
Ad
As
a0/a1
a0/a1
オペレーション :
Ad = Ad + As
説明 :
As と Ad を加算し、結果を Ad に格納します。
コンディションコード :
U
-
E
S
↑↓ ↑
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 39 にキャリーが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: Ad にオーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の
ビット 39 がコピーされます。)
F: Ad にオーバーフローが発生する場合にセットされます。
S: 演算結果に対して飽和処理が行なわれた場合にセットされます。
E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ
れ、そうでない場合にクリアされます。
例 1:
add a0, a1
before
a0
a1
st
after
0x0510A150E3
0x1F0534C175
0x0000
a0
a1
st
0x8510A150E3
0xAF0534C175
0x0000
a0
a1
st
0x2415D61258
0x1F0534C175
0x0040 E=1
例2
add a0, a1
before
a0
a1
st
after
0x8000000000
0xAF0534C175
0x0075 C=1,V=1,F=1,S=1,E=1
結果は 0x7F FFFF FFFF へ飽和されます。C,Z,V,N,F ビットの動作は飽和処理による影響を
受けません。
補足 :
演算結果は最小で 0x80 0000 0000、最大で 0x7F FFFF FFFF の間に制限されます。
99 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
飽和処理の詳細については「6.3 飽和処理と丸め処理」を参照して下さい。
この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」
を参照して下さい。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
100 頁
Ximo16A
Preliminary
adl A, A
Add accumulator to accumulator with left shift
bit 15
1
X
14
1
X
13
1
As
a0:0
a1:1
12 11
0
P
Ad X
a0:0
a1:1
10
0
X
9
0
X
8
1
X
7
1
X
6
0
X
5
0
X
4
1
X
3
0
X
2
X
X
1
X
X
0
X
X
シンタックス :
adl Ad, As
オペランド :
Ad
As
a0/a1
a0/a1
オペレーション :
Ad = (Ad<<1) + As
説明 :
As と左に 1 ビットシフトした Ad を加算し、結果を Ad に格納します。
コンディションコード :
U
-
E
S
↑↓ ↑
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 39 にキャリーが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: Ad にオーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の
ビット 39 がコピーされます。)
F: Ad にオーバーフローが発生する場合にセットされます。
S: 演算結果に対して飽和処理が行なわれた場合にセットされます。
E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ
れ、そうでない場合にクリアされます。
例:
adl a0, a1
before
a0
a1
st
after
0x0510A150E3
0x1F0534C175
0x0000
a0
a1
st
0x29267F633B
0x1F0534C175
0x0040 E=1
補足 :
演算結果は最小で 0x80 0000 0000、最大で 0x7F FFFF FFFF の間に制限されます。
飽和処理の詳細については「6.3 飽和処理と丸め処理」を参照して下さい。
この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」
を参照して下さい。
101 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
15 減算命令
sub.w Dreg16, Dreg16
sub.l Dreg32, Dreg32
sbc.w Dreg16, Dreg16
sub.w Dreg16, Dreg16, Dreg16, <ns/sa>
sub.l Dreg32, Dreg32, Dreg32, <ns/sa>
sub.w Preg, Preg
sbsi.w Dreg16, IMM4
sbsi.w Preg, IMM4
sbsi.l Dreg32, IMM4
subi.w Dreg16, IMM16
subi.w Preg, IMM16
sub A, Dreg16, <s/u>
sub A, Dreg32, <s/u>
sub A, A
sbl A, A
概要 :
この章では減算命令について説明します。減算命令にはいくつかの版があり、データレジス
タ / ポインタレジスタ / アキュームレータレジスタにおいて減算を行なうことができます。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
102 頁
Ximo16A
Preliminary
sub.w Dreg16, Dreg16
Subtract 16-bit data register
bit 15
0
14
1
13
0
12
0
11
0
10
0
9
0
8
1
7
Dreg
16s
Even
/Odd
6
Dreg
16d
Even
/Odd
5
4
3
Dreg16s
(Source
Dreg16#)
2
1
0
Dreg16d
(Destination
Dreg16#)
シンタックス :
sub.w Dreg16d, Dreg16s
オペランド :
Dreg16d
Dreg16s
d0 - d15
d0 - d15
オペレーション :
Dreg16d = Dreg16d - Dreg16s
説明 :
Dreg16d から Dreg16s を減算し、Dreg16d へ結果を格納します。
コンディションコード :
U
-
E
-
S
-
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 15 にボローが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
F: オーバーフローが発生する場合にセットされます。
例:
sub.w d1, d5
before
d1
d5
st
103 頁
after
0x3580
0x1532
0x0000
d1
d5
st
0x204E
0x1532
0x0000
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
sbc.w Dreg16, Dreg16
Subtract 16-bit data register with carry
bit 15
0
14
1
13
0
12
0
11
0
10
0
9
1
8
1
7
Dreg
16s
Even
/Odd
6
Dreg
16d
Even
/Odd
5
4
3
Dreg16s
(Source
Dreg16#)
2
1
0
Dreg16d
(Destination
Dreg16#)
シンタックス :
sbc.w Dreg16d, Dreg16s
オペランド :
Dreg16d
Dreg16s
d0 - d15
d0 - d15
オペレーション :
Dreg16d = Dreg16d - Dreg16s - C
説明 :
Dreg16d から Dreg16s とキャリービットとを減算し、Dreg16d へ結果を格納します。
コンディションコード :
U
-
E
-
S
-
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 15 にボローが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
F: オーバーフローが発生する場合にセットされます。
例:
sbc.w d1, d5
before
d1
d5
st
2013.12.20 版
after
0x3580
0x1532
0x0001 C=1
d1
d5
st
0x204D
0x1532
0x0000
(C) 2009-2013 New Japan Radio Co., Ltd.
104 頁
Ximo16A
Preliminary
sub.w Dreg16, Dreg16, Dreg16, <ns/sa>
Subtract 16-bit data reigster (with saturate)
bit 15
1
X
14
1
13
1
12
0
11
P
10
0
9
0
8
0
X
X
X
Dreg
16s0
Even
/Odd
Dreg Dreg16s0
16s1 (Source0
Even Dreg16#)
/Odd
7
0
6
0
5
0
4
1
Dreg16s1
(Source1
Dreg16#)
3
ns:0
sa:1
Dreg
16d
Even
/Odd
2
X
1
X
0
X
Dreg16d
(Destination
Dreg16#)
シンタックス :
sub.w Dreg16d, Dreg16s0, Dreg16s1, <ns/sa>
オペランド :
Dreg16d
Dreg16s0
Dreg16s1
d0 - d15
d0 - d15
d0 - d15
オペレーション :
Dreg16d = Dreg16s0 - Dreg16s1
説明 :
Dreg16s0 から Dreg16s1 を減算し、Dreg16d へ結果を格納します。<ns/sa> オプションに
よって演算結果に対する飽和処理の有無を選択します。
コンディションコード :
U
-
E
-
S
F
↑↓ ↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 15 にボローが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
F: オーバーフローが発生する場合にセットされます。
S: 演算結果に対して飽和処理が行なわれた場合にセットされます。
例 1:
sub.w d0, d1, d2, ns
before
after
d0
d1
d2
st
0x0000
0x9350
0x35EA
0x0000
d0
d1
d2
st
0x0000
0x9350
0x35EA
0x0000
d0
d1
d2
st
0x5D66
0x9350
0x35EA
0x0014 V=1,F=1
例 2:
sub.w d0, d1, d2, sa
before
d0
d1
d2
st
after
0x8000
0x9350
0x35EA
0x0034 V=1,F=1,S=1
0x9350 - 0x35EA として演算され、結果は 0x8000 へ飽和されます。C,Z,V,N,F ビットの動作
は飽和処理による影響を受けません。
105 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
補足 :
飽和処理が有効な場合、結果は最小で 0x8000、最大で 0x7FFF の間に制限されます。飽和処
理の詳細については「6.3 飽和処理と丸め処理」を参照して下さい。
この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」
を参照して下さい。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
106 頁
Ximo16A
Preliminary
sub.w Preg, Preg
Subtract pointer register
bit 15
0
14
1
13
0
12
1
11
0
10
0
9
1
8
1
7
0
6
1
5
4
Pregs
(Source
Preg#)
3
2
1
0
Pregd
(Destination
Pregd#)
シンタックス :
sub.w Pregd, Pregs
オペランド :
Pregd
Pregs
p0 - p5/fp/sp
p0 - p5/fp/sp
オペレーション :
Pregd = Pregd - Pregs
説明 :
Pregd から Pregs を減算し、Pregd へ結果を格納します。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例:
sub.w p1, p5
before
p1
p5
107 頁
after
0x3580
0x1532
p1
p5
0x204D
0x1532
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
sub.l Dreg32, Dreg32
Subtract 32-bit data register
bit 15
0
14
1
13
0
12
1
11
0
10
0
9
0
8
0
7
0
6
1
5
4
3
Dreg32s
(Source
Dreg32#)
2
1
0
Dreg32d
(Destination
Dreg32#)
シンタックス :
sub.l Dreg32d, Dreg32s
オペランド :
Dreg32d
Dreg32s
d1.0 - d15.14
d1.0 - d15.14
オペレーション :
Dreg32d = Dreg32d - Dreg32s
説明 :
Dreg32d から Dreg32s を減算し、Dreg32d へ結果を格納します。
コンディションコード :
U
-
E
-
S
-
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 31 にボローが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
F: オーバーフローが発生する場合にセットされます。
例:
sub.l d1.0, d3.2
before
d1.0
d3.2
st
2013.12.20 版
after
0x83505110
0xF5EAC001
0x0000
d1.0
d3.2
st
0x8D65910F
0xF5EAC001
0x0009 C=1,N=1
(C) 2009-2013 New Japan Radio Co., Ltd.
108 頁
Ximo16A
Preliminary
sub.l Dreg32, Dreg32, Dreg32, <ns/sa>
Subtract 32-bit data register
bit 15
1
X
14
1
13
1
12
0
11
P
10
0
9
0
8
0
X
X
X
X
X
Dreg32s0
(Source0
Dreg32#)
7
0
6
0
5
1
4
1
Dreg32s1
(Source1
Dreg32#)
3
2
1
0
ns:0 X
X
X
sa:1
X
Dreg32d
(Destination
Dreg32#)
シンタックス :
sub.l Dreg32d, Dreg32s0, Dreg32s1, <ns/sa>
オペランド :
Dreg32d
Dreg32s0
Dreg32s1
d1.0 - d15.14
d1.0 - d15.14
d1.0 - d15.14
オペレーション :
Dreg32d = Dreg32s0 - Dreg32s1
説明 :
Dreg32s0 から Dreg32s1 を減算し、Dreg32d へ結果を格納します。<ns/sa> オプションに
よって演算結果に対する飽和処理の有無を選択します。
コンディションコード :
U
-
E
-
S
F
↑↓ ↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 31 にボローが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
F: オーバーフローが発生する場合にセットされます。
S: 演算結果に対して飽和処理が行なわれた場合にセットされます。
例 1:
sub.w d1.0, d3.2, d5.4, ns
before
d1.0
d3.2
d5.4
st
after
0x00000000
0x9350F150
0x35EA45C6
0x0000
d1.0
d3.2
d5.4
st
0x5D66AB8A
0x9350F150
0x35EA45C6
0x0014 V=1,F=1
例 2:
sub.w d1.0, d3.2, d5.4, sa
before
d1.0
d3.2
d5.4
st
after
0x00000000
0x9350F150
0x35EA45C6
0x0000
d1.0
d3.2
d5.4
st
0x80000000
0x9350F150
0x35EA45C6
0x0034 V=1,F=1,S=1
0x9350 F150 - 0x35EA 45C6 として演算され、結果は 0x8000 0000 へ飽和されます。C,Z,V,N,F
ビットの動作は飽和処理による影響を受けません。
109 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
補足 :
飽和処理が有効な場合、結果は最小で 0x8000 0000、最大で 0x7FFF FFFF の間に制限され
ます。飽和処理の詳細については「6.3 飽和処理と丸め処理」を参照して下さい。
この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」
を参照して下さい。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
110 頁
Ximo16A
Preliminary
sbsi.w Dreg16, IMM4
Subtract short immediate from 16-bit data reigster
bit 15
0
14
1
13
1
12
0
11
0
10
1
9
0
8
1
7
6
5
4
IMM4(0 to 15)
3
Dreg
16d
Even
/Odd
2
1
0
Dreg16d
(Destination
Dreg16#)
シンタックス :
sbsi.w Dreg16d, IMM4
オペランド :
Dreg16d
IMM4
d0 - d15
0 - 15
オペレーション :
Dreg16d = Dreg16d - IMM4
説明 :
Dreg16d から IMM4 を減算し、Dreg16d へ結果を格納します。
コンディションコード :
U
-
E
-
S
-
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 15 にボローが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
F: オーバーフローが発生する場合にセットされます。
例:
sbsi.w d3, 10
before
d3
st
111 頁
after
0x8350
0x0000
d3
st
0x8346
0x0008 N=1
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
sbsi.w Preg, IMM4
Subtract short immediate from pointer register
bit 15
0
14
1
13
1
12
0
11
0
10
1
9
1
8
1
7
6
5
4
IMM4(0 to 15)
3
1
2
1
0
Pregd
(Destination
Preg#)
シンタックス :
sbsi.w Pregd, IMM4
オペランド :
Pregd
IMM4
p0 - d5/fp/sp
0 - 15
オペレーション :
Pregd = Pregd - IMM4
説明 :
Pregd から IMM4 を減算し、Pregd へ結果を格納します。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例:
sbsi.w p3, 10
before
p3
2013.12.20 版
after
0x8350
p3
0x8346
(C) 2009-2013 New Japan Radio Co., Ltd.
112 頁
Ximo16A
Preliminary
sbsi.l Dreg32, IMM4
Subtract short immediate from 32-bit data register
bit 15
0
14
1
13
1
12
0
11
0
10
1
9
1
8
1
7
6
5
4
IMM4(0 to 15)
3
0
2
1
0
Dreg32d
(Destination
Dreg32#)
シンタックス :
sbsi.l Dreg16d, IMM4
オペランド :
Dreg32d
IMM4
d1.0 - d15.14
0 - 15
オペレーション :
Dreg32d = Dreg32d - IMM4
説明 :
Dreg32d から IMM4 を減算し、Dreg32d へ結果を格納します。
コンディションコード :
U
-
E
-
S
-
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 31 にボローが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
F: オーバーフローが発生する場合にセットされます。
例:
sbsi.w d3.2, 10
before
d3.2
st
113 頁
after
0x83500000
0x0000
d3.2
st
0x834FFFF6
0x0008 N=1
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
subi.w Dreg16, IMM16
Subtract immediate from 16-bit data register
bit 15
1
14
1
13
0
12
0
11
0
10
1
9
1
8
0
7
0
6
0
5
0
4
1
3
Dreg
16d
Even
/Odd
2
1
0
Dreg16d
(Destination
Dreg16#)
IMM16
シンタックス :
subi.w Dreg16d, IMM16
オペランド :
Dreg16d
IMM16
d0 - d15
0 - 65535
オペレーション :
Dreg16d = Dreg16d - IMM16
説明 :
Dreg16d から IMM16 を減算し、Dreg16d へ結果を格納します。
コンディションコード :
U
-
E
-
S
-
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 15 にボローが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
F: オーバーフローが発生する場合にセットされます。
例:
subi.w d3, 500
before
d3
st
2013.12.20 版
after
0x8350
0x0000
d3
st
0x815C
0x0008 N=1
(C) 2009-2013 New Japan Radio Co., Ltd.
114 頁
Ximo16A
Preliminary
subi.w Preg, IMM16
Subtract immediate from pointer register
bit 15
1
14
1
13
0
12
0
11
0
10
1
9
1
8
0
7
1
6
0
5
0
4
1
3
X
2
1
0
Pregd
(Destination
Preg#)
IMM16
シンタックス :
subi.w Pregd, IMM16
オペランド :
Pregd
IMM16
p0 - p5/fp/sp
0 - 65535
オペレーション :
Pregd = Pregd - IMM16
説明 :
Dreg16d から IMM16 を減算し、Dreg16d へ結果を格納します。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例:
subi.w p3, 500
before
p3
115 頁
after
0x8350
p3
0x815C
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
sub A, Dreg16, <s/u>
Subtract 16-bit data register from accumulator
bit 15
1
14
1
13
1
12
0
11
P
Ad X
a0:0
a1:1
Dreg s/u X
16s s:0
Even u:1
/Odd
10
0
9
0
8
1
7
0
6
0
5
0
4
0
3
1
X
X
X
X
X
X
X
X
2
1
0
Dreg16s
(Source
Dreg16#)
X
X
X
シンタックス :
sub Ad, Dreg16s, <s/u>
オペランド :
Ad
Dreg16s
a0/a1
d0 - d15
オペレーション :
Ad = Ad - (Dreg16s<<16)
説明 :
Dreg16s を 16 ビット左シフトし、40 ビットのアキュームレータ Ad から減算します。<s/u>
オプションで Dreg16s を符号拡張するか、ゼロ拡張するか選択します。
コンディションコード :
U
-
E
S
↑↓ ↑
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 39 にボローが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: Ad にオーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の
ビット 39 がコピーされます。)
F: Ad にオーバーフローが発生する場合にセットされます。
S: 演算結果に対して飽和処理が行なわれた場合にセットされます。
E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ
れ、そうでない場合にクリアされます。
例 1:
sub a0, d13, s
before
a0
d13
st
after
0x0070325110
0xF052
0x0000
a0
d13
st
0x007FE05110
0xF052
0x0001 C=1
0x00 7032 5110 - 0xFF F052 0000 として演算されます。
例 2:
sub a0, d13, u
before
a0
d13
st
after
0x0070325110
0xF052
0x0000
a0
d13
st
0xFF7FE05110
0xF052
0x0049 C=1,N=1,E=1
0x00 7032 5110 - 0x00 F052 0000 として演算されます。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
116 頁
Ximo16A
Preliminary
例 3:
sub a0, d13, s
before
a0
d13
st
after
0x8000325110
0x5052
0x0000
a0
d13
st
0x8000000000
0x5052
0x0074 V=1,F=1,S=1,E=1
0x80 0032 5110 - 0x00 5052 0000 として演算され、結果は 0x80 0000 0000 へ飽和されます。
C,Z,V,N,F ビットの動作は飽和処理による影響を受けません。
補足 :
Ad と Dreg16s のデータ型の扱いについては表 6.1「データ形式」を参照して下さい。
s オプションでは符号付きの値として Dreg16s を扱い、演算結果は最小で 0x80 0000 0000、
最大で 0x7F FFFF FFFF の間に制限されます。
u オプションでは符号無しの値として Dreg16s を扱います。演算結果に対する飽和処理は行
なわれません。
飽和処理の詳細については「6.3 飽和処理と丸め処理」を参照して下さい。
この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」
を参照して下さい。
117 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
sub A, Dreg32, <s/u>
Subtract 32-bit data register from accumulator
bit 15
1
14
1
13
1
12
0
Ad X
a0:0
a1:1
s/u X
s:0
u:1
X
11
P
10
0
9
0
8
1
7
0
6
0
5
0
4
1
3
1
X
X
X
X
X
X
X
X
2
1
0
Dreg32s
(Source
Dreg32#)
X
X
X
シンタックス :
sub Ad, Dreg32s, <s/u>
オペランド :
Ad
Dreg16s
a0/a1
d1.0 - d15.14
オペレーション :
Ad = Ad - Dreg32s
説明 :
Dreg32s を 40 ビットのアキュームレータ Ad から減算します。<s/u> オプションで Dreg32s
を符号拡張するか、ゼロ拡張するか選択します。
コンディションコード :
U
-
E
S
↑↓ ↑
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 39 にボローが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: Ad にオーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の
ビット 39 がコピーされます。)
F: Ad にオーバーフローが発生する場合にセットされます。
S: 演算結果に対して飽和処理が行なわれた場合にセットされます。
E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ
れ、そうでない場合にクリアされます。
例 1:
sub a0, d13.12, s
before
a0
d13.12
st
after
0x0070325110
0xF052C001
0x0000
a0
d13.12
st
0x007FDF910F
0xF052C001
0x0001 C=1
0x00 7032 5110 - 0xFF F052 C001 として演算されます。
例 2:
sub a0, d13.12, u
before
a0
d13
st
after
0x0070325110
0xF052C001
0x0000
a0
d13
st
0xFF7FDF910F
0xF052C001
0x0049 C=1,N=1,E=1
0x00 7032 5110 - 0x00 F052 C001 として演算されます。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
118 頁
Ximo16A
Preliminary
例 3:
sub a0, d13.12, s
before
a0
d13.12
st
after
0x8000325110
0x5052C001
0x0000
a0
d13.12
st
0x8000000000
0x5052C001
0x0074 V=1,F=1,S=1,E=1
0x80 0032 5110 - 0x00 5052 C001 として演算され、結果は 0x80 0000 0000 へ飽和されます。
C,Z,V,N,F ビットの動作は飽和処理による影響を受けません。
補足 :
Ad と Dreg32s のデータ型の扱いについては表 6.1「データ形式」を参照して下さい。
s オプションでは符号付きの値として Dreg32s を扱い、演算結果は最小で 0x80 0000 0000、
最大で 0x7F FFFF FFFF の間に制限されます。
u オプションでは符号無しの値として Dreg32s を扱います。演算結果に対する飽和処理は行
なわれません。
飽和処理の詳細については「6.3 飽和処理と丸め処理」を参照して下さい。
この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」
を参照して下さい。
119 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
sub A, A
Subtract accumulator
bit 15
1
X
14
1
X
13
1
As
a0:0
a1:1
12 11
0
P
Ad X
a0:0
a1:1
10
0
X
9
0
X
8
1
X
7
1
X
6
0
X
5
0
X
4
0
X
3
1
X
2
X
X
1
X
X
0
X
X
シンタックス :
sub Ad, As
オペランド :
Ad
As
a0/a1
a0/a1
オペレーション :
Ad = Ad - As
説明 :
Ad から As を減算し、結果を Ad に格納します。
コンディションコード :
U
-
E
S
↑↓ ↑
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 39 にボローが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: Ad にオーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の
ビット 39 がコピーされます。)
F: Ad にオーバーフローが発生する場合にセットされます。
S: 演算結果に対して飽和処理が行なわれた場合にセットされます。
E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ
れ、そうでない場合にクリアされます。
例 1:
sub a0, a1
before
a0
a1
st
after
0x0510A150E3
0x1F0534C175
0x0000
a0
a1
st
0x8510A150E3
0x1F0534C175
0x0000
a0
a1
st
0xE60B6C8F6E
0x1F0534C175
0x0049 C=1,N=1,E=1
例 2:
sub a0, a1
before
a0
a1
st
after
0x8000000000
0x1F0534C175
0x0074 V=1,F=1,S=1,E=1
結果は 0x80 0000 0000 へ飽和されます。C,Z,V,N,F ビットの動作は飽和処理による影響を受
けません。
補足 :
演算結果は最小で 0x80 0000 0000、最大で 0x7F FFFF FFFF の間に制限されます。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
120 頁
Ximo16A
Preliminary
飽和処理の詳細については「6.3 飽和処理と丸め処理」を参照して下さい。
この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」
を参照して下さい。
121 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
sbl A, A
Subtract accumulator with left shift
bit 15
1
X
14
1
X
13
1
As
a0:0
a1:1
12 11
0
P
Ad X
a0:0
a1:1
10
0
X
9
0
X
8
1
X
7
1
X
6
0
X
5
0
X
4
1
X
3
1
X
2
X
X
1
X
X
0
X
X
シンタックス :
sbl Ad, As
オペランド :
Ad
As
a0/a1
a0/a1
オペレーション :
Ad = (Ad<<1) - As
説明 :
左に 1 ビットシフトした Ad から As を減算し、結果を Ad に格納します。
コンディションコード :
U
-
E
S
↑↓ ↑
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 39 にボローが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: Ad にオーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の
ビット 39 がコピーされます。)
F: Ad にオーバーフローが発生する場合にセットされます。
S: 演算結果に対して飽和処理が行なわれた場合にセットされます。
E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ
れ、そうでない場合にクリアされます。
例:
sbl a0, a1
before
a0
a1
st
after
0x0510A150E3
0x1F0534C175
0x0000
a0
a1
st
0xEB1C05E051
0x1F0534C175
0x0049 C=1,N=1,E=1
補足 :
演算結果は最小で 0x80 0000 0000、最大で 0x7F FFFF FFFF の間に制限されます。
飽和処理の詳細については「6.3 飽和処理と丸め処理」を参照して下さい。
この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」
を参照して下さい。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
122 頁
Ximo16A
Preliminary
16 比較命令
cmp.w Dreg16, Dreg16
cmpi.w Dreg16, IMM16
cmp.l Dreg32, Dreg32
cmp A, A
概要 :
この章では比較命令について説明します。比較命令では対象のオペランドに対して減算を行
いコンディションコードのみを更新します。16 ビットワードデータレジスタ /32 ビットロング
ワードデータレジスタ / アキュームレータレジスタにおいて実行することができます。
123 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
cmp.w Dreg16, Dreg16
Compare 16-bit data register
bit 15
0
14
1
13
0
12
0
11
0
10
1
9
0
8
0
7
Dreg
16s
Even
/Odd
6
Dreg
16d
Even
/Odd
5
4
3
Dreg16s
(Source
Dreg16#)
2
1
0
Dreg16d
(Destination
Dreg16#)
シンタックス :
cmp.w Dreg16d, Dreg16s
オペランド :
Dreg16d
Dreg16s
d0 - d15
d0 - d15
オペレーション :
Dreg16d - Dreg16s
説明 :
Dreg16d から Dreg16s を減算し、コンディションコードを更新します。Dreg16d,Dreg16s は
変更されません。
コンディションコード :
U
-
E
-
S
-
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 15 にボローが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
F: オーバーフローが発生する場合にセットされます。
例:
com.w d0, d1
before
d0
d1
st
after
0xF452
0x3011
0x0000
d0
d1
st
0xF452
0x3011
0x0008 N=1
補足 :
減算結果が書き込まれないこと以外は、ページ 103 の「sub.w Dreg16, Dreg16」と同じ動作
です。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
124 頁
Ximo16A
Preliminary
cmpi.w Dreg16, IMM16
Compare 16-bit data register with immediate
bit 15
1
14
1
13
0
12
0
11
0
10
1
9
1
8
0
7
0
6
0
5
1
4
0
3
Dreg
16d
Even
/Odd
2
1
0
Dreg16d
(Destination
Dreg16#)
IMM16
シンタックス :
cmpi.w Dreg16d, IMM16
オペランド :
Dreg16d
IMM16
d0 - d15
0 - 65535
オペレーション :
Dreg16d - Dreg16s
説明 :
Dreg16d から Dreg16s を減算し、コンディションコードを更新します。Dreg16d,Dreg16s は
変更されません。
コンディションコード :
U
-
E
-
S
-
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 15 にボローが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
F: オーバーフローが発生する場合にセットされます。
例:
cmpi.w d0, 0x3010
before
d0
st
after
0x1C3A
0x0000
d0
st
0x1C3A
0x0009 C=1,N=1
補足 :
減算結果が書き込まれないこと以外は、ページ 114 の「subi.w Dreg16, IMM16」と同じ動作
です。
125 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
cmp.l Dreg32, Dreg32
Compare 32-bit data register
bit 15
0
14
1
13
0
12
1
11
0
10
0
9
0
8
0
7
1
6
0
5
4
3
Dreg32s
(Source
Dreg32#)
2
1
0
Dreg32d
(Destination
Dreg32#)
シンタックス :
cmp.l Dreg32d, Dreg32s
オペランド :
Dreg32d
Dreg32s
d0 - d15
d0 - d15
オペレーション :
Dreg32d - Dreg32s
説明 :
Dreg32d から Dreg32s を減算し、コンディションコードを更新します。Dreg32d,Dreg32s は
変更されません。
コンディションコード :
U
-
E
-
S
-
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 31 にボローが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
F: オーバーフローが発生する場合にセットされます。
例:
com.l d1.0, d3.2
before
d1.0
d3.2
st
after
0x0051C45A
0xC5302111
0x0000
d1.0
d3.2
st
0x0051C45A
0xC5302111
0x0001 C=1
補足 :
減算結果が書き込まれないこと以外は、ページ 108 の「sub.l Dreg32, Dreg32」と同じ動作
です。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
126 頁
Ximo16A
Preliminary
cmp A, A
Compare accumulator
bit 15
1
X
14
1
X
13
1
As
a0:0
a1:1
12 11
0
P
Ad X
a0:0
a1:1
10
0
X
9
0
X
8
1
X
7
1
X
6
0
X
5
1
X
4
0
X
3
0
X
2
X
X
1
X
X
0
X
X
シンタックス :
cmp Ad, As
オペランド :
Ad
As
a0/a1
a0/a1
オペレーション :
Ad - As
説明 :
Ad から As を減算し、コンディションコードを更新します。Ad,As は変更されません。
コンディションコード :
U
-
E
S
↑↓ ↑
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 39 にボローが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: Ad にオーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の
ビット 39 がコピーされます。)
F: Ad にオーバーフローが発生する場合にセットされます。
S: 演算結果に対して飽和処理が行なわれた場合にセットされます。
E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ
れ、そうでない場合にクリアされます。
例:
cmp a0, a1
before
a0
a1
st
after
0x0510A150E3
0x1F0534C175
0x0000
a0
a1
st
0x0510A150E3
0x1F0534C175
0x0049 C=1,N=1,E=1
補足 :
減算結果が書き込まれないこと以外は、ページ 120 の「sub A, A」と同じ動作です。S ビッ
ト、E ビットも sub A, A 命令と同様の動作をしますが、この命令においては意味の有る動作で
はありません。
この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」
を参照して下さい。
127 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
17 乗算命令
mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu>
clr A, mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu>
add A, Dreg32, <s/u>, mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu>
sub A, Dreg32, <s/u>, mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu>
概要 :
この章では乗算命令について説明します。乗算命令では乗算対象のオペランドの型を指定す
るために、いくつかのオプションが存在します。
またアキュームレータを対象とするクリア / 加算 / 減算を並列に実行することが可能です。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
128 頁
Ximo16A
Preliminary
mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu>
Multiply data register
bit 15
1
X
14
1
13
1
12
0
11
P
10
0
9
0
8
0
X
X
X
Dreg
16s0
Even
/Odd
Dreg Dreg16s0
16s1 (Source0
Even Dreg16#)
/Odd
7
1
6
0
5
0
4
3
fr:00
ss:01
su:10
uu:11
X
Dreg16s1
(Source1
Dreg16#)
2
X
1
X
0
X
Dreg32d
(Destination
Dreg32#)
シンタックス :
mul Dreg32d, Dreg16s0, Dreg16s1
オペランド :
Dreg32d
Dreg16s0
Dreg16s1
d1.0 - d15.14
d0 - d15
d0 - d15
オペレーション :
Dreg32d = Dreg16s0 * Dreg16s1
説明 :
Dreg16s0 と Dreg16s1 を <fr/ss/su/uu> オプションで指示された方法で乗算し、Dreg32d へ
結果を格納します。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例:
mul d1.0, d2, d3, ss
before
d1.0
d2
d3
after
0x00000000
0x1531
0x50EC
d1.0
d2
d3
0x06B2D92C
0x1531
0x50EC
補足 :
乗算オプション <fr/ss/su/us> について
fr( 固定小数乗算 ):
1.15 符号付固定小数同士の乗算を行い、1.31 符号付固定小数の結果を得ます。この乗算では
符号付き整数の乗算結果に対して 1 ビット左シフトされた値が格納されます。
また例外的な動作として 0x8000(-1.0) と 0x8000(-1.0) の乗算を行なった場合、乗算結果は表
現できる正の最大数として 0x7FFF FFFF(0.9999999995343387126922607421875) になります。
mul d1.0, d2, d3, fr
before
d1.0
d2
d3
after
0x00000000
0xC4D1
0x9051
d1.0
d2
d3
0x33A3AC42
0xC4D1
0x9051
-0.462371826171875 (0xC4D1) * -0.872528076171875
0.403432399965822696685791015625 (0x33A3 AC42)
129 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
(0x9051)
=
2013.12.20 版
Preliminary
Ximo16A
ss( 符号付き整数乗算 ):
16 ビット符号付き整数同士の乗算を行い、32 ビット符号付き整数の結果を得ます。
mul d1.0, d2, d3, ss
before
d1.0
d2
d3
after
0x00000000
0xC4D1
0x9051
d1.0
d2
d3
0x19D1D621
0xC4D1
0x9051
-15151(0xC4D1) * -28591(0x9051) = 433182241(0x19D1 D621)
su( 符号付、符号無し整数乗算 ):
乗算の第一オペランド (Dreg16s0) を 16 ビット符号付き整数、第 2 オペランド (Dreg16s1) を
16 ビット符号無し整数として乗算し、32 ビット符号付き整数の結果を得ます。
mul d1.0, d2, d3, su
before
d1.0
d2
d3
after
0x00000000
0xC4D1
0x9051
d1.0
d2
d3
0xDEA2D621
0xC4D1
0x9051
d3 は符号無し整数として処理されます。
-15151(0xC4D1) * 36945(0x9051) = -559753695(0xDEA2 D621)
uu オプション ( 符号無し整数乗算 ):
16 ビット符号無し整数同士の乗算を行ない、32 ビット符号無し整数の結果を得ます。
mul d1.0, d2, d3, uu
before
d1.0
d2
d3
after
0x00000000
0xC4D1
0x9051
d1.0
d2
d3
0x6EF3D621
0xC4D1
0x9051
d2, d3 ともに符号無し整数として処理されます。
50385(0xC4D1) * 36945(0x9051) = 1861473825(0x6EF3 D612)
この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」
を参照して下さい。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
130 頁
Ximo16A
Preliminary
clr A, mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu>
Clear and multiply data register
bit 15
1
X
14
1
13
1
12
0
11
P
10
0
9
0
8
0
X
X
Ad Dreg Dreg Dreg16s0
a0:0 16s0 16s1 (Source0
a1:1 Even Even Dreg16#)
/Odd /Odd
7
1
6
0
5
1
4
3
fr:00
ss:01
su:10
uu:11
X
Dreg16s1
(Source1
Dreg16#)
2
X
1
X
0
X
Dreg32d
(Destination
Dreg32#)
シンタックス :
clr Ad, mul Dreg32d, Dreg16s0, Dreg16s1
オペランド :
Ad
Dreg32d
Dreg16s0
Dreg16s1
a0/a1
d1.0 - d15.14
d0 - d15
d0 - d15
オペレーション :
Ad = 0
Dreg32d = Dreg16s0 * Dreg16s1
説明 :
Ad レジスタをクリアします。
Dreg16s0 と Dreg16s1 を <fr/ss/su/uu> オプションで指示された方法で乗算し、Dreg32d へ
結果を格納します。
コンディションコード :
U
-
E
0
S
-
F
-
N
0
V
0
Z
1
C
0
C: 常にクリアされます。
Z: 常にセットされます。
V: 常にクリアされます。
N: 常にクリアされます。
E: 常にクリアされます。
例:
clr a0, mul d1.0, d2, d3, ss
before
a0
d1.0
d2
d3
st
after
0x01520005FC
0x00000000
0x1531
0x50EC
0x0000
a0
d1.0
d2
d3
st
0x0000000000
0x06B2D92C
0x1531
0x50EC
0x0002 Z=1
補足 :
乗算の動作はページ 129 の「mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu>」を参照して下さい。
この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」
を参照して下さい。
131 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
add A, Dreg32, <s/u>, mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu>
Add and multiply data register
bit 15
1
14
1
13
1
12
0
10
0
9
0
8
0
7
1
Ad Dreg Dreg Dreg16s0
a0:0 16s0 16s1 (Source0
a1:1 Even Even Dreg16#)
/Odd /Odd
s/u X
s:0
u:1
X
11
P
6
1
5
0
4
3
fr:00
ss:01
su:10
uu:11
X
Dreg16s1
(Source1
Dreg16#)
2
1
0
Dreg32s
(Source
Dreg32#)
Dreg32d
(Destination
Dreg32#)
シンタックス :
add Ad, Dreg32s, <s/u>, mul Dreg32d, Dreg16s0, Dreg16s1, <fr/ss/su/uu>
オペランド :
Ad
Dreg32s
Dreg32d
Dreg16s0
Dreg16s1
a0/a1
d1.0 - d15.14
d1.0 - d15.14
d0 - d15
d0 - d15
オペレーション :
Ad = Ad + Dreg32s
Dreg32d = Dreg16s0 * Dreg16s1
説明 :
Dreg32s を 40 ビットのアキュームレータ Ad へ加算します。<s/u> オプションで Dreg32s を
符号拡張するか、ゼロ拡張するか選択します。
Dreg16s0 と Dreg16s1 を <fr/ss/su/uu> オプションで指示された方法で乗算し、Dreg32d へ
結果を格納します。
コンディションコード :
U
-
E
S
↑↓ ↑
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 39 にキャリーが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: Ad にオーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の
ビット 39 がコピーされます。)
F: Ad にオーバーフローが発生する場合にセットされます。
S: 演算結果に対して飽和処理が行なわれた場合にセットされます。
E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ
れ、そうでない場合にクリアされます。
例:
add a0, d5.4, s, mul d1.0, d2, d3, fr
before
a0
d5.4
d1.0
d2
d3
st
2013.12.20 版
after
0x01520005FC
0xFC541065
0x00000000
0x1531
0x50EC
0x0000
a0
d5.4
d1.0
d2
d3
st
0x014E541661
0xFC541065
0x0D65B258
0x1531
0x50EC
0x0041 C=1,E=1
(C) 2009-2013 New Japan Radio Co., Ltd.
132 頁
Ximo16A
Preliminary
補足 :
コンディションコードは加算によって更新されます。
加算の動作はページ 97 の「add A, Dreg32, <s/u>」を参照して下さい。
乗算の動作はページ 129 の「mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu>」を参照して下さい。
この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」
を参照して下さい。
133 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
sub A, Dreg32, <s/u>, mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu>
Subtract and multiply data register
bit 15
1
14
1
13
1
12
0
10
0
9
0
8
0
7
1
Ad Dreg Dreg Dreg16s0
a0:0 16s0 16s1 (Source0
a1:1 Even Even Dreg16#)
/Odd /Odd
s/u X
s:0
u:1
X
11
P
6
1
5
1
4
3
fr:00
ss:01
su:10
uu:11
X
Dreg16s1
(Source1
Dreg16#)
2
1
0
Dreg32s
(Source
Dreg32#)
Dreg32d
(Destination
Dreg32#)
シンタックス :
sub Ad, Dreg32s, <s/u>, mul Dreg32d, Dreg16s0, Dreg16s1, <fr/ss/su/uu>
オペランド :
Ad
Dreg32s
Dreg32d
Dreg16s0
Dreg16s1
a0/a1
d1.0 - d15.14
d1.0 - d15.14
d0 - d15
d0 - d15
オペレーション :
Ad = Ad - Dreg32s
Dreg32d = Dreg16s0 * Dreg16s1
説明 :
Dreg32s を 40 ビットのアキュームレータ Ad から減算します。<s/u> オプションで Dreg32s
を符号拡張するか、ゼロ拡張するか選択します。
Dreg16s0 と Dreg16s1 を <fr/ss/su/uu> オプションで指示された方法で乗算し、Dreg32d へ
結果を格納します。
コンディションコード :
U
-
E
S
↑↓ ↑
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 39 にボローが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: Ad にオーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の
ビット 39 がコピーされます。)
F: Ad にオーバーフローが発生する場合にセットされます。
S: 演算結果に対して飽和処理が行なわれた場合にセットされます。
E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ
れ、そうでない場合にクリアされます。
例:
sub a0, d1.0, s, mul d1.0, d2, d3, fr
before
a0
d1.0
d2
d3
st
2013.12.20 版
after
0x01520005FC
0xFC541065
0x1531
0x50EC
0x0000
a0
d1.0
d2
d3
st
0x0155ABF597
0x0D65B258
0x1531
0x50EC
0x0041 C=1,E=1
(C) 2009-2013 New Japan Radio Co., Ltd.
134 頁
Ximo16A
Preliminary
補足 :
コンディションコードは減算によって更新されます。
減算の動作はページ 118 の「sub A, Dreg32, <s/u>」を参照して下さい。
乗算の動作はページ 129 の「mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu>」を参照して下さい。
この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」
を参照して下さい。
135 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
18 その他の算術命令
neg.w Dreg16, Dreg16, <ns/sa>
neg.l Dreg32, Dreg32, <ns/sa>
neg A, A
abs.w Dreg16, Dreg16
abs.l Dreg32, Dreg32
abs A, A
rnd.l Dreg32d, Dreg32s
rnd A, A
div Dreg32d, Dreg32s
sat A, A
clr A
概要 :
この章ではこれまでに説明の無かったその他の算術命令について説明します。2 の補数、絶
対値、四捨五入、除算サポート、飽和処理などがあります。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
136 頁
Ximo16A
Preliminary
neg.w Dreg16, Dreg16, <ns/sa>
Negate value on 16-bit data register
bit 15
0
14
1
13
0
12
0
11
0
10
1
9
1
8
7
ns:0 Dreg
sa:1 16s
Even
/Odd
6
Dreg
16d
Even
/Odd
5
4
3
Dreg16s
(Source
Dreg16#)
2
1
0
Dreg16d
(Destination
Dreg16#)
シンタックス :
neg.w Dreg16d, Dreg16s, <ns/sa>
オペランド :
Dreg16d
Dreg16s
d0 - d15
d0 - d15
オペレーション :
Dreg16d = 0 - Dreg16s
説明 :
2 の補数の値を得ます。Dreg16s をゼロから減算し、Dreg16d へ格納します。<ns/sa> オプ
ションによって演算結果に対する飽和処理の有無を選択します。
コンディションコード :
U
-
E
-
S
↑
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 15 にボローが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
F: オーバーフローが発生する場合にセットされます。
S: 演算結果に対して飽和処理が行なわれた場合にセットされます。
例 1:
neg.w d0, d1, ns
before
d0
d1
st
after
0x0000
0x1C3A
0x0000
d0
d1
st
0x0101
0x8000
0x0000
d0
d1
st
0xE3C6
0x1C3A
0x0009 C=1,N=1
例 2:
neg.w d0, d1, sa
before
d0
d1
st
after
0x7FFF
0x8000
0x003D C=1,V=1,N=1,F=1,S=1
0x8000 に対する 2 の補数はオーバーフローを起こします。sa オプションではこのケースに
対し、結果を 0x7FFF に飽和させます。C,Z,V,N,F ビットの動作は飽和処理による影響を受けま
せん。
補足 :
飽和処理が有効な場合、0x8000 に対する結果は 0x7FFF に制限されます。正しく 2 の補数が
必要な場合は、ns オプションを使用してください。
137 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
neg.l Dreg32, Dreg32, <ns/sa>
Negate value on 32-bit data register
bit 15
0
14
1
13
0
12
1
11
0
10
0
9
0
8
1
7
1
6
5
4
3
ns:0 Dreg32s
sa:1 (Source
Dreg32#)
2
1
0
Dreg32d
(Destination
Dreg32#)
シンタックス :
neg.l Dreg32d, Dreg32s, <ns/sa>
オペランド :
Dreg16d
Dreg16s
d1.0 - d15.14
d1.0 - d15.14
オペレーション :
Dreg32d = 0 - Dreg32s
説明 :
2 の補数の値を得ます。Dreg32s をゼロから減算し、Dreg32d へ格納します。<ns/sa> オプ
ションによって演算結果に対する飽和処理の有無を選択します。
コンディションコード :
U
-
E
-
S
↑
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 31 にボローが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
F: オーバーフローが発生する場合にセットされます。
S: 演算結果に対して飽和処理が行なわれた場合にセットされます。
例 1:
neg.w d0, d1, ns
before
d0
d1
st
after
0x01010101
0x1C3A1000
0x0000
d0
d1
st
0x00000000
0x80000000
0x0000
d0
d1
st
0xE3C5F000
0x1C3A1000
0x0009 C=1,N=1
例 2:
neg.w d0, d1, sa
before
d1.0
d3.2
st
after
0x7FFFFFFF
0x80000000
0x003D C=1,V=1,N=1,F=1,S=1
0x8000 0000 に対する 2 の補数はオーバーフローを起こします。sa オプションではこのケー
スに対し、結果を 0x7FFF FFFF に飽和させます。C,Z,V,N,F ビットの動作は飽和処理による影
響を受けません。
補足 :
飽和処理が有効な場合、0x8000 0000 に対する結果は 0x7FFF FFFF に制限されます。正し
く 2 の補数が必要な場合は、ns オプションを使用してください。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
138 頁
Ximo16A
Preliminary
neg A, A
Negate value on accumulator
bit 15
1
X
14
1
X
13
1
As
a0:0
a1:1
12 11
0
P
Ad X
a0:0
a1:1
10
0
X
9
0
X
8
1
X
7
1
X
6
1
X
5
0
X
4
0
X
3
0
X
2
X
X
1
X
X
0
X
X
シンタックス :
neg Ad, As
オペランド :
Ad
As
a0/a1
a0/a1
オペレーション :
Ad = 0 - As
説明 :
2 の補数の値を得ます。As をゼロから減算し、Ad へ格納します。
コンディションコード :
U
-
E
S
↑↓ ↑
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 39 にボローが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: Ad にオーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の
ビット 39 がコピーされます。)
F: Ad にオーバーフローが発生する場合にセットされます。
S: 演算結果に対して飽和処理が行なわれた場合にセットされます。
E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ
れ、そうでない場合にクリアされます。
例 1:
neg a0, a1
before
a0
a1
st
after
0x0001010101
0x321C3A1000
0x0000
a0
a1
st
0x0001010101
0x8000000000
0x0000
d0
d1
st
0xCDE3C5F000
0x321C3A1000
0x0049 E=1,C=1,N=1
例 2:
neg a0, a1
before
a0
a1
st
after
0x7FFFFFFFFF
0x8000000000
0x007D C=1,V=1,N=1,F=1,S=1,E=1
0x80 0000 0000 に対する 2 の補数はオーバーフローを起こします。この命令では結果を 0x7F
FFFF FFFF に飽和させます。C,Z,V,N,F ビットの動作は飽和処理による影響を受けません。
補足 :
0x80 0000 0000 に対する結果は 0x7F FFFF FFFF に制限されます。
139 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」
を参照して下さい。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
140 頁
Ximo16A
Preliminary
abs.w Dreg16, Dreg16
Absolute value on 16-bit data register
bit 15
0
14
1
13
0
12
0
11
0
10
1
9
0
8
1
7
Dreg
16s
Even
/Odd
6
Dreg
16d
Even
/Odd
5
4
3
Dreg16s
(Source
Dreg16#)
2
1
0
Dreg16d
(Destination
Dreg16#)
シンタックス :
abs.w Dreg16d, Dreg16s
オペランド :
Dreg16d
Dreg16s
d0 - d15
d0 - d15
オペレーション :
If (Dreg16s < 0) then
Dreg16d = 0 - Dreg16s
Else
Dreg16d = Dreg16s
Endif
説明 :
Dreg16s の絶対値を取り、Dreg16d へ格納します。
コンディションコード :
U
-
E
-
S
↑
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 15 にボローが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
F: オーバーフローが発生する場合にセットされます。
S: 演算結果に対して飽和処理が行なわれた場合にセットされます。
例 1:
abs.w d0, d1
before
d0
d1
st
after
0x0000
0xF021
0x0000
d0
d1
st
0x0000
0x8000
0x0000
d0
d1
st
0x0FDF
0xF021
0x0001 C=1
例 2:
abs.w d0, d1
before
d0
d1
st
after
0x7FFF
0x8000
0x003D C=1,V=1,N=1,F=1,S=1
0x8000 に対する 2 の補数はオーバーフローを起こします。この命令では結果を 0x7FFF に飽
和させます。C,Z,V,N,F ビットの動作は飽和処理による影響を受けません。
141 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
補足 :
0x8000 に対する結果は 0x7FFF に制限されます。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
142 頁
Ximo16A
Preliminary
abs.l Dreg32, Dreg32
Absolute value on 16-bit data register
bit 15
0
14
1
13
0
12
1
11
0
10
0
9
0
8
0
7
1
6
1
5
4
3
Dreg32s
(Source
Dreg32#)
2
1
0
Dreg32d
(Destination
Dreg32#)
シンタックス :
abs.l Dreg32d, Dreg32s
オペランド :
Dreg32d
Dreg32s
d1.0 - d15.14
d1.0 - d15.14
オペレーション :
If (Dreg32s < 0) then
Dreg32d = 0 - Dreg32s
Else
Dreg32d = Dreg32s
Endif
説明 :
Dreg32s の絶対値を取り、Dreg32d へ格納します。
コンディションコード :
U
-
E
-
S
↑
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 31 にボローが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
F: オーバーフローが発生する場合にセットされます。
S: 演算結果に対して飽和処理が行なわれた場合にセットされます。
例 1:
abs.l d1.0, d3.2
before
d1.0
d3.2
st
after
0x00000000
0xF021C555
0x0000
d1.0
d3.2
st
0x00000000
0x80000000
0x0000
d1.0
d3.2
st
0x0FDE3AAB
0xF021C555
0x0001 C=1
例 2:
abs.l d0, d1
before
d1.0
d3.2
st
after
0x7FFFFFFF
0x80000000
0x003D C=1,V=1,N=1,F=1,S=1
0x8000 0000 に対する 2 の補数はオーバーフローを起こします。この命令では結果を 0x7FFF
FFFF に飽和させます。C,Z,V,N,F ビットの動作は飽和処理による影響を受けません。
143 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
補足 :
0x8000 0000 に対する結果は 0x7FFF FFFF に制限されます。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
144 頁
Ximo16A
Preliminary
abs A, A
Absolute value on accumulator
bit 15
1
X
14
1
X
13
1
As
a0:0
a1:1
12 11
0
P
Ad X
a0:0
a1:1
10
0
X
9
0
X
8
1
X
7
1
X
6
1
X
5
0
X
4
0
X
3
1
X
2
X
X
1
X
X
0
X
X
シンタックス :
abs Ad, As
オペランド :
Ad
As
a0/a1
a0/a1
オペレーション :
If (As < 0) then
Ad = 0 - As
Else
Ad = As
Endif
説明 :
As の絶対値を取り、Ad へ格納します。
コンディションコード :
U
-
E
S
↑↓ ↑
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 39 にボローが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: Ad にオーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の
ビット 39 がコピーされます。)
F: Ad にオーバーフローが発生する場合にセットされます。
S: 演算結果に対して飽和処理が行なわれた場合にセットされます。
E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ
れ、そうでない場合にクリアされます。
例 1:
abs a0, a1
before
a0
a1
st
after
0x0001010101
0x321C3A1000
0x0000
a0
a1
st
0x0001010101
0x8000000000
0x0000
d0
d1
st
0x321C3A1000
0x321C3A1000
0x0040 E=1
例 2:
abs a0, a1
before
a0
a1
st
145 頁
after
0x7FFFFFFFFF
0x8000000000
0x007D C=1,V=1,N=1,F=1,S=1,E=1
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
0x80 0000 0000 に対する 2 の補数はオーバーフローを起こします。この命令では結果を 0x7F
FFFF FFFF に飽和させます。C,Z,V,N,F ビットの動作は飽和処理による影響を受けません。
補足 :
0x80 0000 0000 に対する結果は 0x7F FFFF FFFF に制限されます。
この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」
を参照して下さい。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
146 頁
Ximo16A
Preliminary
rnd.l Dreg32d, Dreg32s
round on 32-bit data register
bit 15
0
14
1
13
0
12
1
11
0
10
0
9
0
8
1
7
0
6
0
5
4
3
Dreg32s
(Source
Dreg32#)
2
1
0
Dreg32d
(Destination
Dreg32#)
シンタックス :
rnd.l Dreg32d, Dreg32s
オペランド :
Dreg32d
Dreg32s
d1.0 - d15.14
d1.0 - d15.14
オペレーション :
Dreg32d = Dreg32s + 0x0000 8000
Dreg32d[15:0] = 0
説明 :
Dreg32s の下位ワードを四捨五入を行い値を丸め、Dreg32d へ結果を格納します。
コンディションコード :
U
-
E
-
S
↑
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 31 にキャリーが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
F: オーバーフローが発生する場合にセットされます。
S: 演算結果に対して飽和処理が行なわれた場合にセットされます。
例 1:
rnd.l d1.0, d3.2
before
d1.0
d3.2
st
after
0x00000000
0xF021C555
0x0000
d1.0
d3.2
st
0x00000000
0x7FFFD000
0x0000
d1.0
d3.2
st
0xF0220000
0xF021C555
0x0008 N=1
例 2:
rnd.l d1.0, d2.3
before
d1.0
d3.2
st
after
0x7FFF0000
0x7FFFD000
0x003C V=1,N=1,F=1,S=1
0x7FFF 8000 から 0x7FFF FFFF に対する丸めではオーバーフローが発生します。この命令
では結果を 0x7FFF 0000 に制限します。C,Z,V,N,F ビットの動作は飽和処理による影響を受け
ません。
補足 :
0x7FFF 8000 - 0x7FFF FFFF に対する結果は 0x7FFF 0000 に制限されます。
147 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
rnd A, A
round on accumulator
bit 15
1
X
14
1
X
13
1
As
a0:0
a1:1
12 11
0
P
Ad X
a0:0
a1:1
10
0
X
9
0
X
8
1
X
7
1
X
6
1
X
5
0
X
4
1
X
3
1
X
2
X
X
1
X
X
0
X
X
シンタックス :
rnd Ad, As
オペランド :
Ad
As
a0/a1
a0/a1
オペレーション :
Ad = As + 0x00 0000 8000
Ad[15:0] = 0
説明 :
As の下位ワードを四捨五入を行い値を丸め、Ad へ結果を格納します。
コンディションコード :
U
-
E
S
↑↓ ↑
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: ビット 39 にキャリーが発生する場合にセットされ、そうでない場合にクリアされます。
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
V: Ad にオーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の
ビット 39 がコピーされます。)
F: Ad にオーバーフローが発生する場合にセットされます。
S: 演算結果に対して飽和処理が行なわれた場合にセットされます。
E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ
れ、そうでない場合にクリアされます。
例 1:
rnd a0, a0
before
a0
st
after
0x0023808322
0x0000
a0
st
0x7FFFFFA053
0x0000
a0
st
0x0023810000
0x0000
例 2:
rnd a0, a0
before
a0
st
after
0x7FFFFF0000
0x007C V=1,N=1,F=1,S=1,E=1
0x7F FFFF 8000 から 0x7F FFFF FFFF に対する丸めではオーバーフローが発生します。こ
の命令では結果を 0x7F FFFF 0000 に制限します。C,Z,V,N,F ビットの動作は飽和処理による影
響を受けません。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
148 頁
Ximo16A
Preliminary
補足 :
0x7F FFFF 8000 - 0x7F FFFF FFFF に対する結果は 0x7F FFFF 0000 に制限されます。
この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」
を参照して下さい。
149 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
div Dreg32d, Dreg32s
Step of divide
bit 15
0
14
1
13
0
12
1
11
0
10
0
9
0
8
1
7
0
6
1
5
4
3
Dreg32s
(Source
Dreg32#)
2
1
0
Dreg32d
(Destination
Dreg32#)
シンタックス :
div Dreg32d, Dreg32s
オペランド :
Dreg32d
Dreg32s
d1.0 - d15.14
d1.0 - d15.14
オペレーション :
If (C_old == 1) then
Dreg32d_new[31:16] = Dreg32d_old[31:16] + Dreg32s[15:0]
Else
Dreg32d_new[31:16] = Dreg32d_old[31:16] - Dreg32s[15:0]
Endif
Dreg32d_new[15:0] = Dreg32d_old[15:0]
C_new = Dreg32d_new[31] ^ Dreg32s[15]
Dreg32d_new = Dreg32d_new << 1
If ( C_new == 0 ) then
Dreg32d_new[0] = 1
Endif
説明 :
非回復法除算による除算を1 ビット分行ないます。この命令を16 回連続して実行することで、
Dreg32d にセットされた被除数と Dreg32s の下位ワードによる除算を行ないます。Dreg32s
の上位ワード ( ビット 31 から 16) はこの命令の動作に影響を与えません。商は Dreg32d の下位
ワードに現れます。
コンディションコード :
U
-
E
-
S
-
F
↑
N
V
Z
↑↓ ↑↓ -
C
↑↓
C: 演算結果の左シフト前のビット 31 と Dreg32s のビット 15 の排他的論理和を取った値が設定
されます。
V: 命令動作の 1 ビットの左シフトによって Dreg32d の MSB の値が変化する場合にセットされ、
そうでない場合にクリアされます。( 除算によるオーバーフローを表します。)
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
F: V ビットがセットされる場合にセットされます。
例:
div d1.0, d3.2
before
d1.0
d3.2
st
2013.12.20 版
after
0x61C0A93C
0x00005B53
0x0000
d1.0
d3.2
st
0x0CDB5279
0x00008B53
0x0000
(C) 2009-2013 New Japan Radio Co., Ltd.
150 頁
Ximo16A
Preliminary
補足 :
除算の実行手順について
正の固定小数に対する除算 :
固定小数点の除算では 1.31 固定小数を 1.15 固定小数によって除算し、1.15 固定小数の商を
得ます。
固 定 小 数 の 除 算、0 . 0 7 4 5 8 2 2 7 5 0 0 3 1 9 4 8 0 8 9 5 9 9 6 0 9 3 7 5 0 0 0 ( 0 x 0 9 8 B E 9 7 8 ) /
0.142211914062500 (0x1234) = 0.524444580078125(0x4321) を実行する場合、次のように div
命令を使用します。
# 被除数の初期化
movi.w d1, 0x098B
movi.w d0, 0xE978
# 除数の初期化
movi.w d2, 0x1234
#C ビットをゼロに初期化
movi.w cc, 0
loopi c0, _LABEL, 16
# div 命令 x16
div d1.0, d3.2
_LABEL
before
d1.0
d3.2
st
after
0x098BE978
0x00001234
0x0000
d1.0
d3.2
st
0x00104321
0x00001234
0x0000
商はディスティネーションレジスタの下位ワードに得られます。
正の整数に対する除算 :
整数の除算では被除数をあらかじめ左に 1 ビットシフトすることで正しい商が得られます。
整数除算、50231(0xC437) / 55(0x37) = 913(0x391) を行なう場合、次のように div 命令を使
用します。
# 被除数の初期化
movi.w d1, 0x0000
movi.w d0, 0xC437
movi.w d2, 0x0037 # 除数の初期化
lsli.l d1.0, 1
# 左シフトによる桁補正
#C ビットをゼロに初期化
movi.w cc, 0
loopi c0, _LABEL, 16
div d1.0, d3.2
#div 命令 x16
_LABEL
before
d1.0
d3.2
st
after
0x0000C437
0x00000037
0x0000
d1.0
d3.2
st
0x00200391
0x00000037
0x0000
商はディスティネーションレジスタの下位ワードに得られます。
151 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
sat A, A
Saturate accumulator
bit 15
1
X
14
1
X
13
1
As
a0:0
a1:1
12 11
0
P
Ad X
a0:0
a1:1
10
0
X
9
0
X
8
1
X
7
1
X
6
1
X
5
0
X
4
1
X
3
0
X
2
X
X
1
X
X
0
X
X
シンタックス :
sat Ad, As
オペランド :
Ad
As
a0/a1
a0/a1
オペレーション :
Ad = saturate(As)
説明 :
As の内容が 32 ビット長の型符号付きの数で表現できない場合に値を飽和させ、Ad へ結果を
格納します。
コンディションコード :
U
-
E
-
S
↑
F
-
N
-
V
-
Z
-
C
-
S: 演算結果に対して飽和処理が行なわれた場合にセットされます。
例:
sat a0, a0
before
a0
st
after
0x8123808322
0x0000
a0
st
0x007FFFA053
0x0000
a0
st
0xFF80000000
0x0020
例 2:
sat a0, a0
before
a0
st
after
0x007FFFA053
0x0000
補足 :
飽和処理の詳細については「6.3 飽和処理と丸め処理」を参照して下さい。
この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」
を参照して下さい。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
152 頁
Ximo16A
Preliminary
clr A
Clear accumulator
bit 15
1
X
14
1
X
13
1
X
12 11
0
P
Ad X
a0:0
a1:1
10
0
X
9
0
X
8
1
X
7
1
X
6
1
X
5
1
X
4
0
X
3
1
X
2
X
X
1
X
X
0
X
X
シンタックス :
clr Ad
オペランド :
Ad
a0/a1
オペレーション :
Ad = 0
説明 :
Ad レジスタをクリアします。
コンディションコード :
U
-
E
0
S
-
F
-
N
0
V
0
Z
1
C
0
C: 常にクリアされます。
Z: 常にセットされます。
V: 常にクリアされます。
N: 常にクリアされます。
E: 常にクリアされます。
例:
clr a0, mul d1.0, d2, d3, ss
before
a0
st
after
0x01520005FC
0x0000
a0
st
0x0000000000
0x0002 Z=1
補足 :
この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」
を参照して下さい。
153 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
19 論理演算命令
and.w Dreg16, Dreg16
andi.w Dreg16, IMM16
or.w Dreg16, Dreg16
ori.w Dreg16, IMM16
eor.w Dreg16, Dreg16
eori.w Dreg16, IMM16
com.w Dreg16, Dreg16
概要 :
この章では論理演算命令について説明します。論理演算命令は 16 ビットワードのデータレ
ジスタに対して実行でき、論理和、論理積、排他的論理和、論理否定の操作を行なうことができ
ます。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
154 頁
Ximo16A
Preliminary
and.w Dreg16, Dreg16
Logical AND on 16-bit data register
bit 15
0
14
1
13
0
12
0
11
1
10
0
9
0
8
0
7
Dreg
16s
Even
/Odd
6
Dreg
16d
Even
/Odd
5
4
3
Dreg16s
(Source
Dreg16#)
2
1
0
Dreg16d
(Destination
Dreg16#)
シンタックス :
and.w Dreg16d, Dreg16s
オペランド :
Dreg16d
Dreg16s
d0 - d15
d0 - d15
オペレーション :
Dreg16d = Dreg16d & Dreg16s
説明 :
Dreg16d と Dreg16s の論理和を取り、Dreg16d へ結果を格納します。
コンディションコード :
U
-
E
-
S
-
F
-
N
V
↑↓ -
Z
C
↑↓ -
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
例:
and.w d1, d0
before
d1
d0
st
155 頁
after
0xFF00
0xAA55
0x0000
d1
d0
st
0xAA00
0xAA55
0x0008 N=1
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
andi.w Dreg16, IMM16
Logical AND on 16-bit data register with immediate
bit 15
1
14
1
13
0
12
0
11
0
10
1
9
1
8
0
7
0
6
1
5
0
4
0
3
Dreg
16d
Even
/Odd
2
1
0
Dreg16d
(Destination
Dreg16#)
IMM16
シンタックス :
andi.w Dreg16d, IMM16
オペランド :
Dreg16d
IMM16
d0 - d15
0 - 65535
オペレーション :
Dreg16d = Dreg16d & IMM16
説明 :
Dreg16d と IMM16 の論理和を取り、Dreg16d へ結果を格納します。
コンディションコード :
U
-
E
-
S
-
F
-
N
V
↑↓ -
Z
C
↑↓ -
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
例:
andi.w d1, 0xAA55
before
d1
st
2013.12.20 版
after
0xFF00
0x0000
d1
st
0xAA00
0x0008 N=1
(C) 2009-2013 New Japan Radio Co., Ltd.
156 頁
Ximo16A
Preliminary
or.w Dreg16, Dreg16
Logical OR on 16-bit data register
bit 15
0
14
1
13
0
12
0
11
1
10
0
9
0
8
1
7
Dreg
16s
Even
/Odd
6
Dreg
16d
Even
/Odd
5
4
3
Dreg16s
(Source
Dreg16#)
2
1
0
Dreg16d
(Destination
Dreg16#)
シンタックス :
or.w Dreg16d, Dreg16s
オペランド :
Dreg16d
Dreg16s
d0 - d15
d0 - d15
オペレーション :
Dreg16d = Dreg16d | Dreg16s
説明 :
Dreg16d と Dreg16s の論理積を取り、Dreg16d へ結果を格納します。
コンディションコード :
U
-
E
-
S
-
F
-
N
V
↑↓ -
Z
C
↑↓ -
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
例:
or.w d1, d0
before
d1
d0
st
157 頁
after
0xFF00
0xAA55
0x0000
d1
d0
st
0xFF55
0xAA55
0x0008 N=1
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
ori.w Dreg16, IMM16
Logical OR on 16-bit data register with immediate
bit 15
1
14
1
13
0
12
0
11
0
10
1
9
1
8
0
7
0
6
1
5
0
4
1
3
Dreg
16d
Even
/Odd
2
1
0
Dreg16d
(Destination
Dreg16#)
IMM16
シンタックス :
ori.w Dreg16d, IMM16
オペランド :
Dreg16d
IMM16
d0 - d15
0 - 65535
オペレーション :
Dreg16d = Dreg16d | IMM16
説明 :
Dreg16d と IMM16 の論理和を取り、Dreg16d へ結果を格納します。
コンディションコード :
U
-
E
-
S
-
F
-
N
V
↑↓ -
Z
C
↑↓ -
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
例:
ori.w d1, 0xAA55
before
d1
st
2013.12.20 版
after
0xFF00
0x0000
d1
st
0xFF55
0x0008 N=1
(C) 2009-2013 New Japan Radio Co., Ltd.
158 頁
Ximo16A
Preliminary
eor.w Dreg16, Dreg16
Logical exclusive OR on 16-bit data register
bit 15
0
14
1
13
0
12
0
11
1
10
0
9
1
8
0
7
Dreg
16s
Even
/Odd
6
Dreg
16d
Even
/Odd
5
4
3
Dreg16s
(Source
Dreg16#)
2
1
0
Dreg16d
(Destination
Dreg16#)
シンタックス :
eor.w Dreg16d, Dreg16s
オペランド :
Dreg16d
Dreg16s
d0 - d15
d0 - d15
オペレーション :
Dreg16d = Dreg16d ^ Dreg16s
説明 :
Dreg16d と Dreg16s の排他的論理和を取り、Dreg16d へ結果を格納します。
コンディションコード :
U
-
E
-
S
-
F
-
N
V
↑↓ -
Z
C
↑↓ -
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
例:
eor.w d1, d0
before
d1
d0
st
159 頁
after
0xFF00
0xAA55
0x0000
d1
d0
st
0x5555
0xAA55
0x0000
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
eori.w Dreg16, IMM16
Logical exclusive OR on 16-bit data register with immediate
bit 15
1
14
1
13
0
12
0
11
0
10
1
9
1
8
0
7
0
6
1
5
1
4
0
3
Dreg
16d
Even
/Odd
2
1
0
Dreg16d
(Destination
Dreg16#)
IMM16
シンタックス :
eori.w Dreg16d, IMM16
オペランド :
Dreg16d
IMM16
d0 - d15
0 - 65535
オペレーション :
Dreg16d = Dreg16d ^ IMM16
説明 :
Dreg16d と IMM16 の排他的論理和を取り、Dreg16d へ結果を格納します。
コンディションコード :
U
-
E
-
S
-
F
-
N
V
↑↓ -
Z
C
↑↓ -
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
例:
eori.w d1, 0xAA55
before
d1
st
2013.12.20 版
after
0xFF00
0x0000
d1
st
0x5555
0x0080
(C) 2009-2013 New Japan Radio Co., Ltd.
160 頁
Ximo16A
Preliminary
com.w Dreg16, Dreg16
1
s complement value
bit 15
0
14
1
13
0
12
0
11
1
10
0
9
1
8
1
7
Dreg
16s
Even
/Odd
6
Dreg
16d
Even
/Odd
5
4
3
Dreg16s
(Source
Dreg16#)
2
1
0
Dreg16d
(Destination
Dreg16#)
シンタックス :
com.w Dreg16d, Dreg16s
オペランド :
Dreg16d
Dreg16s
d0 - d15
d0 - d15
オペレーション :
Dreg16d = ~Dreg16s
説明 :
Dreg16s のビットを反転し、Dreg16d へ結果を格納します。
コンディションコード :
U
-
E
-
S
-
F
-
N
V
↑↓ -
Z
C
↑↓ -
Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
例:
com.w d1, d1
before
d1
st
161 頁
after
0xFF00
0x0000
d1
st
0x00FF
0x0000
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
20 ビット操作命令
bset Dreg16, IMM4
bset (IMM16), IMM4
bclr Dreg16, IMM4
bclr (IMM16), IMM4
btgl Dreg16, IMM4
btst Dreg16, IMM4
btst (IMM16), IMM4
概要 :
この章ではビット操作命令について説明します。ビット操作命令ではオペランド内の即値で
指定される 1 ビットに対してのみ操作を行ないます。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
162 頁
Ximo16A
Preliminary
bset Dreg16, IMM4
Test set on 16-bit data register
bit 15
0
14
1
13
1
12
0
11
0
10
0
9
0
8
0
7
6
5
4
IMM4(0 to 15)
3
Dreg
16d
Even
/Odd
2
1
0
Dreg16d
(Destination
Dreg16#)
シンタックス :
bset Dreg16d, IMM4
オペランド :
Dreg16d
IMM4
d0 - d15
0 - 15
オペレーション :
Dreg16d = Dreg16d | (2IMM4)
説明 :
Dreg16d の IMM4 フィールドによって指示されるビットをセットします。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
C
↑↓ ↑↓
C: 指示されるビットの変更前の値が 1 の場合にセットされ、0 の場合にクリアされます。
Z: 指示されるビットの変更前の値が 0 の場合にセットされ、1 の場合にクリアされます。
例:
bset d3, 3
before
d1
st
163 頁
after
0x0000
0x0000
d1
st
0x0008
0x0002 Z=1
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
bclr Dreg16, IMM4
Bit clear on 16-bit data register
bit 15
0
14
1
13
1
12
0
11
0
10
0
9
0
8
1
7
6
5
4
IMM4(0 to 15)
3
Dreg
16d
Even
/Odd
2
1
0
Dreg16d
(Destination
Dreg16#)
シンタックス :
bclr Dreg16d, IMM4
オペランド :
Dreg16d
IMM4
d0 - d15
0 - 15
オペレーション :
Dreg16d = Dreg16d & ~(2IMM4)
説明 :
Dreg16d の IMM4 フィールドによって指示されるビットをクリアします。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
C
↑↓ ↑↓
C: 指示されるビットの変更前の値が 1 の場合にセットされ、0 の場合にクリアされます。
Z: 指示されるビットの変更前の値が 0 の場合にセットされ、1 の場合にクリアされます。
例:
bclr d3, 3
before
d1
st
2013.12.20 版
after
0xFFFF
0x0000
d1
st
0xFFF7
0x0001 C=1
(C) 2009-2013 New Japan Radio Co., Ltd.
164 頁
Ximo16A
Preliminary
btgl Dreg16, IMM4
Bit toggle on 16-bit data register
bit 15
0
14
1
13
1
12
0
11
0
10
0
9
1
8
0
7
6
5
4
IMM4(0 to 15)
3
Dreg
16d
Even
/Odd
2
1
0
Dreg16d
(Destination
Dreg16#)
シンタックス :
btgl Dreg16d, IMM4
オペランド :
Dreg16d
IMM4
d0 - d15
0 - 15
オペレーション :
Dreg16d = Dreg16d ^ (2IMM4)
説明 :
Dreg16d の IMM4 フィールドによって指示されるビットを反転します。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
C
↑↓ ↑↓
C: 指示されるビットの変更前の値が 1 の場合にセットされ、0 の場合にクリアされます。
Z: 指示されるビットの変更前の値が 0 の場合にセットされ、1 の場合にクリアされます。
例:
btgl d3, 3
before
d1
st
165 頁
after
0xFFFF
0x0000
d1
st
0xFFF7
0x0001 C=1
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
btst Dreg16, IMM4
Bit test on 16-bit data register
bit 15
0
14
1
13
1
12
0
11
0
10
0
9
1
8
1
7
6
5
4
IMM4(0 to 15)
3
Dreg
16d
Even
/Odd
2
1
0
Dreg16d
(Destination
Dreg16#)
シンタックス :
btst Dreg16d, IMM4
オペランド :
Dreg16d
IMM4
d0 - d15
0 - 15
オペレーション :
C = Dreg16d & (2IMM4)
Z = !( Dreg16d & (2IMM4) )
説明 :
Dreg16d の IMM4 フィールドによって指示されるビットを評価し、コンディションコードを
更新します。Dreg16d の値は更新されません。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
C
↑↓ ↑↓
C: 指示されるビットの値が 1 の場合にセットされ、0 の場合にクリアされます。
Z: 指示されるビットの値が 0 の場合にセットされ、1 の場合にクリアされます。
例:
btst d3, 3
before
d1
st
2013.12.20 版
after
0x000F
0x0000
d1
st
0x000F
0x0001 C=1
(C) 2009-2013 New Japan Radio Co., Ltd.
166 頁
Ximo16A
Preliminary
bset (IMM16), IMM4
Bit set on memory
bit 15 14
1
1
IMM16
13
0
12
1
11
0
10
0
9
0
8
0
7
1
6
0
5
0
4
0
3
2
IMM4
1
0
シンタックス :
bset (IMM16), IMM4
オペランド :
IMM16
IMM4
0x0000 - 0xFFFF
0 - 15
オペレーション :
MEM[IMM16] = MEM[IMM16] | (2IMM4)
説明 :
IMM16 の示すアドレスのメモリオペランドに対して、IMM4 フィールドによって指示される
ビットをセットします。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
C
↑↓ ↑↓
C: 指示されるビットの変更前の値が 1 の場合にセットされ、0 の場合にクリアされます。
Z: 指示されるビットの変更前の値が 0 の場合にセットされ、1 の場合にクリアされます。
例:
bset (0x0055), 3
before
MEM[0x0055]
st
after
0x0000
0x0000
MEM[0x0055]
st
0x0008
0x0002 Z=1
補足 :
ペリフェラルに対するビット操作を目的とした命令です。この命令はストアバッファのオン
/ オフに関わらずバスアクセスの順序性が保証されます。
167 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
bclr (IMM16), IMM4
Bit clear on memory
bit 15 14
1
1
IMM16
13
0
12
1
11
0
10
0
9
0
8
0
7
1
6
0
5
0
4
1
3
2
IMM4
1
0
シンタックス :
bclr (IMM16), IMM4
オペランド :
IMM16
IMM4
0x0000 - 0xFFFF
0 - 15
オペレーション :
MEM[IMM16] = MEM[IMM16] & ~(2IMM4)
説明 :
IMM16 の示すアドレスのメモリオペランドに対して、IMM4 フィールドによって指示される
ビットをクリアします。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
C
↑↓ ↑↓
C: 指示されるビットの変更前の値が 1 の場合にセットされ、0 の場合にクリアされます。
Z: 指示されるビットの変更前の値が 0 の場合にセットされ、1 の場合にクリアされます。
例:
bclr (0x0055), 3
before
MEM[0x0055]
st
after
0xFFFF
0x0000
MEM[0x0055]
st
0xFFF7
0x0001 C=1
補足 :
ペリフェラルに対するビット操作を目的とした命令です。この命令はストアバッファのオン
/ オフに関わらずバスアクセスの順序性が保証されます。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
168 頁
Ximo16A
Preliminary
btst (IMM16), IMM4
Bit test on memory
bit 15 14
1
1
IMM16
13
0
12
1
11
0
10
0
9
0
8
0
7
1
6
0
5
1
4
1
3
2
IMM4
1
0
シンタックス :
btst (IMM16), IMM4
オペランド :
Dreg16d
IMM4
d0 - d15
0 - 15
オペレーション :
C = MEM[IMM16] & (2IMM4)
Z = !( MEM[IMM16] & (2IMM4) )
説明 :
IMM16 の示すアドレスのメモリオペランドに対して、指示されるビットを評価し、コンディ
ションコードを更新します。メモリの値は更新されません。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
C
↑↓ ↑↓
C: 指示されるビットの値が 1 の場合にセットされ、0 の場合にクリアされます。
Z: 指示されるビットの値が 0 の場合にセットされ、1 の場合にクリアされます。
例:
btst (0x0055), 3
before
MEM[0x0055]
st
after
0x000F
0x0000
MEM[0x0055]
st
0x000F
0x0001 C=1
補足 :
ペリフェラルに対するビット操作を目的とした命令です。この命令はストアバッファのオン
/ オフに関わらずバスアクセスの順序性が保証されます。
169 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
21 シフト命令
asl.w Dreg16, Dreg16
asr.w Dreg16, Dreg16
asli.w Dreg16, IMM4
asri.w Dreg16, IMM4
asl.l Dreg32, Dreg32
asr.l Dreg32, Dreg32
asli.l Dreg32, IMM4
asri.l Dreg32, IMM4
asl A, Dreg32
asr A, Dreg32
asli A, IMM4
asri A, IMM4
lsl.w Dreg16, Dreg16
lsr.w Dreg16, Dreg16
lsli.w Dreg16, IMM4
lsri.w Dreg16, IMM4
lsl.l Dreg32, Dreg32
lsr.l Dreg32, Dreg32
lsli.l Dreg32, IMM4
lsri.l Dreg32, IMM4
lsl A, Dreg32
lsr A, Dreg32
lsli A, IMM4
lsri A, IMM4
rol.w Dreg16
ror.w Dreg16
概要 :
この章ではシフト命令について説明します。シフト命令には算術左 / 算術右 / 論理左 / 論理右
シフトがあり、それぞれ、16 ビットデータレジスタ /32 ビットデータレジスタ / アキュームレー
タレジスタを対象とした版があります。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
170 頁
Ximo16A
Preliminary
asl.w Dreg16, Dreg16
Arithmetic left shift 16-bit data register by register
bit 15
0
14
1
13
0
12
0
11
1
10
1
9
0
8
0
7
Dreg
16s
Even
/Odd
6
Dreg
16d
Even
/Odd
5
4
3
Dreg16s
(Source
Dreg16#)
2
1
0
Dreg16d
(Destination
Dreg16#)
シンタックス :
asl.w Dreg16d, Dreg16s
オペランド :
Dreg16d
Dreg16s
d0 - d15
d0 - d15
オペレーション :
Dreg16d = Dreg16d << Dreg16s[4:0]
説明 :
Dreg16d の値を Dreg16s の下位 5 ビットで指示されるビット数だけ左シフトします。シフト
結果がオーバーフローする場合には飽和処理を行なってから Dreg16d に格納します。
コンディションコード :
U
-
E
-
S
↑
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ
トの場合はクリアされます。
Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。
V: 左シフトの結果がオーバーフローする場合にセットされ、そうで無い場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
F: 左シフトの結果がオーバーフローする場合にセットされます。
S: 演算結果に対して飽和処理が行なわれた場合にセットされます。
例 1:
asl.w d0, d1
before
d0
d1
st
after
0x0AAA
0x0003
0x0000
d0
d1
st
0x5D01
0x0002
0x0000
d0
d1
st
0x5550
0x0003
0x0000
例 2:
asl.w d0, d1
before
d0
d1
st
after
0x7FFF
0x0002
0x0035 C=1,V=1,F=1,S=1
0x5D01 の 2 ビット左シフト 0x7404(0x1 7404) はオーバーフローとして、正の最大値 0x7FFF
へ飽和処理されます。C,Z,V,N,F ビットの動作は飽和処理による影響を受けません。
補足 :
シフト量として有効な値は 0 ∼ 16 です。16 以上の値をシフト量として使用した場合の結果
は不定です。
171 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
この命令はシフト結果がオーバーフローする場合、結果を最小 0x8000、最大 0x7FFF に飽和
させます。飽和処理が必要でない場合は lsl 版を使用して下さい。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
172 頁
Ximo16A
Preliminary
asli.w Dreg16, IMM4
Arithmetic left shift 16-bit data register by immediate
bit 15
0
14
1
13
0
12
1
11
1
10
0
9
0
8
0
7
6
5
4
IMM4(0 to 15)
3
Dreg
16s
Even
/Odd
2
1
0
Dreg16d
(Destination
Dreg16#)
シンタックス :
asli.w Dreg16d, IMM4
オペランド :
Dreg16d
IMM4
d0 - d15
0 - 15
オペレーション :
Dreg16d = Dreg16d << IMM4
説明 :
Dreg16d の値を IMM4 で指示されるビット数だけ左シフトします。シフト結果がオーバーフ
ローする場合には飽和処理を行なってから Dreg16d に格納します。
コンディションコード :
U
-
E
-
S
↑
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ
トの場合はクリアされます。
Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。
V: 左シフトの結果がオーバーフローする場合にセットされ、そうで無い場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
F: 左シフトの結果がオーバーフローする場合にセットされます。
S: 演算結果に対して飽和処理が行なわれた場合にセットされます。
例:
asli.w d0, 1
before
d0
st
after
0x0A56
0x0000
d0
st
0x14AC
0x0000
補足:
IMM4 フィールドで指示できる値は 0 ∼ 15 ですが、シフト量として 0 を指定した場合は 16
ビットシフトとなります。よってこの命令でシフト可能なビット数は 1 ∼ 16 ビットです。
その他の動作は asl.w 版と同様です。
173 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
asl.l Dreg32, Dreg32
Arithmetic shift left 32-bit data register by register
bit 15
0
14
1
13
0
12
1
11
0
10
0
9
1
8
0
7
0
6
0
5
4
3
Dreg32s
(Source
Dreg32#)
2
1
0
Dreg32d
(Destination
Dreg32#)
シンタックス :
asl.l Dreg32d, Dreg32s
オペランド :
Dreg32d
Dreg32s
d1.0 - d15.14
d1.0 - d15.14
オペレーション :
Dreg32d = Dreg32d << Dreg32s[4:0]
説明 :
Dreg32d の値を Dreg32s の下位 5 ビットで指示されるビット数だけ左シフトします。シフト
結果がオーバーフローする場合には飽和処理を行なってから Dreg32d に格納します。
コンディションコード :
U
-
E
-
S
↑
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ
トの場合はクリアされます。
Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。
V: 左シフトの結果がオーバーフローする場合にセットされ、そうで無い場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
F: 左シフトの結果がオーバーフローする場合にセットされます。
S: 演算結果に対して飽和処理が行なわれた場合にセットされます。
例 1:
asl.l d1.0, d3.2
before
d1.0
d3.2
st
after
0x0A5680C1
0x00000002
0x0000
d1.0
d3.2
st
0x8031AB01
0x00000001
0x0000
d1.0
d3.2
st
0x295A0304
0x00000002
0x0000
例 2:
asl.l d1.0, d3.2
before
d1.0
d3.2
st
after
0x80000000
0x00000001
0x0035 C=1,V=1,F=1,S=1
0x8031 AB01 の 1 ビット左シフト 0x0063 5602(0x1 0063 5602) はオーバーフローとして、
0x8000 0000 へ飽和処理されます。C,Z,V,N,F ビットの動作は飽和処理による影響を受けません。
補足 :
シフト量として有効な値は 0 ∼ 16 までです。16 以上の値をシフト量として使用した場合の
結果は不定です。
この命令はシフト結果がオーバーフローする場合、結果を最小 0x8000 0000、最大 0x7FFF
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
174 頁
Ximo16A
Preliminary
FFFF に飽和させます。飽和処理が不要な場合は lsl 版を使用して下さい。
175 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
asli.l Dreg32, IMM4
Arithmetic shift left 32-bit data register by immediate
bit 15
0
14
1
13
0
12
1
11
1
10
1
9
0
8
0
7
6
5
4
IMM4(0 to 15)
3
X
2
1
0
Dreg32d
(Destination
Dreg32#)
シンタックス :
asli.l Dreg32d, IMM4
オペランド :
Dreg16d
IMM4
d1.0 - d15.14
0 - 15
オペレーション :
Dreg32d = Dreg32d << IMM4
説明 :
Dreg32d の値を IMM4 で指示されるビット数だけ左シフトします。シフト結果がオーバーフ
ローする場合には飽和処理を行なってから Dreg32d に格納します。
コンディションコード :
U
-
E
-
S
↑
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ
トの場合はクリアされます。
Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。
V: 左シフトの結果がオーバーフローする場合にセットされ、そうで無い場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
F: 左シフトの結果がオーバーフローする場合にセットされます。
S: 演算結果に対して飽和処理が行なわれた場合にセットされます。
例:
asli.l d1.0, 2
before
d1.0
st
after
0x0A5680C1
0x0000
d1.0
st
0x295A0304
0x0000
補足:
IMM4 フィールドで指示できる値は 0 ∼ 15 ですが、シフト量として 0 を指定した場合は 16
ビットシフトとなります。よってこの命令でシフト可能なビット数は 1 ∼ 16 ビットです。
その他の動作は asl.l 版と同様です。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
176 頁
Ximo16A
Preliminary
asl A, Dreg32
Arithmetic shift left accumulator by register
bit 15
1
X
14
1
13
1
12
0
11
P
X
X
Ad X
a0:0
a1:1
10
0
9
0
8
1
7
0
6
0
5
1
4
0
3
0
X
X
X
X
X
X
X
X
2
1
0
Dreg32s
(Source
Dreg32#)
X
X
X
シンタックス :
asl Ad, Dreg32s
オペランド :
Ad
Dreg32s
a0/a1
d1.0 - d15.14
オペレーション :
Ad = Ad << Dreg32s[4:0]
説明 :
40 ビットのアキュームレータ Ad の値を Dreg32s の下位 5 ビットで指示されるビット数だけ
左シフトします。シフト結果がオーバーフローする場合には飽和処理を行なってから Ad に格納
します。
コンディションコード :
U
-
E
S
↑↓ ↑
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ
トの場合はクリアされます。
Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。
V: 左シフトの結果がオーバーフローする場合にセットされ、そうで無い場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の
ビット 39 がコピーされます。)
F: 左シフトの結果がオーバーフローする場合にセットされます。
S: 演算結果に対して飽和処理が行なわれた場合にセットされます。
E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ
れ、そうでない場合にクリアされます。
例 1:
asl a0, d1.0
before
a0
d1.0
st
after
0xFF9A507B23
0x00000003
0x0000
a0
d1.0
st
0x109A507B23
0x00000003
0x0000
d1
d0
st
0xFCD283D918
0x00000003
0x0049 C=1,N=1,E=1
例 2:
asl d0, d1.0
before
d0
d1
st
after
0x7FFFFFFFFF
0x00000003
0x007C V=1,N=1,F=1,S=1,E=1
0x10 9A50 7B23 の 3 ビット左シフト 0x84 D283 D918 はオーバーフローとして、正の最大
値 0x7F FFFF FFFF へ飽和処理されます。C,Z,V,N,F ビットの動作は飽和処理による影響を受け
177 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
ません。
補足 :
シフト量として有効な値は 0 ∼ 16 です。16 以上の値をシフト量として使用した場合の結果
は不定です。
この命令はシフト結果がオーバーフローする場合、結果を最小 0x80 0000 0000、最大 0x7F
FFFF FFFF に飽和させます。飽和処理が必要でない場合は lsl 版を使用して下さい。
この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」
を参照して下さい。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
178 頁
Ximo16A
Preliminary
asli A, IMM4
Arithmetic shift left accumulator by immediate
bit 15
1
X
14
1
X
13
1
X
12 11
0
P
Ad X
a0:0
a1:1
10
0
X
9
0
X
8
1
X
7
0
X
6
1
X
5
0
X
4
0
X
3
2
1
0
0
X
X
X
IMM4(0 to 15)
シンタックス :
asli Ad, IMM4
オペランド :
Ad
IMM4
a0/a1
0 - 15
オペレーション :
Ad = Ad << IMM4
説明 :
40 ビットのアキュームレータ Ad の値を IMM4 フィールドで指示されるビット数だけ左シフ
トします。シフト結果がオーバーフローする場合には飽和処理を行なってから Ad に格納します。
コンディションコード :
U
-
E
S
↑↓ ↑
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ
トの場合はクリアされます。
Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。
V: 左シフトの結果がオーバーフローする場合にセットされ、そうで無い場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の
ビット 39 がコピーされます。)
F: 左シフトの結果がオーバーフローする場合にセットされます。
S: 演算結果に対して飽和処理が行なわれた場合にセットされます。
E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ
れ、そうでない場合にクリアされます。
例:
asli a0, 3
before
a0
st
after
0xFF9A507B23
0x0000
a0
st
0xFCD283D918
0x0049 C=1,N=1,E=1
補足 :
IMM4 フィールドで指示できる値は 0 ∼ 15 ですが、シフト量として 0 を指定した場合は 16
ビットシフトとなります。よってこの命令でシフト可能なビット数は 1 ∼ 16 ビットです。
その他の動作は asl 版と同様です。
この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」
を参照して下さい。
179 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
asr.w Dreg16, Dreg16
Arithmetic shift right 16-bit data register by register
bit 15
0
14
1
13
0
12
0
11
1
10
1
9
0
8
1
7
Dreg
16s
Even
/Odd
6
Dreg
16d
Even
/Odd
5
4
3
Dreg16s
(Source
Dreg16#)
2
1
0
Dreg16d
(Destination
Dreg16#)
シンタックス :
asr.w Dreg16d, Dreg16s
オペランド :
Dreg16d
Dreg16s
d0 - d15
d0 - d15
オペレーション :
Dreg16d = Dreg16d >> Dreg16s[4:0]
説明 :
Dreg16d の値を Dreg16s の下位 5 ビットで指示されるビット数だけ算術右シフトします。
コンディションコード :
U
-
E
-
S
-
F
-
N
V
↑↓ 0
Z
C
↑↓ ↑↓
C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ
トの場合はクリアされます。
Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。
V: 常にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
例:
asr.w d0, d1
before
d0
d1
st
after
0x8006
0x0003
0x0000
d0
d1
st
0xF000
0x0003
0x0009 C=1,N=1
補足 :
シフトによって空いた左端のビット位置は、元の符号ビット値によって埋め戻されます。
シフト量として有効な値は 0 ∼ 16 です。16 以上の値をシフト量として使用した場合の結果
は不定です。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
180 頁
Ximo16A
Preliminary
asri.w Dreg16, IMM4
Arithmetic shift right 16-bit data register by immediate
bit 15
0
14
1
13
0
12
1
11
1
10
0
9
0
8
1
7
6
5
4
IMM4(0 to 15)
3
Dreg
16s
Even
/Odd
2
1
0
Dreg16d
(Destination
Dreg16#)
シンタックス :
asri.w Dreg16d, IMM4
オペランド :
Dreg16d
IMM4
d0 - d15
0 - 15
オペレーション :
Dreg16d = Dreg16d >> IMM4
説明 :
Dreg16d の値を IMM4 フィールドで指示されるビット数だけ算術右シフトします。
コンディションコード :
U
-
E
-
S
-
F
-
N
V
↑↓ 0
Z
C
↑↓ ↑↓
C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ
トの場合はクリアされます。
Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。
V: 常にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
例:
asri.w d0, 3
before
d0
st
after
0x8006
0x0000
d0
st
0xF000
0x0009 C=1,N=1
補足 :
シフトによって空いた左端のビット位置は、元の符号ビット値によって埋め戻されます。
IMM4 フィールドで指示できる値は 0 ∼ 15 ですが、シフト量として 0 を指定した場合は 16
ビットシフトとなります。よってこの命令でシフト可能なビット数は 1 ∼ 16 ビットです。
181 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
asr.l Dreg32, Dreg32
Arithmetic shift right 32-bit data register by register
bit 15
0
14
1
13
0
12
1
11
0
10
0
9
1
8
0
7
0
6
1
5
4
3
Dreg32s
(Source
Dreg32#)
2
1
0
Dreg32d
(Destination
Dreg32#)
シンタックス :
asr.l Dreg32d, Dreg32s
オペランド :
Dreg32d
Dreg32s
d1.0 - d15.14
d1.0 - d15.14
オペレーション :
Dreg32d = Dreg32d >> Dreg32s[4:0]
説明 :
Dreg32d の値を Dreg32s の下位 5 ビットで指示されるビット数だけ算術右シフトします。
コンディションコード :
U
-
E
-
S
-
F
-
N
V
↑↓ 0
Z
C
↑↓ ↑↓
C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ
トの場合はクリアされます。
Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。
V: 常にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
例:
asr.l d1.0, d3.2
before
d1.0
d3.2
st
after
0x80060001
0x00000003
0x0000
d1.0
d3.2
st
0xF000C000
0x00000003
0x0008 N=1
補足 :
シフトによって空いた左端のビット位置は、元の符号ビット値によって埋め戻されます。
シフト量として有効な値は 0 ∼ 16 です。16 以上の値をシフト量として使用した場合の結果
は不定です。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
182 頁
Ximo16A
Preliminary
asri.l Dreg32, IMM4
Arithmetic shift left 32-bit data register by immediate
bit 15
0
14
1
13
0
12
1
11
1
10
1
9
0
8
1
7
6
5
4
IMM4(0 to 15)
3
X
2
1
0
Dreg32d
(Destination
Dreg32#)
シンタックス :
asri.l Dreg32d, IMM4
オペランド :
Dreg32d
IMM4
d1.0 - d15.14
0 - 15
オペレーション :
Dreg32d = Dreg32d >> IMM4
説明 :
Dreg32d の値を IMM4 フィールドで指示されるビット数だけ算術右シフトします。
コンディションコード :
U
-
E
-
S
-
F
-
N
V
↑↓ 0
Z
C
↑↓ ↑↓
C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ
トの場合はクリアされます。
Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。
V: 常にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
例:
asri.l d1.0, 3
before
d1.0
st
after
0x80060000
0x0000
d1.0
st
0xF000C000
0x0008 N=1
補足 :
シフトによって空いた左端のビット位置は、元の符号ビット値によって埋め戻されます。
IMM4 フィールドで指示できる値は 0 ∼ 15 ですが、シフト量として 0 を指定した場合は 16
ビットシフトとなります。よってこの命令でシフト可能なビット数は 1 ∼ 16 ビットです。
183 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
asr A, Dreg32
Arithmetic shift right accumulator by register
bit 15
1
X
14
1
13
1
12
0
11
P
X
X
Ad X
a0:0
a1:1
10
0
9
0
8
1
7
0
6
0
5
1
4
0
3
1
X
X
X
X
X
X
X
X
2
1
0
Dreg32s
(Source
Dreg32#)
X
X
X
シンタックス :
asr Ad, Dreg32s
オペランド :
Ad
Dreg32s
a0/a1
d1.0 - d15.14
オペレーション :
Ad = Ad >> Dreg32s[4:0]
説明 :
Ad の値を Dreg32s の下位 5 ビットで指示されるビット数だけ算術右シフトします。
コンディションコード :
U
-
E
S
↑↓ -
F
-
N
V
↑↓ 0
Z
C
↑↓ ↑↓
C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ
トの場合はクリアされます。
Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。
V: 常にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ
れ、そうでない場合にクリアされます。
例:
asr a1, d3.2
before
a1
d3.2
st
after
0x0680060004
0x00000003
0x0000
a1
d3.2
st
0x00D000C000
0x00000003
0x0041 C=1,E=1
補足 :
シフトによって空いた左端のビット位置は、元の符号ビット値によって埋め戻されます。
シフト量として有効な値は 0 ∼ 16 です。16 以上の値をシフト量として使用した場合の結果
は不定です。
この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」
を参照して下さい。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
184 頁
Ximo16A
Preliminary
asri A, IMM4
Arithmetic shift right accumulator by immediate
bit 15
1
X
14
1
X
13
1
X
12 11
0
P
Ad X
a0:0
a1:1
10
0
X
9
0
X
8
1
X
7
0
X
6
1
X
5
0
X
4
0
X
3
2
1
0
1
X
X
X
IMM4(0 to 15)
シンタックス :
asri Ad, IMM4
オペランド :
Ad
IMM4
a0/a1
0 - 15
オペレーション :
Ad = Ad >> IMM4
説明 :
Ad の値を IMM4 フィールドで指示されるビット数だけ算術右シフトします。
コンディションコード :
U
-
E
S
↑↓ -
F
-
N
V
↑↓ 0
Z
C
↑↓ ↑↓
C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ
トの場合はクリアされます。
Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。
V: 常にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ
れ、そうでない場合にクリアされます。
例:
asri a1, 3
before
a1
st
after
0x0680060004
0x0000
a1
st
0x00D000C000
0x0041 C=1,E=1
補足 :
シフトによって空いた左端のビット位置は、元の符号ビット値によって埋め戻されます。
IMM4 フィールドで指示できる値は 0 ∼ 15 ですが、シフト量として 0 を指定した場合は 16
ビットシフトとなります。よってこの命令でシフト可能なビット数は 1 ∼ 16 ビットです。
この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」
を参照して下さい。
185 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
lsl.w Dreg16, Dreg16
logical left shift 16-bit data register by register
bit 15
0
14
1
13
0
12
0
11
1
10
1
9
1
8
0
7
Dreg
16s
Even
/Odd
6
Dreg
16d
Even
/Odd
5
4
3
Dreg16s
(Source
Dreg16#)
2
1
0
Dreg16d
(Destination
Dreg16#)
シンタックス :
lsl.w Dreg16d, Dreg16s
オペランド :
Dreg16d
Dreg16s
d0 - d15
d0 - d15
オペレーション :
Dreg16d = Dreg16d << Dreg16s[4:0]
説明 :
Dreg16d の値を Dreg16s の下位 5 ビットで指示されるビット数だけ左シフトします。
コンディションコード :
U
-
E
-
S
-
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ
トの場合はクリアされます。
Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。
V: 左シフトの結果がオーバーフローする場合にセットされ、そうで無い場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
F: 左シフトの結果がオーバーフローする場合にセットされます。
例:
lsl.w d0, d1
before
d0
d1
st
after
0x5D01
0x0002
0x0000
d0
d1
st
0x7404
0x0002
0x0015 C=1,V=1,F=1
補足 :
シフト量として有効な値は 0 ∼ 16 です。16 以上の値をシフト量として使用した場合の結果
は不定です。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
186 頁
Ximo16A
Preliminary
lsli.w Dreg16, IMM4
Logical left shift 16-bit data register by immediate
bit 15
0
14
1
13
0
12
1
11
1
10
0
9
1
8
0
7
6
5
4
IMM4(0 to 15)
3
Dreg
16s
Even
/Odd
2
1
0
Dreg16d
(Destination
Dreg16#)
シンタックス :
lsli.w Dreg16d, IMM4
オペランド :
Dreg16d
IMM4
d0 - d15
0 - 15
オペレーション :
Dreg16d = Dreg16d << IMM4
説明 :
Dreg16d の値を IMM4 で指示されるビット数だけ左シフトします。
コンディションコード :
U
-
E
-
S
-
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ
トの場合はクリアされます。
Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。
V: 左シフトの結果がオーバーフローする場合にセットされ、そうで無い場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
F: 左シフトの結果がオーバーフローする場合にセットされます。
例:
lsli.w d0, 1
before
d0
st
after
0x0A56
0x0000
d0
st
0x14AC
0x0000
補足:
IMM4 フィールドで指示できる値は 0 ∼ 15 ですが、シフト量として 0 を指定した場合は 16
ビットシフトとなります。よってこの命令でシフト可能なビット数は 1 ∼ 16 ビットです。
その他の動作は lsl.w 版と同様です。
187 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
lsl.l Dreg32, Dreg32
Logical shift left 32-bit data register by register
bit 15
0
14
1
13
0
12
1
11
0
10
0
9
1
8
0
7
1
6
0
5
4
3
Dreg32s
(Source
Dreg32#)
2
1
0
Dreg32d
(Destination
Dreg32#)
シンタックス :
lsl.l Dreg32d, Dreg32s
オペランド :
Dreg32d
Dreg32s
d1.0 - d15.14
d1.0 - d15.14
オペレーション :
Dreg32d = Dreg32d << Dreg32s[4:0]
説明 :
Dreg32d の値を Dreg32s の下位 5 ビットで指示されるビット数だけ左シフトします。
コンディションコード :
U
-
E
-
S
↑
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ
トの場合はクリアされます。
Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。
V: 左シフトの結果がオーバーフローする場合にセットされ、そうで無い場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
F: 左シフトの結果がオーバーフローする場合にセットされます。
S: 演算結果に対して飽和処理が行なわれた場合にセットされます。
例:
lsl.l d1.0, d3.2
before
d1.0
d3.2
st
after
0x0A5680C1
0x00000002
0x0000
d1.0
d3.2
st
0x295A0304
0x00000002
0x0000
補足 :
シフト量として有効な値は 0 ∼ 16 までです。16 以上の値をシフト量として使用した場合の
結果は不定です。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
188 頁
Ximo16A
Preliminary
lsli.l Dreg32, IMM4
Logical shift left 32-bit data register by immediate
bit 15
0
14
1
13
0
12
1
11
1
10
1
9
1
8
0
7
6
5
4
IMM4(0 to 15)
3
X
2
1
0
Dreg32d
(Destination
Dreg32#)
シンタックス :
lsli.l Dreg32d, IMM4
オペランド :
Dreg16d
IMM4
d1.0 - d15.14
0 - 15
オペレーション :
Dreg32d = Dreg32d << IMM4
説明 :
Dreg32d の値を IMM4 で指示されるビット数だけ左シフトします。
コンディションコード :
U
-
E
-
S
-
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ
トの場合はクリアされます。
Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。
V: 左シフトの結果がオーバーフローする場合にセットされ、そうで無い場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
F: 左シフトの結果がオーバーフローする場合にセットされます。
例:
lsli.l d1.0, 2
before
d1.0
st
after
0x0A5680C1
0x0000
d1.0
st
0x295A0304
0x0000
補足:
IMM4 フィールドで指示できる値は 0 ∼ 15 ですが、シフト量として 0 を指定した場合は 16
ビットシフトとなります。よってこの命令でシフト可能なビット数は 1 ∼ 16 ビットです。
その他の動作は lsl.l 版と同様です。
189 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
lsl A, Dreg32
Logical shift left accumulator by register
bit 15
1
X
14
1
13
1
12
0
11
P
X
X
Ad X
a0:0
a1:1
10
0
9
0
8
1
7
0
6
0
5
1
4
1
3
0
X
X
X
X
X
X
X
X
2
1
0
Dreg32s
(Source
Dreg32#)
X
X
X
シンタックス :
lsl Ad, Dreg32s
オペランド :
Ad
Dreg32s
a0/a1
d1.0 - d15.14
オペレーション :
Ad = Ad << Dreg32s[4:0]
説明 :
40 ビットのアキュームレータ Ad の値を Dreg32s の下位 5 ビットで指示されるビット数だけ
左シフトします。
コンディションコード :
U
-
E
S
↑↓ -
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ
トの場合はクリアされます。
Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。
V: 左シフトの結果がオーバーフローする場合にセットされ、そうで無い場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の
ビット 39 がコピーされます。)
F: 左シフトの結果がオーバーフローする場合にセットされます。
E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ
れ、そうでない場合にクリアされます。
例:
lsl a0, d1.0
before
a0
d1.0
st
after
0xFF9A507B23
0x00000003
0x0000
a0
d1.0
st
0xFCD283D918
0x00000003
0x0049 C=1,N=1,E=1
補足 :
シフト量として有効な値は 0 ∼ 16 です。16 以上の値をシフト量として使用した場合の結果
は不定です。
この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」
を参照して下さい。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
190 頁
Ximo16A
Preliminary
lsli A, IMM4
Logical shift left accumulator by immediate
bit 15
1
X
14
1
X
13
1
X
12 11
0
P
Ad X
a0:0
a1:1
10
0
X
9
0
X
8
1
X
7
0
X
6
1
X
5
0
X
4
1
X
3
2
1
0
0
X
X
X
IMM4(0 to 15)
シンタックス :
lsli Ad, IMM4
オペランド :
Ad
IMM4
a0/a1
0 - 15
オペレーション :
Ad = Ad << IMM4
説明 :
40 ビットのアキュームレータ Ad の値を IMM4 フィールドで指示されるビット数だけ左シフ
トします。
コンディションコード :
U
-
E
S
↑↓ -
F
↑
N
V
Z
C
↑↓ ↑↓ ↑↓ ↑↓
C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ
トの場合はクリアされます。
Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。
V: 左シフトの結果がオーバーフローする場合にセットされ、そうで無い場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の
ビット 39 がコピーされます。)
F: 左シフトの結果がオーバーフローする場合にセットされます。
E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ
れ、そうでない場合にクリアされます。
例:
lsl a0, 3
before
a0
st
after
0xFF9A507B23
0x0000
a0
st
0xFCD283D918
0x0049 C=1,N=1,E=1
補足 :
IMM4 フィールドで指示できる値は 0 ∼ 15 ですが、シフト量として 0 を指定した場合は 16
ビットシフトとなります。よってこの命令でシフト可能なビット数は 1 ∼ 16 ビットです。
その他の動作は lsl 版と同様です。
この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」
を参照して下さい。
191 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
lsr.w Dreg16, Dreg16
Logical shift right 16-bit data register by register
bit 15
0
14
1
13
0
12
0
11
1
10
1
9
1
8
1
7
Dreg
16s
Even
/Odd
6
Dreg
16d
Even
/Odd
5
4
3
Dreg16s
(Source
Dreg16#)
2
1
0
Dreg16d
(Destination
Dreg16#)
シンタックス :
lsr.w Dreg16d, Dreg16s
オペランド :
Dreg16d
Dreg16s
d0 - d15
d0 - d15
オペレーション :
Dreg16d = Dreg16d >> Dreg16s[4:0]
説明 :
Dreg16d の値を Dreg16s の下位 5 ビットで指示されるビット数だけ論理右シフトします。
コンディションコード :
U
-
E
-
S
-
F
-
N
V
↑↓ 0
Z
C
↑↓ ↑↓
C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ
トの場合はクリアされます。
Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。
V: 常にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
例:
lsr.w d0, d1
before
d0
d1
st
after
0x8006
0x0003
0x0000
d0
d1
st
0x1000
0x0003
0x0001 C=1
補足 :
シフトによって空いた左端のビット位置は、0 によって埋め戻されます。
シフト量として有効な値は 0 ∼ 16 です。16 以上の値をシフト量として使用した場合の結果
は不定です。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
192 頁
Ximo16A
Preliminary
lsri.w Dreg16, IMM4
Logical shift right 16-bit data register by immediate
bit 15
0
14
1
13
0
12
1
11
1
10
0
9
1
8
1
7
6
5
4
IMM4(0 to 15)
3
Dreg
16s
Even
/Odd
2
1
0
Dreg16d
(Destination
Dreg16#)
シンタックス :
lsri.w Dreg16d, IMM4
オペランド :
Dreg16d
IMM4
d0 - d15
0 - 15
オペレーション :
Dreg16d = Dreg16d >> IMM4
説明 :
Dreg16d の値を IMM4 フィールドで指示されるビット数だけ論理右シフトします。
コンディションコード :
U
-
E
-
S
-
F
-
N
V
↑↓ 0
Z
C
↑↓ ↑↓
C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ
トの場合はクリアされます。
Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。
V: 常にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
例:
lsri.w d0, 3
before
d0
st
after
0x8006
0x0000
d0
st
0x1000
0x0001 C=1
補足 :
シフトによって空いた左端のビット位置は、0 によって埋め戻されます。
IMM4 フィールドで指示できる値は 0 ∼ 15 ですが、シフト量として 0 を指定した場合は 16
ビットシフトとなります。よってこの命令でシフト可能なビット数は 1 ∼ 16 ビットです。
193 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
lsr.l Dreg32, Dreg32
Logical shift right 32-bit data register by register
bit 15
0
14
1
13
0
12
1
11
0
10
0
9
1
8
0
7
1
6
1
5
4
3
Dreg32s
(Source
Dreg32#)
2
1
0
Dreg32d
(Destination
Dreg32#)
シンタックス :
lsr.l Dreg32d, Dreg32s
オペランド :
Dreg32d
Dreg32s
d1.0 - d15.14
d1.0 - d15.14
オペレーション :
Dreg32d = Dreg32d >> Dreg32s[4:0]
説明 :
Dreg32d の値を Dreg32s の下位 5 ビットで指示されるビット数だけ論理右シフトします。
コンディションコード :
U
-
E
-
S
-
F
-
N
V
↑↓ 0
Z
C
↑↓ ↑↓
C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ
トの場合はクリアされます。
Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。
V: 常にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ
れ、そうでない場合にクリアされます。
例:
lsr.l d1.0, d3.2
before
d1.0
d3.2
st
after
0x80060001
0x00000003
0x0000
d1.0
d3.2
st
0x1000C000
0x00000003
0x0000
補足 :
シフトによって空いた左端のビット位置は、0 によって埋め戻されます。
シフト量として有効な値は 0 ∼ 16 です。16 以上の値をシフト量として使用した場合の結果
は不定です。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
194 頁
Ximo16A
Preliminary
lsri.l Dreg32, IMM4
Logical shift left 32-bit data register by immediate
bit 15
0
14
1
13
0
12
1
11
1
10
1
9
1
8
1
7
6
5
4
IMM4(0 to 15)
3
X
2
1
0
Dreg32d
(Destination
Dreg32#)
シンタックス :
lsri.l Dreg32d, IMM4
オペランド :
Dreg32d
IMM4
d1.0 - d15.14
0 - 15
オペレーション :
Dreg32d = Dreg32d >> IMM4
説明 :
Dreg32d の値を IMM4 フィールドで指示されるビット数だけ論理右シフトします。
コンディションコード :
U
-
E
-
S
-
F
-
N
V
↑↓ 0
Z
C
↑↓ ↑↓
C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ
トの場合はクリアされます。
Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。
V: 常にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
例:
lsri.l d1.0, 3
before
d1.0
st
after
0x80060000
0x0000
d1.0
st
0x1000C000
0x0000
補足 :
シフトによって空いた左端のビット位置は、0 によって埋め戻されます。
IMM4 フィールドで指示できる値は 0 ∼ 15 ですが、シフト量として 0 を指定した場合は 16
ビットシフトとなります。よってこの命令でシフト可能なビット数は 1 ∼ 16 ビットです。
195 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
lsr A, Dreg32
Logical shift right accumulator by register
bit 15
1
X
14
1
13
1
12
0
11
P
X
X
Ad X
a0:0
a1:1
10
0
9
0
8
1
7
0
6
0
5
1
4
1
3
1
X
X
X
X
X
X
X
X
2
1
0
Dreg32s
(Source
Dreg32#)
X
X
X
シンタックス :
lsr Ad, Dreg32s
オペランド :
Ad
Dreg32s
a0/a1
d1.0 - d15.14
オペレーション :
Ad = Ad >> Dreg32s[4:0]
説明 :
Ad の値を Dreg32s の下位 5 ビットで指示されるビット数だけ論理右シフトします。
コンディションコード :
U
-
E
S
↑↓ -
F
-
N
V
↑↓ 0
Z
C
↑↓ ↑↓
C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ
トの場合はクリアされます。
Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。
V: 常にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ
れ、そうでない場合にクリアされます。
例:
lsr a1, d3.2
before
a1
d3.2
st
after
0x0680060004
0x00000003
0x0000
a1
d3.2
st
0x00D000C000
0x00000003
0x0041 C=1,E=1
補足 :
シフトによって空いた左端のビット位置は、0 によって埋め戻されます。
シフト量として有効な値は 0 ∼ 16 です。16 以上の値をシフト量として使用した場合の結果
は不定です。
この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」
を参照して下さい。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
196 頁
Ximo16A
Preliminary
lsri A, IMM4
Logical shift right accumulator by immediate
bit 15
1
X
14
1
X
13
1
X
12 11
0
P
Ad X
a0:0
a1:1
10
0
X
9
0
X
8
1
X
7
0
X
6
1
X
5
0
X
4
1
X
3
2
1
0
1
X
X
X
IMM4(0 to 15)
シンタックス :
lsri Ad, IMM4
オペランド :
Ad
IMM4
a0/a1
0 - 15
オペレーション :
Ad = Ad >> IMM4
説明 :
Ad の値を IMM4 フィールドで指示されるビット数だけ論理右シフトします。
コンディションコード :
U
-
E
S
↑↓ -
F
-
N
V
↑↓ 0
Z
C
↑↓ ↑↓
C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ
トの場合はクリアされます。
Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。
V: 常にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ
れ、そうでない場合にクリアされます。
例:
lsri a1, 3
before
a1
st
after
0x0680060004
0x0000
a1
st
0x00D000C000
0x0041 C=1,E=1
補足 :
シフトによって空いた左端のビット位置は、0 によって埋め戻されます。
IMM4 フィールドで指示できる値は 0 ∼ 15 ですが、シフト量として 0 を指定した場合は 16
ビットシフトとなります。よってこの命令でシフト可能なビット数は 1 ∼ 16 ビットです。
この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」
を参照して下さい。
197 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
rol.w Dreg16
Rotate left through carry
bit 15
0
14
1
13
0
12
1
11
0
10
1
9
1
8
0
7
X
6
X
5
X
4
X
3
Dreg
16d
Even
/Odd
2
1
Dreg16d
(Destination
Dreg16#)
シンタックス :
rol.w Dreg16d
オペランド :
Dreg16d
d0 - d15
オペレーション :
Dreg16d[0] = C, Dreg16d[15:0] = Dreg16d[14:1], C = Dreg16d[15]
説明 :
16 ビットデータレジスタをキャリービットと共に 1 ビット左回転します。
コンディションコード :
U
-
E
-
S
-
F
-
N
V
↑↓ -
Z
C
↑↓ ↑↓
C: 回転によって Dreg16d からあふれるビットがコピーされます。
Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
例:
rol.w d7
before
d7
st
2013.12.20 版
after
0x4000
0x0001 C=1
d7
st
0x8001
0x0008 C=0,N=1
(C) 2009-2013 New Japan Radio Co., Ltd.
198 頁
Ximo16A
Preliminary
ror.w Dreg16
Rotate right through carry
bit 15
0
14
1
13
0
12
1
11
0
10
1
9
1
8
1
7
X
6
X
5
X
4
X
3
Dreg
16d
Even
/Odd
2
1
0
Dreg16d
(Destination
Dreg16#)
シンタックス :
ror.w Dreg16d
オペランド :
Dreg16d
d0 - d15
オペレーション :
Dreg16d[15] = C, Dreg16d[14:0] = Dreg16d[15:1], C = Dreg16d[0]
説明 :
16 ビットデータレジスタをキャリービットと共に 1 ビット右回転します。
コンディションコード :
U
-
E
-
S
-
F
-
N
V
↑↓ -
Z
C
↑↓ ↑↓
C: 回転によって Dreg16d からあふれるビットがコピーされます。
Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。
N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。
例:
rol.w d7
before
d7
st
199 頁
after
0xC001
0x0001 C=1
d7
st
0xE000
0x0009 C=1,N=1
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
22 プログラムフロー制御命令 / 特殊命令
nop
dnop
jmp Preg
jmp IMM16, <condition>
call Preg
call IMM16
bra IMM7, <condition>
loop Creg, IMM16
loopi Creg, IMM16, IMM8
ret
rti
rtf
ftrap
trap
debug
sleep
ccp <condition>
lea (Preg)
概要 :
この章ではプログラムフロー制御命令及びその他の命令について説明します。プログラムフ
ロー制御命令は jmp/bra/call/loop/ret/trap/rti 命令などがあり、意図的にプログラムの実行フロー
を変更します。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
200 頁
Ximo16A
Preliminary
nop
No operation
bit 15
0
14
0
13
0
12
0
11
0
10
0
9
0
8
0
7
0
6
0
5
0
4
0
3
0
2
0
1
0
0
0
シンタックス :
nop
オペランド :
-
-
オペレーション :
pc = pc + 1
説明 :
pc をインクリメントします。
コンディションコード :
U
-
201 頁
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
dnop
No operation (2)
bit 15
1
X
14
1
X
13
1
X
12
0
X
11
P
X
10
0
X
9
1
X
8
1
X
7
X
X
6
X
X
5
X
X
4
X
X
3
X
X
2
X
X
1
X
X
0
X
X
シンタックス :
dnop
オペランド :
-
-
オペレーション :
pc = pc + 2
説明 :
pc をインクリメント (+2) します。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
補足 :
2 ワード版の nop です。この命令は並列転送命令を取ることが出来ます。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
202 頁
Ximo16A
Preliminary
jmp Preg
Jump
bit 15
0
14
0
13
0
12
0
11
0
10
0
9
0
8
0
7
0
6
0
5
0
4
0
3
1
2
1
Pregs
Preg#
0
シンタックス :
Jmp Pregs
オペランド :
Pointer
p0 - p5/fp/sp
オペレーション :
pc = Pregs
説明 :
Pregs の値を pc に代入しプログラムの流れを変更します。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例:
jmp p4
before
p4
pc
203 頁
after
0xC001
0x1101
d7
pc
0xC001
0xC001
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
jmp IMM16, <condition>
Conditional jump
bit 15 14
1
1
IMM16
13
0
12
1
11
0
10
0
9
0
8
0
7
0
6
0
5
0
4
3
2
conditon
1
0
シンタックス :
Jmp IMM16, <condition>
オペランド :
IMM16
0x0000 - 0xFFFF
オペレーション :
If (condition == true) then
pc = IMM16
Else
pc = pc + 2
Endif
説明 :
condition フィールドにより指示された条件が成り立っている場合に、IMM16 で示される値を
pc へ代入してプログラムの流れを変更します。
条件が成立しない場合は次の命令を実行します。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例:
jmp 0x1000, cs
before
st
pc
2013.12.20 版
after
0x0001 C=1
0x1101
st
pc
0x0001
0x1000
(C) 2009-2013 New Japan Radio Co., Ltd.
204 頁
Ximo16A
Preliminary
call Preg
Call subroutine
bit 15
0
14
0
13
0
12
0
11
0
10
0
9
0
8
0
7
0
6
0
5
0
4
1
3
0
2
1
Pregs
Preg#
0
シンタックス :
call Pregs
オペランド :
Pregs
p0 - p5/fp
オペレーション :
sp = sp - 1
MEM[sp] = pc + 1
pc = Pregs
説明 :
サブルーチンの呼び出しを実行します。戻りアドレスとして次命令のアドレスをスタックに
プッシュした後に、Pregs の値を pc に代入しプログラムの流れを変更します。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例:
call p0
before
p0
pc
st
MEM[0xF021]
205 頁
after
0x2000
0x1101
0xF022
0x0000
p0
pc
st
MEM[0xF021]
0x2000
0x2000
0xF021
0x1102
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
call IMM16
Call subroutine
bit 15 14
1
1
IMM16
13
0
12
1
11
0
10
0
9
0
8
0
7
0
6
0
5
1
4
X
3
X
2
X
1
X
0
X
シンタックス :
call IMM16
オペランド :
IMM16
0x0000 - 0xFFFF
オペレーション :
sp = sp - 1
MEM[sp] = pc + 2
pc = IMM16
説明 :
サブルーチンの呼び出しを実行します。戻りアドレスとして次命令のアドレスをスタックに
プッシュした後に、IMM16 の値を pc に代入しプログラムの流れを変更します。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例:
call 0x2000
before
pc
st
MEM[0xF021]
2013.12.20 版
after
0x1101
0xF022
0x0000
pc
st
MEM[0xF021]
0x2000
0xF021
0x1103
(C) 2009-2013 New Japan Radio Co., Ltd.
206 頁
Ximo16A
Preliminary
bra IMM7, <condition>
Conditional branch
bit 15
1
14
0
13
0
12
0
11 10 9
8
IMM7(-64 to 63)
7
6
5
4
3
2
condition
1
0
シンタックス :
bra IMM7, <condition>
オペランド :
IMM7
-64 - 63
オペレーション :
If (condition == true) then
pc = pc + IMM7
Else
pc = pc + 1
Endif
説明 :
condition フィールドにより指示された条件が成り立っている場合に、pc へ符号付 7 ビット
のオフセットを加算してプログラムの流れを変更します。
条件が成立しない場合は次の命令を実行します。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例:
bra 0x10, cs
before
st
pc
207 頁
after
0x0001 C=1
0x1101
st
pc
0x0001
0x1111
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
loop Creg, IMM16
Loop setup
bit 15
1
14
1
13
0
12
1
11
0
10
0
9
1
8
7
Creg X
c0:0
c1:1
6
X
5
X
4
X
3
X
2
X
1
X
0
X
IMM16
シンタックス :
Loop Creg, IMM16
オペランド :
Creg
IMM16
c0/c1
0x0000-0xFFFF
オペレーション :
Sreg = pc + 2
Ereg = IMM16
説明 :
ハードウェアループの設定を行い、ループを実行します。ループ設定用のレジスタは c0/s0/
e0、c1/s1/e1 が組になっており、Creg で指定した方の Ereg,Sreg に値を設定します。
この命令ではループ実行したい回数をあらかじめ Creg にセットし、この命令よりも上位の
アドレスをループの終わりのアドレスとして IMM16 に指定します。この命令の次の命令から、
アドレス IMM16 の直前の命令までを、分岐のオーバーヘッド無く繰り返し実行します。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例:
loop c0, 0x1500
before
s0
e0
pc
after
0x0000
0x0000
0x1101
s0
e0
pc
0x1103
0x1500
0x1103
補足 :
ハードウェアは実行番地がループの終わりのアドレス (Ereg にセットされた番地 ) に達した
とき、ループカウンタ Creg がゼロで無い場合、これをデクリメントし、ループ先頭アドレス
(Sreg にセットされた番地 ) に分岐します。
2 つのループコンテキスト、c0/s0/e0 と c1/s1/e1 とを利用して 2 重ループの実行を行なう場
合に、ループの最後アドレス (e0/e1) が同じ値の場合、c0/s0/e0 の側をループの内側に設定して
ください。c0 のカウンタのデクリメントが優先されます。
Creg の値を 0 に設定した場合、ループ内部を 1 度だけ実行してループを抜けます。
ループ内の最後の命令には次の命令を置く事は出来ません。実行結果は不定となります。
bra IMM7, <condition> / jmp IMM16, <condition> / jmp Preg
call Preg / call IMM16
trap / ftrap / ret / rti / rtf
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
208 頁
Ximo16A
Preliminary
ループ最後の命令が 64 ビット (4 ワード ) のアライメントを跨いで配置される場合、ループ
先頭への分岐には 1 システムクロックのペナルティが発生します ( 演算結果に影響はありません
)。
単一の命令の繰り返しなどでこのペナルティが問題になる場合、.align 擬似命令を用いてア
ライメントを保障して下さい。
#-----------------------------------------------------#
...
bra _loopstart, al
.align 4
#=> 4 ワードアライメントの保障
dnop
#=> 2 ワード命令
_loopstart:
loop c0, _loopend
#=>2 ワード命令
add.w d3, d1, d0 : mov.w (p1+), d3 : mov.w d0, (p1+)
#=> 4 ワード命令
_loopend:
...
#-----------------------------------------------------#
209 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
loopi Creg, IMM16, IMM8
Loop setup by immediate
bit 15
1
14
1
13
0
12
1
11
0
10
1
9
0
8
7
6
5
4
Creg IMM8(0 to 255)
c0:0
c1:1
3
2
1
0
IMM16
シンタックス :
Loopi Creg, IMM16, IMM8
オペランド :
Creg
IMM16
IMM8
c0/c1
0x0000-0xFFFF
0 - 255
オペレーション :
Creg = IMM8
Sreg = pc + 2
Ereg = IMM16
説明 :
ハードウェアループの設定を行い、ループを実行します。ループ設定用のレジスタは c0/s0/
e0、c1/s1/e1 が組になっており、Creg で指定した方の Creg,Ereg,Sreg に値を設定します。
この命令ではループ実行したい回数を即値で指定します。255 回までの固定回数ループが 1
命令で設定できます。この命令よりも上位のアドレスをループの終わりのアドレスとして
IMM16 に指定します。この命令の次の命令から、アドレス IMM16 の直前の命令までを、分岐の
オーバーヘッド無く繰り返し実行します。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例:
loopi c0, 0x1500, 0xF
before
c0
s0
e0
pc
after
0x0000
0x0000
0x0000
0x1101
c0
s0
e0
pc
0x000F
0x1103
0x1500
0x1103
補足 :
ループの実行回数を命令フィールド中の即値で指定する以外は loop 命令と同様の動作です。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
210 頁
Ximo16A
Preliminary
ret
Return from subroutine
bit 15
0
14
0
13
0
12
0
11
0
10
0
9
0
8
0
7
0
6
0
5
1
4
0
3
0
2
0
1
0
0
0
シンタックス :
ret
オペランド :
-
-
オペレーション :
pc = MEM[sp]
sp = sp + 1
説明 :
サブルーチンから戻ります。スタックトップからポップした値を pc に代入しプログラムの流
れを変更します。sp はインクリメントされます。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例:
ret
before
pc
sp
MEM[0xF021]
211 頁
after
0x2050
0xF021
0x1103
pc
sp
MEM[0xF021]
0x1103
0xF022
0x1103
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
rti
Return from interrupt
bit 15
0
14
0
13
0
12
0
11
0
10
0
9
0
8
0
7
0
6
0
5
1
4
0
3
0
2
0
1
0
0
1
シンタックス :
rti
オペランド :
-
-
オペレーション :
st = MEM[sp]
sp = sp + 1
pc = MEM[sp]
sp = sp + 1
説明 :
スタックトップから st レジスタと戻り番地をポップし、割り込みハンドラから復帰します。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
rti
before
pc
sp
st
MEM[0xF020]
MEM[0xF021]
2013.12.20 版
after
0x5500
0xF020
0x8000
0x0001
0x2051
pc
sp
st
MEM[0xF020]
MEM[0xF021]
0x2051
0xF022
0x0001
0xC001
0x2051
(C) 2009-2013 New Japan Radio Co., Ltd.
212 頁
Ximo16A
Preliminary
rtf
Return from fast interrupt
bit 15
0
14
0
13
0
12
0
11
0
10
0
9
0
8
0
7
0
6
0
5
1
4
0
3
0
2
0
1
1
0
0
シンタックス :
rtf
オペランド :
-
-
オペレーション :
pc = spc
st = sst
c0 = sc0
c1 = sc1
s0 = ss0
s1 = ss1
e0 = se0
e1 = se1
説明 :
内部スタックレジスタからコアレジスタを復帰します。高速割込みのサービスルーチンから
の復帰に使用します。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
rtf
before
pc
st
c0
c1
s0
s1
e0
e1
spc
sst
sc0
sc1
ss0
ss1
se0
se1
213 頁
after
0x5500
0xC800
0x0000
0x2051
0x1000
0x2000
0x1100
0x2100
0x2051
0x0001
0x0000
0x0010
0x0110
0x0210
0x0220
0x0220
pc
st
c0
c1
s0
s1
e0
e1
spc
sst
sc0
sc1
ss0
ss1
se0
se1
0x2051
0x0001
0x0000
0x0010
0x0110
0x0210
0x0220
0x0220
0x2051
0x0001
0x0000
0x0010
0x0110
0x0210
0x0220
0x0220
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
ftrap
Fast interrupt trap
bit 15
0
14
0
13
0
12
0
11
0
10
0
9
0
8
0
7
0
6
0
5
1
4
0
3
0
2
0
1
1
0
1
シンタックス :
ftrap
オペランド :
-
-
オペレーション :
spc = pc + 1
sst = st
sc0 = c0
sc1 = c1
ss0 = s0
ss1 = s1
se0 = e0
se1 = e1
st::B = 1
st::FI = 1
st::I0 = 1
st::I1 = 1
pc = MEM[FASTINT_VECTOR]
説明 :
高速割込みの動作をエミュレーションします。
※この命令はデバッグのためのもので、将来仕様から削除される可能性があります。
コンディションコード :
U
-
E
-
2013.12.20 版
S
-
F
-
N
-
V
-
Z
-
C
-
(C) 2009-2013 New Japan Radio Co., Ltd.
214 頁
Ximo16A
Preliminary
ftrap
before
pc
st
c0
c1
s0
s1
e0
e1
spc
sst
sc0
sc1
ss0
ss1
se0
se1
MEM[VECTOR]
215 頁
after
0x5500
0x0000
0x0000
0x2051
0x1000
0x2000
0x1100
0x2100
0x0000
0x0000
0x0000
0x0000
0x0000
0x0000
0x0000
0x0000
0x1000
pc
st
c0
c1
s0
s1
e0
e1
spc
sst
sc0
sc1
ss0
ss1
se0
se1
MEM[VECTOR]
0x1000
0xD100
0x0000
0x2051
0x1000
0x2000
0x1100
0x2100
0x5501
0x0000
0x0000
0x2051
0x1000
0x2000
0x1100
0x2100
0x1000
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
trap
Trap
bit 15
0
14
0
13
0
12
0
11
0
10
0
9
0
8
0
7
0
6
0
5
1
4
0
3
0
2
1
1
0
0
0
シンタックス :
trap
オペランド :
-
-
オペレーション :
sp = sp - 1
MEM[sp] = pc + 1
sp = sp - 1
MEM[sp] = st
st::I0 = 1
st::I1 = 1
pc = MEM[TRAP_VECTOR]
説明 :
ソフトウェア割込みを発生させます。
trap 命令の次の命令のアドレスを戻り番地としてスタックにプッシュします。またステータ
スレジスタをスタックにプッシュしたの後、st レジスタの I0,I1 ビットをセットして NMI 以外の
割り込みを禁止します。その後、割込みベクタテーブルで指示される番地へジャンプします。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例:
trap
before
pc
sp
st
MEM[0xF020]
MEM[0xF021]
MEM[VECTOR]
2013.12.20 版
after
0x2050
0xF022
0x0001
0x0000
0x0000
0x4000
pc
sp
st
MEM[0xF020]
MEM[0xF021]
MEM[VECTOR]
0x4000
0xF020
0xC001
0xC001
0x2051
0x4000
(C) 2009-2013 New Japan Radio Co., Ltd.
216 頁
Ximo16A
Preliminary
debug
Debug interrupt
bit 15
0
14
0
13
0
12
0
11
0
10
0
9
0
8
0
7
0
6
0
5
1
4
0
3
0
2
1
1
0
0
1
シンタックス :
debug
オペランド :
-
-
オペレーション :
sp = sp - 1
MEM[sp] = pc
sp = sp - 1
MEM[sp] = st
st::I0 = 1
st::I1 = 1
pc = MEM[DEBUG_VECTOR]
説明 :
デバッグ例外を発生させます。
debug 命令のアドレスを戻り番地としてスタックにプッシュします。またステータスレジス
タをスタックにプッシュしたの後、st レジスタの I0,I1 ビットをセットして NMI 以外の割り込み
を禁止します。その後、割込みベクタテーブルで指示される番地へジャンプします。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例:
debug
before
pc
sp
st
MEM[0xF020]
MEM[0xF021]
MEM[VECTOR]
after
0x2050
0xF022
0x0001
0x0000
0x0000
0x4000
pc
sp
st
MEM[0xF020]
MEM[0xF021]
MEM[VECTOR]
0x4000
0xF020
0xC001
0xC001
0x2050
0x4000
補足 :
スタックに保存される戻り番地は debug 命令のある番地になります。debug 命令を書き換え
ずに rti で割り込みハンドラから戻ると、再びデバッグ例外が発生します。ソフトウェアデバッ
グでのブレイクポイントの設定に使用します。
217 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
sleep
sleep
bit 15
0
14
0
13
0
12
0
11
0
10
0
9
0
8
0
7
0
6
0
5
1
4
0
3
1
2
0
1
0
0
0
シンタックス :
sleep
オペランド :
-
-
オペレーション :
説明 :
コアの動作をスリープ状態にします。この命令の実行により、命令フェッチが停止され、割
り込み待ちの状態へ遷移します。
復帰にはリセット、または割込みの発生が必要です。
コンディションコード :
U
-
E
-
2013.12.20 版
S
-
F
-
N
-
V
-
Z
-
C
-
(C) 2009-2013 New Japan Radio Co., Ltd.
218 頁
Ximo16A
Preliminary
ccp <condition>
Condition copy
bit 15
0
14
0
13
0
12
0
11
0
10
0
9
0
8
0
7
0
6
1
5
0
4
3
2
condition
1
0
シンタックス :
ccp <condition>
オペランド :
-
-
オペレーション :
If (condition == true) then
U=1
Else
U=0
Endif
説明 :
condition フィールドにより指示された条件が成り立っている場合に、コンディションコード
の U ビットをセットします。条件が成立しない場合は U ビットをクリアします。
コンディションコード :
U
E
↑↓ -
S
-
F
-
N
-
V
-
Z
-
C
-
例:
ccp ge
before
st
after
0x000C V=1,N=1
st
0x008C V=1,N=1,U=1
補足:
st レジスタを直接書き換える命令以外では、U ビットを書き換える唯一の命令です。分岐な
どに使用するコンディションを遅延して使用したい場合に使用します。
cmp.w d1, d0
ccp ge
-- 直前の cmp 命令のコンディションを U ビットに保存
mov.w d1, (p0)
add d0, d1
jmp _LABEL, us
219 頁
-- U ビットの条件による分岐
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
lea (Preg)
Load effective address (modify pointer registr)
bit 15
0
14
1
13
0
12
1
11
0
10
0
9
1
8
1
7
1
6
X
5
1
4
3
m0/ +/m1
Addressing
Mode
2
1
0
Preg
(Pointer
Preg#)
シンタックス :
lea (Pointer+,m0)
lea (Pointer-,m0)
lea (Pointer+,m1)
lea (Pointer-,m1)
オペランド :
Pointer
p0 - p5/fp/sp
説明 :
アドレッシングモードの指示に従ってポインタレジスタの値が更新されます。メモリへのア
クセスは発生しません。
コンディションコード :
U
-
E
-
S
-
F
-
N
-
V
-
Z
-
C
-
例:
lea (p3-, m1)
before
p3
m1
after
0x1010
0x0003
p3
m1
0x100d
0x0003
補足:
アドレッシングモードの詳細については「4 アドレッシングモード」を参照して下さい。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
220 頁
Ximo16A
Preliminary
23 並列転送命令の形式について
32 ビット長の演算命令またはレジスタ間転送命令の一部では並列にロード命令、ストア命令を発行
することができます。( 並列転送が可能な命令は「24.3 32 ビット長命令 2( 並列転送可能 DSP 演算命
令 )」を参照して下さい。)
並列発行では
・ロード命令 1 つと nop
・ストア命令 1 つと nop
・ロード命令 2 つ
・ロード命令 1 つとストア命令 1 つ
の組み合わせを任意に選択することが可能です。
並列転送命令形式は次のような 64 ビット長の複合命令となり、1 つの命令として実行されます。
表 11:並列転送命令形式
32 ビット長命令
16 ビット長命令
16 ビット長命令
32 ビット長命令 2( 並列転送可能 DSP
演算命令 )
ロード命令
or
ストア命令
ロード命令
or
NOP
アセンブラでは : を区切り文字として使用し、並列転送命令を 32 ビット長命令に続けて記述し
ます。1つめのロードまたはストア命令は Data Bus X を利用して、2 つ目のロード命令は Data Bus Y
を利用して処理されます。
例 1:
add a0, d1, s : mov.w d1, (p1+) : nop
d1 レジスタの内容を符号拡張して a0 へ加算します。p1 レジスタの指すメモリの内容を d1
へロードし、p1 をインクリメントします。
例 2:
mul d1.0, d8, d2, fr : mov.w (p0), d2 : mov.w d8, (p1+,m1)
d2 の内容を p0 が指すメモリへストアします。d8 と d2 を固定小数として乗算し、d1.0 へ結
果を格納します。p1 が指すメモリの内容を d8 へロードし、p1 に m1 を加算します。
例 3:
asli a1, 1 : mov.w (p0), d0 : mov.w d0, (p0)
並列転送で同じアドレスに対してリード及びライトを行なう場合、p0 の指すメモリから d0
へロードする動作と d0 から p0 の指すメモリへのストアは同時に行なわれます。結果として、ま
ず p0 の指すメモリの内容が d0 へロードされ、ロードされる前の ( 古い )d0 の値が p0 の指すメ
モリへストアされます。
MEM[p0] = 0x1111 / d0 = 0x2222 であった場合、この命令の実行後は
MEM[p0] = 0x2222 / d0 = 0x1111 となります。
23.1
並列実行可能なロード命令
24.1.2.1 mov.w Dreg16, (Preg)
24.1.2.2 mov.l Dreg32, (Preg)
24.1.2.4 mov.w A, (Preg), <s/u>
24.1.2.5 mov.l A, (Preg), <s/u>
23.2
並列実行可能なストア命令
24.1.4.1 mov.w (Preg), Dreg16
221 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
24.1.4.2 mov.l (Preg), Dreg32
24.1.4.4 mov.w (Preg), A, <s/u>
24.1.4.5 mov.l (Preg), A, <s/u>
23.3
並列転送時の制限事項
・ディスティネーションレジスタに同じレジスタを取ることは出来ません。
× add.w d0, d1, d2, ns : mov.l d1.0, (p5+) : nop
d0 レジスタが add 命令とロード命令によって書き換えられる。
・同じポインタレジスタに対して 2 つの自動更新を指定することは出来ません。
× mov.w d5, a0, s : mov.w (p3+, m0), d5 : mov.w d12, (p3-)
p3 レジスタに対する自動更新が 2 つ指定されている。
・同じポインタレジスタをアドレッシングに使用し、自動更新を行なう場合、自動更新を取れるのは
1 つ目の並列転送のみです。
× dnop : mov.w d5, (p3) : mov.w d12, (p3+, m0)
○ dnop : mov.w d5, (p3+, m0) : mov.w d12, (p3)
p3 レジスタの指すメモリのデータを d5 及び d12 にロードした後、p3 レジスタを m0 によっ
て更新します。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
222 頁
Ximo16A
Preliminary
24 命令エンコード一覧
ここではオプコード順 / 命令長順に命令を列挙しています。それぞれの命令についてビットフィール
ド、記述例、実行サイクルを示します。
命令は次の 3 つに大きく分類できます。
24.1 16 ビット長命令
24.2 32 ビット長命令 1
24.3 32 ビット長命令 2( 並列転送可能 DSP 演算命令 )
このうち「24.3 32 ビット長命令 2( 並列転送可能 DSP 演算命令 )」は並列転送命令を取ることがで
き、
「23 並列転送命令の形式について」にあるように、64 ビット長の複合命令として実行することが
可能です。
24.1
16 ビット長命令
24.1.1
プログラムフロー制御命令
24.1.1.1
No operation
nop
bit 15
0
14
0
13
0
12
0
11
0
10
0
9
0
8
0
7
0
6
0
5
0
4
0
3
0
2
0
1
0
0
0
11
0
10
0
9
0
8
0
7
0
6
0
5
0
4
0
3
1
2
1
Pregs
Preg#
0
9
0
8
0
7
0
6
0
5
0
4
1
3
0
2
1
Pregs
Preg#
0
syntax
nop
opcode range 0x0000
example: nop
24.1.1.2
Jump
jmp Preg
bit 15
0
14
0
13
0
12
0
syntax
jmp Pregs
opcode range 0x0008-0x000F
example: jmp p0
24.1.1.3
Call subroutine
call Preg
bit 15
0
14
0
13
0
12
0
11
0
10
0
syntax
call Pregs
opcode range 0x0010-0x0017
example: call p1
223 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
24.1.1.4
Ximo16A
Return from subroutine
ret
bit 15
0
14
0
13
0
12
0
11
0
10
0
9
0
8
0
7
0
6
0
5
1
4
0
3
0
2
0
1
0
0
0
8
0
7
0
6
0
5
1
4
0
3
0
2
0
1
0
0
1
8
0
7
0
6
0
5
1
4
0
3
0
2
0
1
1
0
0
syntax
ret
opcode range 0x0020
example: ret
24.1.1.5
Return from interrupt
rti
bit 15
0
14
0
13
0
12
0
11
0
10
0
9
0
syntax
rti
opcode range 0x0021
example: rti
24.1.1.6
Return from fast interrupt
rtf
bit 15
0
14
0
13
0
12
0
11
0
10
0
9
0
syntax
rtf
opcode range 0x0022
example: rtf
24.1.1.7
Fast interrupt trap
ftrap
bit 15
0
14
0
13
0
12
0
11
0
10
0
9
0
8
0
7
0
6
0
5
1
4
0
3
0
2
0
1
1
0
1
12
0
11
0
10
0
9
0
8
0
7
0
6
0
5
1
4
0
3
0
2
1
1
0
0
0
syntax
ftrap
opcode range 0x0023
example: ftrap
24.1.1.8
Trap
trap
bit 15
0
14
0
13
0
syntax
trap
opcode range 0x0024
example: trap
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
224 頁
Ximo16A
Preliminary
24.1.1.9
Debug interrupt
debug
bit 15
0
14
0
13
0
12
0
11
0
10
0
9
0
8
0
7
0
6
0
5
1
4
0
3
0
2
1
1
0
0
1
11
0
10
0
9
0
8
0
7
0
6
0
5
1
4
0
3
0
2
1
1
1
0
0
syntax
debug
opcode range 0x0025
example: debug
24.1.1.10
Unlink
ulnk
bit 15
0
14
0
13
0
12
0
syntax
ulnk
opcode range 0x0026
example: ulnk
24.1.1.11
Align stack pointer
alsp
bit 15
0
14
0
13
0
12
0
11
0
10
0
9
0
8
0
7
0
6
0
5
1
4
0
3
0
2
1
1
1
0
1
11
0
10
0
9
0
8
0
7
0
6
0
5
1
4
0
3
1
2
0
1
0
0
0
9
0
8
0
7
0
6
1
5
0
4
3
2
condition
1
0
syntax
alsp
opcode range 0x0027
example: alsp
24.1.1.12
Sleep
sleep
bit 15
0
14
0
13
0
12
0
syntax
sleep
opcode range 0x0028
example: sleep
24.1.1.13
Condition copy
ccp <condition>
bit 15
0
14
0
13
0
12
0
11
0
10
0
syntax
ccp <condition>
opcode range 0x0040-0x005F
example: ccp ge
225 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
※ condition フィールドは「2.2.1.2 コンディションコード」を参照して下さい。
ロード命令 ( 間接アドレッシング )
24.1.2
この命令ではポインタレジスタ Preg を使った間接アドレッシングが使用できます。アドレッシング
を指示するフィールドは次のように割り当てられます。
bit 15
14
13
12
11
10
9
8
7
6
5
4
3
Addressing
Mode
2
1
Pointer
Preg#
0
AddressingMode には次の修飾を使用できます。
AddressingMode Symbol
000
001
010
011
100
101
110
111
(Preg)
Indirect
[reserved]
(Preg+)
Indirect/Post
(Preg-)
Indirect/Post
(Preg+,m0) Indirect/Post
(Preg-,m0) Indirect/Post
(Preg+,m1) Indirect/Post
(Preg-,m1) Indirect/Post
24.1.2.1
Increment
Decrement
Increment
Decrement
Increment
Decrement
by
by
by
by
by
by
Operand Size
Operand Size
m0 register
m0 register
m1 register
m1 register
8
7
6
Dreg16d
(Destination
Dreg16#)
5
4
3
Addressing
Mode
2
1
Pointer
Preg#
0
5
4
3
Addressing
Mode
2
1
Pointer
Preg#
0
Load 16-bit data register
mov.w Dreg16, (Preg)
bit 15
0
14
0
13
0
12
1
11
0
10
0
9
Dreg
16d
Even
/Odd
syntax
mov.w Dreg16d, (Preg)
opcode range 0x1000-0x13FF
example: mov.w d1, (p0)
24.1.2.2
Load 32-bit data register
mov.l Dreg32, (Preg)
bit 15
0
14
0
13
0
12
1
11
0
10
1
9
0
8
7
6
Dreg32d
(Destination
Dreg32#)
syntax
mov.l Dreg32d, (Preg)
opcode range 0x1400-0x15FF
example: mov.w d1.0, (p0+)
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
226 頁
Ximo16A
Preliminary
24.1.2.3
Load pointer register
mov.w Preg, (Preg)
bit 15
0
14
0
13
0
12
1
11
0
10
1
9
1
8
7
6
Pregd
(Destination
Preg#)
5
4
3
Addressing
Mode
2
1
Pointer
Preg#
0
2
1
Pointer
Preg#
0
syntax
mov.l Pregd, (Preg)
opcode range 0x1600-0x17FF
example: mov.w p1, (p0+)
24.1.2.4
Load accumulator register (word operand)
mov.w A, (Preg), <s/u>
bit 15
0
14
0
13
1
12
0
11
0
10
0
9
0
8
0
7
s/u
s:0
u:1
6
5
4
3
Ad Addressing
a0:0 Mode
a1:1
syntax
mov.w Ad, (Preg), <s/u>
opcode range 0x2000-0x20FF
example: mov.w a0, (p0+), s
※この命令はオプション <s/u> を持ちます。ロードするデータを符号付で扱うか、符号無しで扱う
かを選択します。
24.1.2.5
Load accumulator register (long word operand)
mov.l A, (Preg), <s/u>
bit 15
0
14
0
13
1
12
0
11
0
10
0
9
0
8
1
7
s/u
s:0
u:1
6
5
4
3
Ad Addressing
a0:0 Mode
a1:1
2
1
Pointer
Preg#
0
syntax
mov.l Ad, (Preg), <s/u>
opcode range 0x2100-0x21FF
example: mov.l a1, (p2+,m1), u
※この命令はオプション <s/u> を持ちます。ロードするデータを符号付で扱うか、符号無しで扱う
かを選択します。
24.1.3
ロード命令 (fp レジスタ相対 )
fp( フレームポインタ ) のみで使用できるアドレッシングモードです。
227 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
24.1.3.1
Ximo16A
Load 16-bit data register
mov.w Dreg16, (-IMM6, fp)
bit 15
0
14
0
13
1
12
1
11
0
10
0
9
8
7
6
5
Dreg IMM6(-64 to -1)
16d
Even
/Odd
4
3
2
1
0
Dreg16d
(Destination
Dreg16#)
8
7
6
5
IMM6(-64 to -1)
4
3
2
1
0
Dreg32d
(Destination
Dreg32#)
8
7
6
5
IMM6(-64 to -1)
4
3
2
1
0
Pregd
(Destination
Preg#)
syntax
mov.w Dreg16d, (-IMM6,fp)
opcode range 0x3000-0x33FF
example: mov.w d1, (-32, fp)
24.1.3.2
Load 32-bit data register
mov.l Dreg32, (-IMM6, fp)
bit 15
0
14
0
13
1
12
1
11
0
10
1
9
0
syntax
mov.l Dreg32d, (-IMM6,fp)
opcode range 0x3400-0x35FF
example: mov.l d1.0, (-12, fp)
24.1.3.3
Load pointer register
mov.w Preg, (-IMM6, fp)
bit 15
0
14
0
13
1
12
1
11
0
10
1
9
1
syntax
mov.w Pregd, (-IMM6,fp)
opcode range 0x3600-0x37FF
example: mov.w sp, (-63, fp)
24.1.4
ストア命令 ( 間接アドレッシング )
この命令ではポインタレジスタ Preg を使った間接アドレッシングが使用できます。アドレッシング
モードは「4 アドレッシングモード」を参照して下さい。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
228 頁
Ximo16A
Preliminary
24.1.4.1
Store 16-bit data register
mov.w (Preg), Dreg16
bit 15
0
14
0
13
0
12
1
11
1
10
0
9
Dreg
16s
Even
/Odd
8
7
6
Dreg16s
(Source
Dreg16#)
5
4
3
Addressing
Mode
2
1
Pointer
Preg#
0
8
7
6
Dreg32s
(Source
Dreg32#)
5
4
3
Addressing
Mode
2
1
Pointer
Preg#
0
8
7
Pregs
(Source
Preg#)
5
4
3
Addressing
Mode
2
1
Pointer
Preg#
0
2
1
Pointer
Preg#
0
syntax
mov.w (Preg), Dreg16s
opcode range 0x1800-0x1BFF
example: mov.w (p0), d1
24.1.4.2
Store 32-bit data register
mov.l (Preg), Dreg32
bit 15
0
14
0
13
0
12
1
11
1
10
1
9
0
syntax
mov.l (Preg), Dreg32s
opcode range 0x1C00-0x1DFF
example: mov.l (p0+), d1.0
24.1.4.3
Store pointer register
mov.w (Preg), Preg
bit 15
0
14
0
13
0
12
1
11
1
10
1
9
1
6
syntax
mov.w (Preg), Dreg16s
opcode range 0x1E00-0x1FFF
example: mov.w (p2+, m0), p0
24.1.4.4
Store accumulator register (word operand)
mov.w (Preg), A, <s/u>
bit 15
0
14
0
13
1
12
0
11
1
10
0
9
0
8
0
7
s/u
s:0
u:1
6
5
4
3
As Addressing
a0:0 Mode
a1:1
syntax
mov.w (Preg), As, <s/u>
opcode range 0x2800-0x28FF
example: mov.w (p0+), a0, s
※この命令はオプション <s/u> を持ちます。ストアするデータを符号付で扱うか、符号無しで扱う
かを選択します。
229 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
24.1.4.5
Ximo16A
Store accumulator register (long word operand)
mov.l (Preg), A, <s/u>
bit 15
0
14
0
13
1
12
0
11
1
10
0
9
0
8
1
7
s/u
s:0
u:1
6
5
4
3
As Addressing
a0:0 Mode
a1:1
2
1
Pointer
Preg#
0
syntax
mov.l (Preg), As, <s/u>
opcode range 0x2900-0x29FF
example: mov.l (p2), a1, u
※この命令はオプション <s/u> を持ちます。ストアするデータを符号付で扱うか、符号無しで扱う
かを選択します。
24.1.5
ストア命令 (fp レジスタ相対 )
24.1.5.1
Store 16-bit data register
mov.w (-IMM6, fp), Dreg16
bit 15
0
14
0
13
1
12
1
11
1
10
0
9
8
7
6
5
Dreg IMM6(-64 to -1)
16s
Even
/Odd
4
3
2
1
0
Dreg16s
(Source
Dreg16#)
4
3
2
1
0
Dreg32s
(Source
Dreg32#)
syntax
mov.w (-IMM6,fp), Dreg16s
opcode range 0x3800-0x3BFF
example: mov.w (-32, fp), d1
24.1.5.2
Store 32-bit data register
mov.l (-IMM6, fp), Dreg32
bit 15
0
14
0
13
1
12
1
11
1
10
1
9
0
8
7
6
5
IMM6(-64 to -1)
syntax
mov.l (-IMM6,fp), Dreg32d
opcode range 0x3C00-0x3DFF
example: mov.l (-12, fp), d1.0
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
230 頁
Ximo16A
Preliminary
24.1.5.3
Store pointer register
mov.w (-IMM6, fp), Preg
bit 15
0
14
0
13
1
12
1
11
1
10
1
9
1
8
7
6
5
IMM6(-64 to -1)
4
3
2
1
Pregs
(Source
Preg#)
0
2
1
Reg#
0
syntax
mov.w (-IMM6,fp), Pregs
opcode range 0x3E00-0x3FFF
example: mov.w (-63, fp), sp
24.1.6
スタック操作命令
24.1.6.1
Pop register
pop.w Reg
pop.l Dreg32
bit 15
0
14
0
13
1
12
0
11
0
10
0
9
1
8
0
7
X
6
X
5
4
3
Register
Group#
syntax
pop.w Reg
pop.l Dreg32
opcode range 0x2200-0x223F
example: pop.w c0
example: pop.l d15.14
※ sp を除く全てのレジスタをオペランドにとることができます。
24.1.6.2
Push register
push.w Reg
push.l Dreg32
bit 15
0
14
0
13
1
12
0
11
1
10
0
9
1
8
0
7
X
6
X
5
4
3
Register
Group#
2
1
Reg#
0
syntax
push.w Reg
push.l Dreg32
opcode range 0x2A00-0x2A3F
example: push.w n1
example: push.l d1.0
※ sp を除く全てのレジスタをオペランドにとることができます。
231 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
24.1.6.3
Ximo16A
Pop multiple register
popm.w Dreg
bit 15
0
14
0
13
1
12
0
11
0
10
0
9
1
8
1
7
X
6
X
5
4
3
Register
Group#
2
1
Reg#
0
syntax
popm.w Dreg16
popm.w Preg
opcode range 0x2300-0x233F
example: popm.w d5
example: popm.w p1
※この命令で指定できる Register Group は Dreg16_Even/Dreg16_Odd/Preg の 3 つです。
※ Preg として fp と sp を指定することは出来ません。
24.1.6.4
Push multiple register
pushm.w Reg
bit 15
0
14
0
13
1
12
0
11
1
10
0
9
1
8
1
7
X
6
X
5
4
3
Register
Group#
2
1
Reg#
0
syntax
pushm.w Dreg16
pushm.w Preg
opcode range 0x2B00-0x2B3F
example: pushm.w d5
example: pushm.w p1
※この命令で指定できる Register Group は Dreg16_Even/Dreg16_Odd/Preg の 3 つです。
※ Preg として fp と sp を指定することは出来ません。
24.1.7
ペリフェラルアクセス
24.1.7.1
Load from peripherals
movp.w d0, (IMM8)
bit 15
0
14
0
13
1
12
0
11
0
10
1
9
0
8
X
7
6
IMM8
5
4
3
2
1
0
syntax
movp.w d0, (IMM8)
opcode range 0x2400-0x24FF
movp.w d0, (0x10)
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
232 頁
Ximo16A
Preliminary
24.1.7.2
Store to peripherals
movp.w (IMM8), d0
bit 15
0
14
0
13
1
12
0
11
1
10
1
9
0
8
X
7
6
IMM8
5
4
3
2
1
0
syntax
movp.w (IMM8), d0
opcode range 0x2C00-0x2CFF
movp.w (0x10), d0
16 ビットデータレジスタ演算
24.1.8
d レジスタ間の演算を行う命令を以下に示します。命令の形式は
操作 . オペランドサイズ 第 1 オペランド , 第 2 オペランド
操作 : 演算の種類を表します。
オペランドサイズ : 操作するオペランドのサイズを表します。
第 1 オペランド : ディスティネーションレジスタを表します。(d15 - d0)
第 2 オペランド : ソースレジスタを表します。(d15 - d0)
ソースレジスタ (Dreg16s) 及びディスティネーションレジスタ (Dreg16d) は命令フィールド中で次
のように指示されます。
bit 15
14
24.1.8.1
13
12
11
10
9
8
7
Dreg
16s
Even
/Odd
6
Dreg
16d
Even
/Odd
5
4
3
Dreg16s
(Source
Dreg16#)
2
1
0
Dreg16d
(Destination
Dreg16#)
7
Dreg
16s
Even
/Odd
6
Dreg
16d
Even
/Odd
5
4
3
Dreg16s
(Source
Dreg16#)
2
1
0
Dreg16d
(Destination
Dreg16#)
Add 16-bit data register
add.w Dreg16, Dreg16
bit 15
0
14
1
13
0
12
0
11
0
10
0
9
0
8
0
syntax
add.w Dreg16d, Dreg16s
opcode range 0x4000-0x40FF
example: add.w d1, d0
d1 と d0 を加算し、結果を d1 に代入します。
233 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
24.1.8.2
Ximo16A
Subtract 16-bit data register
sub.w Dreg16, Dreg16
bit 15
0
14
1
13
0
12
0
11
0
10
0
9
0
8
1
7
Dreg
16s
Even
/Odd
6
Dreg
16d
Even
/Odd
5
4
3
Dreg16s
(Source
Dreg16#)
2
1
0
Dreg16d
(Destination
Dreg16#)
syntax
sub.w Dreg16d, Dreg16s
opcode range 0x4100-0x41FF
example: sub.w d1, d0
d1 から d0 を減算し、結果を d1 に代入します。
24.1.8.3
Add 16-bit data register with carry
adc.w Dreg16, Dreg16
bit 15
0
14
1
13
0
12
0
11
0
10
0
9
1
8
0
7
Dreg
16s
Even
/Odd
6
Dreg
16d
Even
/Odd
5
4
3
Dreg16s
(Source
Dreg16#)
2
1
0
Dreg16d
(Destination
Dreg16#)
syntax
adc.w Dreg16d, Dreg16s
opcode range 0x4200-0x42FF
example: adc.w d1, d0
24.1.8.4
Subtract 16-bit data register with carry
sbc.w Dreg16, Dreg16
bit 15
0
14
1
13
0
12
0
11
0
10
0
9
1
8
1
7
Dreg
16s
Even
/Odd
6
Dreg
16d
Even
/Odd
5
4
3
Dreg16s
(Source
Dreg16#)
2
1
0
Dreg16d
(Destination
Dreg16#)
6
Dreg
16d
Even
/Odd
5
4
3
Dreg16s
(Source
Dreg16#)
2
1
0
Dreg16d
(Destination
Dreg16#)
syntax
sbc.w Dreg16d, Dreg16s
opcode range 0x4300-0x43FF
example: sbc.w d1, d0
24.1.8.5
Compare 16-bit data register
cmp.w, Dreg16, Dreg16
bit 15
0
14
1
13
0
12
0
11
0
10
1
9
0
8
0
7
Dreg
16s
Even
/Odd
syntax
cmp.w Dreg16d, Dreg16s
opcode range 0x4400-0x44FF
example: cmp.w d1, d0
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
234 頁
Ximo16A
Preliminary
24.1.8.6
Absolute value on 16-bit data register
abs.w Dreg16, Dreg16
bit 15
0
14
1
13
0
12
0
11
0
10
1
9
0
8
1
7
Dreg
16s
Even
/Odd
6
Dreg
16d
Even
/Odd
5
4
3
Dreg16s
(Source
Dreg16#)
2
1
0
Dreg16d
(Destination
Dreg16#)
syntax
abs.w Dreg16d, Dreg16s
opcode range 0x4500-0x45FF
example: abs.w d1, d0
24.1.8.7
Negate value on 16-bit data register
neg.w Dreg16, Dreg16, <ns/sa>
bit 15
0
14
1
13
0
12
0
11
0
10
1
9
1
8
7
ns:0 Dreg
sa:1 16s
Even
/Odd
6
Dreg
16d
Even
/Odd
5
4
3
Dreg16s
(Source
Dreg16#)
2
1
0
Dreg16d
(Destination
Dreg16#)
syntax
neg.w Dreg16d, Dreg16s,<ns/sa>
opcode range 0x4600-0x47FF
example: neg.w d1, d0
24.1.8.8
Logical AND on 16-bit data register
and.w Dreg16, Dreg16
bit 15
0
14
1
13
0
12
0
11
1
10
0
9
0
8
0
7
Dreg
16s
Even
/Odd
6
Dreg
16d
Even
/Odd
5
4
3
Dreg16s
(Source
Dreg16#)
2
1
0
Dreg16d
(Destination
Dreg16#)
5
4
3
Dreg16s
(Source
Dreg16#)
2
1
0
Dreg16d
(Destination
Dreg16#)
syntax
and.w Dreg16d, Dreg16s
opcode range 0x4800-0x48FF
example: and.w d1, d0
24.1.8.9
Logical OR on 16-bit data register
or.w Dreg16, Dreg16
bit 15
0
14
1
13
0
12
0
11
1
10
0
9
0
8
1
7
Dreg
16s
Even
/Odd
6
Dreg
16d
Even
/Odd
syntax
and.w Dreg16d, Dreg16s
opcode range 0x4900-0x49FF
example: or.w d1, d0
235 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
24.1.8.10
Ximo16A
Logical excusive OR on 16-bit data register
eor.w Dreg16, Dreg16
bit 15
0
14
1
13
0
12
0
11
1
10
0
9
1
8
0
7
Dreg
16s
Even
/Odd
6
Dreg
16d
Even
/Odd
5
4
3
Dreg16s
(Source
Dreg16#)
2
1
0
Dreg16d
(Destination
Dreg16#)
syntax
and.w Dreg16d, Dreg16s
opcode range 0x4A00-0x4AFF
example: eor.w d1, d0
24.1.8.11
1
s complement value on 16-bit data register
com.w Dreg16, Dreg16
bit 15
0
14
1
13
0
12
0
11
1
10
0
9
1
8
1
7
Dreg
16s
Even
/Odd
6
Dreg
16d
Even
/Odd
5
4
3
Dreg16s
(Source
Dreg16#)
2
1
0
Dreg16d
(Destination
Dreg16#)
syntax
com.w Dreg16d, Dreg16s
opcode range 0x4B00-0x4BFF
example: com.w d1, d0
24.1.8.12
Arithmetic shift left 16-bit data register by register
asl.w Dreg16, Dreg16
bit 15
0
14
1
13
0
12
0
11
1
10
1
9
0
8
0
7
Dreg
16s
Even
/Odd
6
Dreg
16d
Even
/Odd
5
4
3
Dreg16s
(Source
Dreg16#)
2
1
0
Dreg16d
(Destination
Dreg16#)
syntax
asl.w Dreg16d, Dreg16s
opcode range 0x4C00-0x4CFF
example: asl.w d1, d0
24.1.8.13
Arithmatic shift right 16-bit data register by register
asr.w Dreg16, Dreg16
bit 15
0
14
1
13
0
12
0
11
1
10
1
9
0
8
1
7
Dreg
16s
Even
/Odd
6
Dreg
16d
Even
/Odd
5
4
3
Dreg16s
(Source
Dreg16#)
2
1
0
Dreg16d
(Destination
Dreg16#)
syntax
asr.w Dreg16d, Dreg16s
opcode range 0x4D00-0x4DFF
example: asr.w d1, d0
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
236 頁
Ximo16A
Preliminary
24.1.8.14
Logical shift left 16-bit data reigster by register
lsl.w Dreg16, Dreg16
bit 15
0
14
1
13
0
12
0
11
1
10
1
9
1
8
0
7
Dreg
16s
Even
/Odd
6
Dreg
16d
Even
/Odd
5
4
3
Dreg16s
(Source
Dreg16#)
2
1
0
Dreg16d
(Destination
Dreg16#)
syntax
lsl.w Dreg16d, Dreg16s
opcode range 0x4E00-0x4EFF
example: lsl.w d1, d0
24.1.8.15
Logical shift right 16-bit data reigster by register
lsr.w Dreg16, Dreg16
bit 15
0
14
1
13
0
12
0
11
1
10
1
9
1
8
1
7
Dreg
16s
Even
/Odd
6
Dreg
16d
Even
/Odd
5
4
3
Dreg16s
(Source
Dreg16#)
2
1
0
Dreg16d
(Destination
Dreg16#)
syntax
lsr.w Dreg16d, Dreg16s
opcode range 0x4F00-0x4FFF
example: lsr.w d1, d0
32 ビットデータレジスタ演算
24.1.9
32 ビットロングワードの d レジスタ間で演算を行う命令を以下に示します。命令の形式は
操作 . オペランドサイズ 第 1 オペランド , 第 2 オペランド
操作 : 演算の種類をあらわします。
オペランドサイズ : 操作するオペランドのサイズを表します。
第 1 オペランド : ディスティネーションレジスタを表します。(d15.14 - d1.0)
第 2 オペランド : ソースレジスタを表します。(d15.14 - d1.0)
ソースレジスタ (Dreg32s) 及びディスティネーションレジスタ (Dreg32d) は命令フィールド中で次
のように指示されます。
bit 15
237 頁
14
13
12
11
10
9
8
7
6
5
4
3
Dreg32s
(Source
Dreg32#)
2
1
0
Dreg32d
(Destination
Dreg32#)
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
24.1.9.1
Ximo16A
Add 32-bit data registr
add.l Dreg32, Dreg32
bit 15
0
14
1
13
0
12
1
11
0
10
0
9
0
8
0
7
0
6
0
5
4
3
Dreg32s
(Source
Dreg32#)
2
1
0
Dreg32d
(Destination
Dreg32#)
6
1
5
4
3
Dreg32s
(Source
Dreg32#)
2
1
0
Dreg32d
(Destination
Dreg32#)
6
0
5
4
3
Dreg32s
(Source
Dreg32#)
2
1
0
Dreg32d
(Destination
Dreg32#)
syntax
add.l Dreg32d, Dreg32s
opcode range 0x5000-0x503F
example: add.l d1.0, d3.2
24.1.9.2
Subtract 32-bit data register
sub.l Dreg32, Dreg32
bit 15
0
14
1
13
0
12
1
11
0
10
0
9
0
8
0
7
0
syntax
sub.l Dreg32d, Dreg32s
opcode range 0x5040-0x507F
example: sub.l d1.0, d3.2
24.1.9.3
Compare 32-bit data register
cmp.l Dreg32, Dreg32
bit 15
0
14
1
13
0
12
1
11
0
10
0
9
0
8
0
7
1
syntax
cmp.l Dreg32d, Dreg32s
opcode range 0x5080-0x50BF
example: cmp.l d1.0, d3.2
24.1.9.4
Absolute value on 32-bit data register
abs.l Dreg32, Dreg32
bit 15
0
14
1
13
0
12
1
11
0
10
0
9
0
8
0
7
1
6
1
5
4
3
Dreg32s
(Source
Dreg32#)
2
1
0
Dreg32d
(Destination
Dreg32#)
syntax
abs.l Dreg32d, Dreg32s
opcode range 0x50C0-0x50FF
example: abs.l d1.0, d3.2
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
238 頁
Ximo16A
Preliminary
24.1.9.5
Round on 32-bit data register
rnd.l Dreg32, Dreg32
bit 15
0
14
1
13
0
12
1
11
0
10
0
9
0
8
1
7
0
6
0
5
4
3
Dreg32s
(Source
Dreg32#)
2
1
0
Dreg32d
(Destination
Dreg32#)
9
0
8
1
7
0
6
1
5
4
3
Dreg32s
(Source
Dreg32#)
2
1
0
Dreg32d
(Destination
Dreg32#)
syntax
rnd.l Dreg32d, Dreg32s
opcode range 0x5100-0x513F
example: rnd.l d1.0, d3.2
24.1.9.6
Step of divide
div Dreg32, Dreg32
bit 15
0
14
1
13
0
12
1
11
0
10
0
syntax
div Dreg32d, Dreg32s
opcode range 0x5140-0x517F
example: div d1.0, d3.2
24.1.9.7
Nagate value on 32-bit data register
neg.l Dreg32, Dreg32, <ns/sa>
bit 15
0
14
1
13
0
12
1
11
0
10
0
9
0
8
1
7
1
6
5
4
3
ns:0 Dreg32s
sa:1 (Source
Dreg32#)
2
1
0
Dreg32d
(Destination
Dreg32#)
syntax
neg.l Dreg32d, Dreg32s
opcode range 0x5180-0x51FF
example: neg.l d1.0, d3.2
24.1.9.8
Arithmetic shift left 32-bit data register by register
asl.l Dreg32, Dreg32
bit 15
0
14
1
13
0
12
1
11
0
10
0
9
1
8
0
7
0
6
0
5
4
3
Dreg32s
(Source
Dreg32#)
2
1
0
Dreg32d
(Destination
Dreg32#)
syntax
asl.l Dreg32d, Dreg32s
opcode range 0x5200-0x523F
example: asl.l d1.0, d3.2
239 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
24.1.9.9
Ximo16A
Arithmetic shift right 32-bit data register by register
asr.l Dreg32, Dreg32
bit 15
0
14
1
13
0
12
1
11
0
10
0
9
1
8
0
7
0
6
1
5
4
3
Dreg32s
(Source
Dreg32#)
2
1
0
Dreg32d
(Destination
Dreg32#)
syntax
asr.l Dreg32d, Dreg32s
opcode range 0x5240-0x527F
example: asr.l d1.0, d3.2
24.1.9.10
Logical shift left 32-bit data register by register
lsl.l Dreg32, Dreg32
bit 15
0
14
1
13
0
12
1
11
0
10
0
9
1
8
0
7
1
6
0
5
4
3
Dreg32s
(Source
Dreg32#)
2
1
0
Dreg32d
(Destination
Dreg32#)
syntax
lsl.l Dreg32d, Dreg32s
opcode range 0x5280-0x52BF
example: lsl.l d1.0, d3.2
24.1.9.11
Logical shift right 32-bit data register by register
lsr.l Dreg32, Dreg32
bit 15
0
14
1
13
0
12
1
11
0
10
0
9
1
8
0
7
1
6
1
5
4
3
Dreg32s
(Source
Dreg32#)
2
1
0
Dreg32d
(Destination
Dreg32#)
7
0
6
0
5
4
Pregs
(Source
Preg#)
2
1
0
Pregd
(Destination
Pregd#)
syntax
lsr.l Dreg32d, Dreg32s
opcode range 0x52C0-0x52FF
example: lsr.l d1.0, d3.2
24.1.10
ポインタレジスタ演算
24.1.10.1
Add pointer register
add.w Preg, Preg
bit 15
0
14
1
13
0
12
1
11
0
10
0
9
1
8
1
3
syntax
add.w Pregd, Pregs
opcode range 0x5300-0x533F
example: add.w p0, p1
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
240 頁
Ximo16A
Preliminary
24.1.10.2
Subtract pointer register
sub.w Preg, Preg
bit 15
0
14
1
13
0
12
1
11
0
10
0
9
1
8
1
7
0
6
1
5
4
Pregs
(Source
Preg#)
3
2
1
0
Pregd
(Destination
Pregd#)
syntax
sub.w Pregd, Pregs
opcode range 0x5340-0x537F
example: sub.w p0, p1
24.1.10.3
Load effective address (modify pointer register)
lea (Preg)
bit 15
0
14
1
13
0
12
1
11
0
10
0
9
1
8
1
7
1
6
X
5
1
4
3
m0/ +/m1
Addressing
Mode
2
1
0
Preg
(Pointer
Preg#)
syntax
lea (Preg+,Mreg)
lea (Preg-,Mreg)
opcode range 0x5380-0x53BF
example: lea (p0+, m0)
※ Addressing Mode フィールドは「4.2.1 ポインタレジスタ間接アドレッシング」のアドレッシン
グモードを参照して下さい。
24.1.11
型変換付きデータ転送
24.1.11.1
Move register with sign extend
movs Dreg32, Dreg16
bit 15
0
14
1
13
0
12
1
11
0
10
1
9
0
8
0
7
6
Dreg X
16s
Even
/Odd
5
4
3
Dreg16s
(Source
Dreg16#)
2
1
0
Dreg32d
(Destination
Dreg32#)
syntax
movs Dreg32d, Dreg16s
opcode range 0x5400-0x54BF
example: movs d1.0, d3
※ 16 ビットデータレジスタを符号拡張して 32 ビットデータレジスタへ転送します。
241 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
24.1.11.2
Ximo16A
Move register with zero extend
movz Dreg32, Dreg16
bit 15
0
14
1
13
0
12
1
11
0
10
1
9
0
8
1
7
6
Dreg X
16s
Even
/Odd
5
4
3
Dreg16s
(Source
Dreg16#)
2
1
0
Dreg32d
(Destination
Dreg32#)
syntax
movz Dreg32d, Dreg16s
opcode range 0x5500-0x55BF
example: movz d1.0, d3
※ 16 ビットデータレジスタをゼロ拡張して 32 ビットデータレジスタへ転送します。
24.1.12
回転操作命令
24.1.12.1
Rotate left through carry
rol.w Dreg16
bit 15
0
14
1
13
0
12
1
11
0
10
1
9
1
8
0
7
X
6
X
5
X
4
X
3
Dreg
16d
Even
/Odd
2
1
0
Dreg16d
(Destination
Dreg16#)
6
X
5
X
4
X
3
Dreg
16d
Even
/Odd
2
1
0
Dreg16d
(Destination
Dreg16#)
syntax
rol.w Dreg16d
opcode range 0x5600-0x560F
example: rol.w d0
24.1.12.2
Rotate right through carry
ror.w Dreg16
bit 15
0
14
1
13
0
12
1
11
0
10
1
9
1
8
1
7
X
syntax
ror.w Dreg16d
opcode range 0x5700-0x570F
example: ror.w d0
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
242 頁
Ximo16A
Preliminary
24.1.13
即値シフト命令 (16 ビットワード )
24.1.13.1
Arithmetic shift left 16-bit data register by immediate
asli.w Dreg16, IMM4
bit 15
0
14
1
13
0
12
1
11
1
10
0
9
0
8
0
7
6
5
4
IMM4(0 to 15)
3
Dreg
16s
Even
/Odd
2
1
0
Dreg16d
(Destination
Dreg16#)
syntax
asli.w Dreg16d, IMM4
opcode range 0x5800-0x58FF
example: asli.w d2, 5
24.1.13.2
Arithmetic shift right 16-bit data register by immediate
asri.w Dreg16, IMM4
bit 15
0
14
1
13
0
12
1
11
1
10
0
9
0
8
1
7
6
5
4
IMM4(0 to 15)
3
Dreg
16s
Even
/Odd
2
1
0
Dreg16d
(Destination
Dreg16#)
syntax
asri.w Dreg19d, IMM4
opcode range 0x5900-0x59FF
example: asri.w d2, 5
24.1.13.3
Logical shift left 16-bit data register by immediate
lsli.w Dreg16, IMM4
bit 15
0
14
1
13
0
12
1
11
1
10
0
9
1
8
0
7
6
5
4
IMM4(0 to 15)
3
Dreg
16s
Even
/Odd
2
1
0
Dreg16d
(Destination
Dreg16#)
syntax
lsli.w Dreg16d, IMM4
opcode range 0x5A00-0x5AFF
example: lsli.w d2, 5
24.1.13.4
Logical shift right 16-bit data register by immediate
lsri.w Dreg16, IMM4
bit 15
0
14
1
13
0
12
1
11
1
10
0
9
1
8
1
7
6
5
4
IMM4(0 to 15)
3
Dreg
16s
Even
/Odd
2
1
0
Dreg16d
(Destination
Dreg16#)
syntax
lsri.w Dreg16d, IMM4
opcode range 0x5B00-0x5BFF
example: lsri.w d2, 5
243 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
24.1.14
即値シフト命令 (32 ビットロングワード )
24.1.14.1
Arithmetic shift left 32-bit data register by immediate
asli.l Dreg32, IMM4
bit 15
0
14
1
13
0
12
1
11
1
10
1
9
0
8
0
7
6
5
4
IMM4(0 to 15)
3
X
2
1
0
Dreg32d
(Destination
Dreg32#)
syntax
asli.l Dreg32d, IMM4
opcode range 0x5C00-0x5CF7
example: asli.l d3.2, 5
24.1.14.2
Arithmetic shift right 32-bit data register by immediate
asri.l Dreg32, IMM4
bit 15
0
14
1
13
0
12
1
11
1
10
1
9
0
8
1
7
6
5
4
IMM4(0 to 15)
3
X
2
1
0
Dreg32d
(Destination
Dreg32#)
syntax
asri.l Dreg32d, IMM4
opcode range 0x5D00-5DF7
example: asri.l d3.2, 5
24.1.14.3
Logical shift left 32-bit data register by immediate
lsli.l Dreg32, IMM4
bit 15
0
14
1
13
0
12
1
11
1
10
1
9
1
8
0
7
6
5
4
IMM4(0 to 15)
3
X
2
1
0
Dreg32d
(Destination
Dreg32#)
syntax
lsli.l Dreg32d, IMM4
opcode range 0x5E00-0x5EF7
example: lsli.l d3.2, 5
24.1.14.4
Logical shift right 32-bit data register by immediate
lsri.l Dreg32, IMM4
bit 15
0
14
1
13
0
12
1
11
1
10
1
9
1
8
1
7
6
5
4
IMM4(0 to 15)
3
X
2
1
0
Dreg32d
(Destination
Dreg32#)
syntax
lsri.l Dreg32d, IMM4
opcode range 0x5F00-5FF7
example: lsri.l d3.2, 5
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
244 頁
Ximo16A
Preliminary
24.1.15
ビット操作命令
24.1.15.1
Bit set on 16-bit data register
bset Dreg16, IMM4
bit 15
0
14
1
13
1
12
0
11
0
10
0
9
0
8
0
7
6
5
4
IMM4(0 to 15)
3
Dreg
16d
Even
/Odd
2
1
0
Dreg16d
(Destination
Dreg16#)
3
Dreg
16d
Even
/Odd
2
1
0
Dreg16d
(Destination
Dreg16#)
3
Dreg
16d
Even
/Odd
2
1
0
Dreg16d
(Destination
Dreg16#)
3
Dreg
16d
Even
/Odd
2
1
0
Dreg16d
(Destination
Dreg16#)
syntax
bset Dreg16d, IMM4
opcode range 0x6000-0x60FF
example: bset d7, 8
24.1.15.2
Bit clear on 16-bit data register
bclr Dreg16, IMM4
bit 15
0
14
1
13
1
12
0
11
0
10
0
9
0
8
1
7
6
5
4
IMM4(0 to 15)
syntax
bclr Dreg16d, IMM4
opcode range 0x6100-0x61FF
example: bclr d7, 8
24.1.15.3
Bit toggle on 16-bit data register
btgl Dreg16, IMM4
bit 15
0
14
1
13
1
12
0
11
0
10
0
9
1
8
0
7
6
5
4
IMM4(0 to 15)
syntax
btgl Dreg16d, IMM4
opcode range 0x6200-0x62FF
example: btgl d7, 8
24.1.15.4
Bit test on 16-bit data register
btst Dreg16, IMM4
bit 15
0
14
1
13
1
12
0
11
0
10
0
9
1
8
1
7
6
5
4
IMM4(0 to 15)
syntax
btst Dreg16d, IMM4
opcode range 0x6300-0x63FF
example: btst d7, 8
245 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
24.1.16
16 ビットデータレジスタ短即値演算
24.1.16.1
Add short immediate to 16-bit data register
adsi.w Dreg16, IMM4
bit 15
0
14
1
13
1
12
0
11
0
10
1
9
0
8
0
7
6
5
4
IMM4(0 to 15)
3
Dreg
16d
Even
/Odd
2
1
0
Dreg16d
(Destination
Dreg16#)
syntax
adsi.w Dreg16d, IMM4
opcode range 0x6400-0x64FF
example: adsi.w d7, 8
24.1.16.2
Subtract short immediate from 16-bit data register
sbsi.w Dreg16, IMM4
bit 15
0
14
1
13
1
12
0
11
0
10
1
9
0
8
1
7
6
5
4
IMM4(0 to 15)
3
Dreg
16d
Even
/Odd
2
1
0
Dreg16d
(Destination
Dreg16#)
syntax
sbsi.w Dreg16d, IMM4
opcode range 0x6500-0x65FF
example: sbsi.w d7, 8
24.1.17
32 ビットデータレジスタ短即値演算
24.1.17.1
Add short immediate to 32-bit data register
adsi.l Dreg32, IMM4
bit 15
0
14
1
13
1
12
0
11
0
10
1
9
1
8
0
7
6
5
4
IMM4(0 to 15)
3
0
2
1
0
Dreg32d
(Destination
Dreg32#)
syntax
adsi.l Dreg32d, IMM4
opcode range 0x6600-0x66F7
example: adsi.l d7.6, 8
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
246 頁
Ximo16A
Preliminary
24.1.17.2
Subtract short immediate from 32-bit data register
sbsi.l Dreg32, IMM4
bit 15
0
14
1
13
1
12
0
11
0
10
1
9
1
8
1
7
6
5
4
IMM4(0 to 15)
3
0
2
1
0
Dreg32d
(Destination
Dreg32#)
3
1
2
1
0
Pregd
(Destination
Preg#)
syntax
sbsi.l Dreg32d, IMM4
opcode range 0x6700-0x67F7
example: sbsi.l d7.6, 8
24.1.18
ポインタレジスタ短即値演算
24.1.18.1
Add short immediate to pointer register
adsi.w Preg, IMM4
bit 15
0
14
1
13
1
12
0
11
0
10
1
9
1
8
0
7
6
5
4
IMM4(0 to 15)
syntax
adsi.w Pregd, IMM4
opcode range 0x6608-0x66FF
example: adsi.w p5, 8
24.1.18.2
Subtract short immediate from pointer register
sbsi.w Preg, IMM4
bit 15
0
14
1
13
1
12
0
11
0
10
1
9
1
8
1
7
6
5
4
IMM4(0 to 15)
3
1
2
1
0
Pregd
(Destination
Preg#)
syntax
sbsi.w Pregd, IMM4
opcode range 0x6708-0x67FF
example: sbsi.w p5, 8
247 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
24.1.19
短即値ロード
24.1.19.1
Load short immediate to 16-bit data register
movsi.w Dreg16, IMM5
bit 15
0
14
1
13
1
12
0
11
1
10
0
9
0
8
7
6
5
IMM5(-16 to 15)
4
3
Dreg
16d
Even
/Odd
2
1
0
Dreg16d
(Destination
Dreg16#)
syntax
movsi.w Dreg16d, IMM5
opcode range 0x6800-0x69FF
example: movsi.w d4, 8
24.1.19.2
Load short immediate to 32-bit data register
movsi.l Dreg32, IMM5
bit 15
0
14
1
13
1
12
0
11
1
10
0
9
1
8
7
6
5
IMM5(-16 to 15)
4
3
0
2
1
0
Dreg32d
(Destination
Dreg32#)
3
1
2
1
0
Pregd
(Destination
Preg#)
syntax
movsi.l Dreg32d, IMM5
opcode range 0x6A00-0x6BF7
example: movsi.l d5.4, 8
24.1.19.3
Load short immediate to pointer register
movsi.w Preg, IMM5
bit 15
0
14
1
13
1
12
0
11
1
10
0
9
1
8
7
6
5
IMM5(-16 to 15)
4
syntax
movsi.w Pregd, IMM5
opcode range 0x6A08-0BFF
example: movsi.l p4, 8
24.1.20
レジスタ間データ転送
コアレジスタ間のデータ転送を行います。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
248 頁
Ximo16A
Preliminary
24.1.20.1
Move register
mov.w Reg, Reg
mov.l Dreg32, Dreg32
bit 15
0
14
1
13
1
12
1
11 10 9
Source
Register
Group#
8
7
6
Destination
Register
Group#
5
4
3
Regs
(Source
Register#)
2
1
0
Regd
(Destination
Register#)
syntax
mov.w Regd, Regs
mov.l Dreg32d, Dreg32s
opcode range 0x7000-0x7FFF
example: mov.w d1, d0
example: mov.w a1h, d15
example: mov.l d1.0, d7.6
24.1.21
プログラムフロー制御命令 ( ショートオフセットによる条件付分岐 )
24.1.21.1
Conditional branch
bra IMM7, <condition>
bit 15
1
14
0
13
0
12
0
11 10 9
8
IMM7(-64 to 63)
7
6
5
4
3
2
condition
1
0
syntax
bra IMM7, <condition>
opcode range 0x8000-0x8FFF
bra 5, nc
※ IMM7 は PC からのオフセット値です。
※分岐予測の状態及びコンディションコードのパイプライン依存関係によって所要サイクル数が変
化します。
249 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
32 ビット長命令 1
24.2
32-bit 長の命令は第 1 ワード w1 と第 2 ワード w2 から成り、以下のように表します。
bit 15
w1
w2
14
13
12
11
10
9
8
7
6
24.2.1
ロード命令 ( 相対アドレス )
24.2.1.1
Load 16-bit data register
5
4
3
2
1
0
mov.w Dreg16, (IMM16, Preg)
bit 15
1
14
1
13
0
12
0
11
0
10
0
9
0
8
0
7
0
6
Dreg
16d
Even
/Odd
5
4
3
Dreg16d
(Destination
Dreg16#)
2
1
Pointer
Preg#
0
7
1
6
0
5
4
3
Dreg32d
(Destination
Dreg32#)
2
1
Pointer
Preg#
0
7
1
6
1
5
4
3
Pregd
(Destination
Preg#)
2
1
Pointer
Preg#
0
IMM16
syntax
mov.w Dreg16d, (IMM16, Preg)
opcode range 0xC000_0000-0xC07F_FFFF
example: mov.w d10, (0x0100, p3)
24.2.1.2
Load 32-bit data register
mov.l Dreg32, (IMM16, Preg)
bit 15
1
14
1
13
0
12
0
11
0
10
0
9
0
8
0
IMM16
syntax
mov.l Dreg32d, (IMM16, Preg)
opcode range 0xC080_0000-0xC0BF_FFFF
example: mov.l d9.8, (12, p0)
24.2.1.3
Load pointer register
mov.w Preg, (IMM16, Preg)
bit 15
1
14
1
13
0
12
0
11
0
10
0
9
0
8
0
IMM16
syntax
mov.w Pregd, (IMM16, Preg)
opcode range 0xC0C0_0000-0xC0FF_FFFF
example: mov.w p0, (12, p3)
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
250 頁
Ximo16A
Preliminary
24.2.2
ロード命令 ( 絶対アドレス )
24.2.2.1
Load 16-bit data register
mov.w Dreg16, (IMM16)
bit 15
1
14
1
13
0
12
0
11
0
10
0
9
0
8
1
7
0
6
Dreg
16d
Even
/Odd
5
4
3
Dreg16d
(Destination
Dreg16#)
2
X
1
X
0
X
8
1
7
1
6
0
5
4
3
Dreg32d
(Destination
Dreg32#)
2
X
1
X
0
X
8
1
7
1
6
1
5
4
3
Pregd
(Destination
Preg#)
2
X
1
X
0
X
IMM16
syntax
mov.w Dreg16d, (IMM16)
opcode range 0xC100_0000-0xC178_FFFF
example: mov.w d10, (0x0100)
24.2.2.2
Load 32-bit data register
mov.l Dreg32, (IMM16)
bit 15
1
14
1
13
0
12
0
11
0
10
0
9
0
IMM16
syntax
mov.l Dreg32d, (IMM16)
opcode range 0xC180_0000-0xC1B8_FFFF
example: mov.l d9.8, (12)
24.2.2.3
Load pointer register
mov.w Preg, (IMM16)
bit 15
1
14
1
13
0
12
0
11
0
10
0
9
0
IMM16
syntax
mov.w Pregd, (IMM16, Preg)
opcode range 0xC1C0_0000-0xC1F8_FFFF
example: mov.w p0, (12)
251 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
24.2.3
ストア命令 ( 相対アドレス )
24.2.3.1
Store 16-bit data register
Ximo16A
mov.w (IMM16, Preg), Dreg16
bit 15
1
14
1
13
0
12
0
11
0
10
0
9
1
8
0
7
0
6
Dreg
16s
Even
/Odd
5
4
3
Dreg16s
(Source
Dreg16#)
2
1
Pointer
Preg#
0
7
1
6
0
5
4
3
Dreg32s
(Source
Dreg32#)
2
1
Pointer
Preg#
0
7
1
6
1
5
4
3
Pregs
(Source
Dreg32#)
2
1
Pointer
Preg#
0
IMM16
syntax
mov.w (IMM16, Preg), Dreg16s
opcode range 0xC200_0000-0xC27F_FFFF
example: mov.w (0x0100, p0-), d2
24.2.3.2
Store 32-bit data register
mov.l (IMM16, Preg), Dreg32
bit 15
1
14
1
13
0
12
0
11
0
10
0
9
1
8
0
IMM16
syntax
mov.l (IMM16, Preg), Dreg32s
opcode range 0xC280_0000-0xC2BF_FFFF
example: mov.l (12, p1), d11.10
24.2.3.3
Store pointer register
mov.w (IMM16, Preg), Preg
bit 15
1
14
1
13
0
12
0
11
0
10
0
9
1
8
0
IMM16
syntax
mov.w (IMM16, Preg), Preg
opcode range 0xC2C0_0000-0xC2FF_FFFF
example: mov.w (0x0100, p4), p5
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
252 頁
Ximo16A
Preliminary
24.2.4
ストア命令 ( 絶対アドレス )
24.2.4.1
Store 16-bit data register
mov.w (IMM16), Dreg16
bit 15
1
14
1
13
0
12
0
11
0
10
0
9
1
8
1
7
0
6
Dreg
16s
Even
/Odd
5
4
3
Dreg16s
(Source
Dreg16#)
2
X
1
X
0
X
8
1
7
1
6
0
5
4
3
Dreg32s
(Source
Dreg32#)
2
X
1
X
0
X
8
1
7
1
6
1
5
4
Pregs
(Source
Preg#)
2
X
1
X
0
X
IMM16
syntax
mov.w (IMM16), Dreg16s
opcode range 0xC300_0000-0xC378_FFFF
example: mov.w (0x0100), d10
24.2.4.2
Store 32-bit data register
mov.l (IMM16), Dreg32
bit 15
1
14
1
13
0
12
0
11
0
10
0
9
1
IMM16
syntax
mov.l (IMM16), Dreg32s
opcode range 0xC380_0000-0xC3B8_FFFF
example: mov.l (0x0102), d7.6
24.2.4.3
Store pointer register
mov.w (IMM16), Preg
bit 15
1
14
1
13
0
12
0
11
0
10
0
9
1
3
IMM16
syntax
mov.w (IMM16), Pregs
opcode range 0xC3C0_0000-0xC3F8_FFFF
example: mov.w (0x0100), p5
253 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
24.2.5
即値ロード
24.2.5.1
Load immediate to register
Ximo16A
movi.w Reg, IMM16
bit 15
1
14
1
13
0
12
0
11
0
10
1
9
0
8
X
7
X
6
X
5
4
3
Destination
Register
Group#
2
1
0
Regd
(Destination
Register#)
IMM16
syntax
movi.w Regd, IMM16
opcode range 0xC400_0000-0xC43F_FFFF
example: movi.w d0, 0x0011
example: movi.w p5, 0xFE00
example: movi.w a0h, 0x75C0
※レジスタグループには Dreg32 を取ることはできません。
24.2.6
即値演算
24.2.6.1
Add immediate to 16-bit data register
addi.w Dreg16, IMM16
bit 15
1
14
1
13
0
12
0
11
0
10
1
9
1
8
0
7
0
6
0
5
0
4
0
3
Dreg
16d
Even
/Odd
2
1
0
Dreg16d
(Destination
Dreg16#)
IMM16
syntax
addi.w Dreg16d, IMM16
opcode range 0xC600_0000-0xC60F_FFFF
example: addi.w d0, 0x5200
24.2.6.2
Subtract immediate from 16-bit data register
subi.w Dreg16, IMM16
bit 15
1
14
1
13
0
12
0
11
0
10
1
9
1
8
0
7
0
6
0
5
0
4
1
3
Dreg
16d
Even
/Odd
2
1
0
Dreg16d
(Destination
Dreg16#)
IMM16
syntax
subi.w Dreg16d, IMM16
opcode range 0xC610_0000-0xC61F_FFFF
example: subi.w d0, 0x5200
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
254 頁
Ximo16A
Preliminary
24.2.6.3
Compare 16-bit data register with immediate
cmpi.w Dreg16, IMM16
bit 15
1
14
1
13
0
12
0
11
0
10
1
9
1
8
0
7
0
6
0
5
1
4
0
3
Dreg
16d
Even
/Odd
2
1
0
Dreg16d
(Destination
Dreg16#)
IMM16
syntax
cmpi.w Dreg16d, IMM16
opcode range 0xC620_0000-0xC62F_FFFF
example: cmpi.w d0, 0x5200
24.2.6.4
Logical AND immediate on 16-bit data register
andi.w Dreg16, IMM16
bit 15
1
14
1
13
0
12
0
11
0
10
1
9
1
8
0
7
0
6
1
5
0
4
0
3
Dreg
16d
Even
/Odd
2
1
0
Dreg16d
(Destination
Dreg16#)
IMM16
syntax
andi.w Dreg16d, IMM16
opcode range 0xC640_0000-0xC64F_FFFF
example: andi.w d0, 0x5200
24.2.6.5
Logical OR immediate on 16-bit data register
ori.w Dreg16, IMM16
bit 15
1
14
1
13
0
12
0
11
0
10
1
9
1
8
0
7
0
6
1
5
0
4
1
3
Dreg
16d
Even
/Odd
2
1
0
Dreg16d
(Destination
Dreg16#)
IMM16
syntax
ori.w Dreg16d, IMM16
opcode range 0xC650_0000-0xC65F_FFFF
example: ori.w d0, 0x5200
24.2.6.6
Logical excusive OR immediate on 16-bit data register
eori.w Dreg16, IMM16
bit 15
1
14
1
13
0
12
0
11
0
10
1
9
1
8
0
7
0
6
1
5
1
4
0
3
Dreg
16d
Even
/Odd
2
1
0
Dreg16d
(Destination
Dreg16#)
IMM16
syntax
eori.w Dreg16d, IMM16
opcode range 0xC660_0000-0xC66F_FFFF
example: eori.w d0, 0x5200
255 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
24.2.6.7
Ximo16A
Add immediate to pointer register
addi.w Preg, IMM16
bit 15
1
14
1
13
0
12
0
11
0
10
1
9
1
8
0
7
1
6
0
5
0
4
0
3
X
2
1
0
Pregd
(Destination
Preg#)
3
X
2
1
0
Pregd
(Destination
Preg#)
IMM16
syntax
addi.w Pregd, IMM16
opcode range 0xC680_0000-0xC687_FFFF
example: addi.w p5, 0x5200
24.2.6.8
Subtract immediate from pointer register
subi.w Preg, IMM16
bit 15
1
14
1
13
0
12
0
11
0
10
1
9
1
8
0
7
1
6
0
5
0
4
1
7
0
6
0
5
0
4
3
2
conditon
IMM16
syntax
subi.w Pregd, IMM16
opcode range 0xC690_0000-0xC697_FFFF
example: subi.w fp, 0x5200
24.2.7
プログラムフロー制御
24.2.7.1
Conditional jump
jmp IMM16, <condition>
bit 15 14
1
1
IMM16
13
0
12
1
11
0
10
0
9
0
8
0
1
0
syntax
jmp IMM16, <conditon>
opcode range 0xD000_0000-0xD01F_FFFF
example: jmp 0x1000, ge
※ condition フィールドは表 4「コンディションコード一覧」を参照して下さい。
24.2.7.2
Call subroutine
call IMM16
bit 15 14
1
1
IMM16
13
0
12
1
11
0
10
0
9
0
8
0
7
0
6
0
5
1
4
X
3
X
2
X
1
X
0
X
syntax
call IMM16, <conditon>
opcode range 0xD020_0000-0xD020_FFFF
example: call 0x1000
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
256 頁
Ximo16A
Preliminary
24.2.7.3
Loop setup
loop Creg, IMM16
bit 15
1
14
1
13
0
12
1
11
0
10
0
9
1
8
7
Creg X
c0:0
c1:1
6
X
5
X
4
X
3
X
2
X
1
X
0
X
8
7
6
5
4
Creg IMM8(0 to 255)
c0:0
c1:1
3
2
1
0
2
1
0
IMM16
syntax
loop Creg, IMM16
opcode range 0xD200_0000-0xD300_FFFF
example: loop c1, 0x3000
24.2.7.4
Loop setup by immediate
loopi Creg, IMM16, IMM8
bit 15
1
14
1
13
0
12
1
11
0
10
1
9
0
IMM16
syntax
loopi Creg, IMM16, IMM8
opcode range 0xD400_0000-0xD5FF_FFFF
example: loopi c0, 0x3000, 32
24.2.8
条件付データ転送
24.2.8.1
Conditional move 16-bit data register
cmov.w Dreg16, Dreg16, <condition>
bit 15
1
X
14
1
X
13
0
X
12
1
X
11 10
0
0
Dreg X
16s
Even
/Odd
9
8
7
0
0
0
Dreg16s
(Source
Dreg16#)
6
1
X
5
0
X
4
3
conditon
X
Dreg
16d
Even
/Odd
Dreg16d
(Destintaion
Dreg16#)
syntax
cmov.w Dreg16d, Dreg16s, <conditon>
opcode range 0xD040_0000-0xD05F_0B8F
example: cmov.w d5, d3, le
※ condition フィールドは「2.2.1.2 コンディションコード」を参照して下さい。
257 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
24.2.8.2
Ximo16A
Conditional move 32-bit data register
cmov.l Dreg32, Dreg32, <condition>
bit 15
1
X
14
1
X
13
0
X
12
1
X
11
0
X
10
0
X
9
8
7
0
0
0
Dreg32s
(Source
Dreg32#)
6
1
X
5
1
X
4
3
2
1
0
conditon
X
X
Dreg32d
(Destintaion
Dreg32#)
syntax
cmov.l Dreg32d, Dreg32s, <conditon>
opcode range 0xD060_0000-0xD07F_0387
example: cmov.l d5.4, d3.2, le
※ condition フィールドは「2.2.1.2 コンディションコード」を参照して下さい。
24.2.9
I/O 操作命令
24.2.9.1
Bit set on memory
bset (IMM16), IMM4
bit 15 14
1
1
IMM16
13
0
12
1
11
0
10
0
9
0
8
0
7
1
6
0
5
0
4
0
3
2
IMM4
1
0
8
0
7
1
6
0
5
0
4
1
3
2
IMM4
1
0
8
0
7
1
6
0
5
1
4
1
3
2
IMM4
1
0
syntax
bset (IMM16), IMM4
opcode range 0xD080_0000-0xD08F_FFFF
example: bset (0x0100), 8
24.2.9.2
Bit clear on memory
bclr (IMM16), IMM4
bit 15 14
1
1
IMM16
13
0
12
1
11
0
10
0
9
0
syntax
bclr (IMM16), IMM4
opcode range 0xD090_0000-0xD09F_FFFF
example: bclr (0x0100), 8
24.2.9.3
Bit test on memory
btst (IMM16), IMM4
bit 15 14
1
1
IMM16
13
0
12
1
11
0
10
0
9
0
syntax
btst (IMM16), IMM4
opcode range 0xD0B0_0000-0xD0BF_FFFF
example: btst (0x0100), 8
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
258 頁
Ximo16A
Preliminary
24.2.10
スタックフレーム構築
24.2.10.1
Link
lnk IMM16
bit 15 14
1
1
IMM16
13
0
12
1
11
0
10
0
9
0
8
0
7
1
6
1
5
0
4
X
3
X
2
X
1
X
0
X
2
1
0
Stack_Reg
(Source
Stack_Reg#)
X
X
X
syntax
lnk IMM16
opcode range 0xD0C0_0000-0xD0C0_FFFF
example: lnk 0x50
24.2.11
内部スタックレジスタアクセス
24.2.11.1
Move stack register to d0 register
movst.w d0, Stack_Reg
bit 15
1
X
14
1
13
0
12
1
11
0
10
0
9
0
8
0
7
1
6
1
5
1
4
0
3
X
X
X
X
X
X
X
X
X
X
X
X
X
syntax
movst.w d0, Stack_Reg
opcode range 0xD0E0_0000-0xD0E7_0000
example: movst.w d0, sst
24.2.11.2
Move d0 register to stack register
movst.w Stack_Reg, d0
bit 15
1
X
14
1
13
0
12
1
11
0
10
0
9
0
8
0
7
1
6
1
5
1
4
1
3
X
X
X
X
X
X
X
X
X
X
X
X
X
2
1
0
Stack_Reg
(Destintaion
Stack_Reg#)
X
X
X
syntax
movst.w Stack_Reg, d0
opcode range 0xD0F0_0000-0xD0F7_0000
example: movst.w sc0, d0
259 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
Ximo16A
32 ビット長命令 2( 並列転送可能 DSP 演算命令 )
24.3
この命令は DSP 用の算術演算命令を中心に構成されます。ここにある命令は、並列にロード命令、
ストア命令を発行することができ、64 ビット長の複合命令として処理することが可能です。
並列転送の有無は、下表のように命令 1 ワード目の bit11 によって示され、並列転送が有る場合 P=1、
並列転送が無い場合 P=0 となります。
bit 15
1
14
1
13
1
12
0
11 10
P:
Paralle
l
Move
9
8
7
6
5
4
24.3.1
16 ビットデータレジスタ演算命令
24.3.1.1
Add 16-bit data register (with saturate)
3
2
1
0
3
ns:0
sa:1
Dreg
16d
Even
/Odd
2
X
1
X
0
X
add.w Dreg16, Dreg16, Dreg16, <ns/sa>
bit 15
1
X
14
1
13
1
12
0
11
P
10
0
9
0
8
0
X
X
X
Dreg
16s0
Even
/Odd
Dreg Dreg16s0
16s1 (Source0
Even Dreg16#)
/Odd
7
0
6
0
5
0
4
0
Dreg16s1
(Source1
Dreg16#)
Dreg16d
(Destination
Dreg16#)
syntax
add.w Dreg16d, Dreg16s0, Dreg16s1, <ns/sa>
opcode range 0xE000_0000-0xE008_0FFF
example: add.w d1, d0, d2, sa
※この命令では <ns/sa> オプションを使用して飽和処理の有無を選択します。
24.3.1.2
Subtract 16-bit data register (with saturate)
sub.w Dreg16, Dreg16, Dreg16, <ns/sa>
bit 15
1
X
14
1
13
1
12
0
11
P
10
0
9
0
8
0
X
X
X
Dreg
16s0
Even
/Odd
Dreg Dreg16s0
16s1 (Source0
Even Dreg16#)
/Odd
7
0
6
0
5
0
Dreg16s1
(Source1
Dreg16#)
4
1
3
ns:0
sa:1
Dreg
16d
Even
/Odd
2
X
1
X
0
X
Dreg16d
(Destination
Dreg16#)
syntax
sub.w Dreg16d, Dreg16s0, Dreg16s1, <ns/sa>
opcode range 0xE010_0000-0xE018_0FFF
example: sub.w d8, d2, d6, ns
※この命令では <ns/sa> オプションを使用して飽和処理の有無を選択します。
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
260 頁
Ximo16A
Preliminary
24.3.2
32 ビットデータレジスタ演算命令
24.3.2.1
Add 32-bit data register (with saturate)
add.l Dreg32, Dreg32, Dreg32, <ns/sa>
bit 15
1
X
14
1
13
1
12
0
11
P
10
0
9
0
8
0
X
X
X
X
X
Dreg32s0
(Source0
Dreg32#)
7
0
6
0
5
1
4
0
Dreg32s1
(Source1
Dreg32#)
3
2
1
0
ns:0 X
X
X
sa:1
X
Dreg32d
(Destination
Dreg32#)
syntax
add.l Dreg32d, Dreg32s0, Dreg32s1, <ns/sa>
opcode range 0xE020_0000-0xE028_03F7
example: add.l d1.0, d7.6, d5.4, sa
※この命令では <ns/sa> オプションを使用して飽和処理の有無を選択します。
24.3.2.2
Subtract 32-bit data register (with saturate)
sub.l Dreg32, Dreg32, Dreg32, <ns/sa>
bit 15
1
X
14
1
13
1
12
0
11
P
10
0
9
0
8
0
X
X
X
X
X
Dreg32s0
(Source0
Dreg32#)
7
0
6
0
5
1
Dreg32s1
(Source1
Dreg32#)
4
1
3
2
1
0
ns:0 X
X
X
sa:1
X
Dreg32d
(Destination
Dreg32#)
syntax
sub.l Dreg32d, Dreg32s0, Dreg32s1, <ns/sa>
opcode range 0xE030_0000-0xE038_03F7
example: sub.l d1.0, d7.6, d5.4, sa
※この命令では <ns/sa> オプションを使用して飽和処理の有無を選択します。
24.3.3
乗算命令
24.3.3.1
Multiply data register
mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu>
bit 15
1
X
14
1
13
1
12
0
11
P
10
0
9
0
8
0
X
X
X
Dreg
16s0
Even
/Odd
Dreg Dreg16s0
16s1 (Source0
Even Dreg16#)
/Odd
7
1
6
0
5
0
4
3
fr:00
ss:01
su:10
uu:11
X
Dreg16s1
(Source1
Dreg16#)
2
X
1
X
0
X
Dreg32d
(Destination
Dreg32#)
syntax
mul Dreg32d, Dreg16s0, Dreg16s1, <fr/ss/su/uu>
opcode range 0xE080_0000-0xE098_0FF7
example: mul d1.0, d5, d4, fr
※この命令では <fr/ss/su/uu> オプションを使用して乗算モードを選択します。
261 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
24.3.3.2
Ximo16A
Clear and multiply data register
clr A, mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu>
bit 15
1
X
14
1
13
1
12
0
11
P
10
0
9
0
8
0
X
X
Ad Dreg Dreg Dreg16s0
a0:0 16s0 16s1 (Source0
a1:1 Even Even Dreg16#)
/Odd /Odd
7
1
6
0
5
1
4
3
fr:00
ss:01
su:10
uu:11
X
Dreg16s1
(Source1
Dreg16#)
2
X
1
X
0
X
Dreg32d
(Destination
Dreg32#)
syntax
clr Ad, mul Dreg32d, Dreg16s0, Dreg16s1, <fr/ss/su/uu>
opcode range 0xE0A0_0000-0xE0B8_1FF7
example: clr a0, mul d1.0, d2, d3, ss
24.3.3.3
Add and multiply data register
add A, Dreg32, <s/u>, mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu>
bit 15
1
X
14
1
13
1
s/u X
s:0
u:1
12
0
11
P
10
0
9
0
8
0
7
1
Ad Dreg Dreg Dreg16s0
a0:0 16s0 16s1 (Source0
a1:1 Even Even Dreg16#)
/Odd /Odd
6
1
5
0
4
3
fr:00
ss:01
su:10
uu:11
X
Dreg16s1
(Source1
Dreg16#)
2
1
0
Dreg32s
(Source
Dreg32#)
Dreg32d
(Destination
Dreg32#)
syntax
add Ad, Dreg32s, <s/u>, mul Dreg32d, Dreg16s0, Dreg16s1, <fr/ss/su/uu>
opcode range 0xE0C0_0000-0xE0DF_5FF7
example: add a0, d1.0, s, mul d1.0, d2, d3, fr
24.3.3.4
Subtract and multiply data register
sub A, Dreg32, <s/u>, mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu>
bit 15
1
X
14
1
13
1
s/u X
s:0
u:1
12
0
11
P
10
0
9
0
8
0
Ad Dreg Dreg Dreg16s0
a0:0 16s0 16s1 (Source0
a1:1 Even Even Dreg16#)
/Odd /Odd
7
1
6
1
5
1
4
3
fr:00
ss:01
su:10
uu:11
X
Dreg16s1
(Source1
Dreg16#)
2
1
0
Dreg32s
(Source
Dreg32#)
Dreg32d
(Destination
Dreg32#)
syntax
sub Ad, Dreg32s, <s/u>, mul Dreg32d, Dreg16s0, Dreg16s1, <fr/ss/su/uu>
opcode range 0xE0E0_0000-0xE0FF_5FF7
example: sub a0, d1.0, s, mul d1.0, d2, d3, fr
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
262 頁
Ximo16A
Preliminary
24.3.4
アキュームレータ - データレジスタ算術演算命令
24.3.4.1
Add 16-bit data register to accumulator
add A, Dreg16, <s/u>
bit 15
1
14
1
13
1
Dreg s/u X
16s s:0
Even u:1
/Odd
12
0
11
P
Ad X
a0:0
a1:1
10
0
9
0
8
1
7
0
6
0
5
0
4
0
3
0
X
X
X
X
X
X
X
X
2
1
0
Dreg16s
(Source
Dreg16#)
X
X
X
syntax
add Ad, Dreg16s, <s/u>
opcode range 0xE100_0000-0xE107_D000
example: add a1, d11, s
24.3.4.2
Subtract 16-bit data register from accumulator
sub A, Dreg16, <s/u>
bit 15
1
14
1
13
1
Dreg s/u X
16s s:0
Even u:1
/Odd
12
0
11
P
Ad X
a0:0
a1:1
10
0
9
0
8
1
7
0
6
0
5
0
4
0
3
1
X
X
X
X
X
X
X
X
2
1
0
Dreg16s
(Source
Dreg16#)
X
X
X
syntax
sub Ad, Dreg16s, <s/u>
opcode range 0xE108_0000-0xE10F_D000
example: sub a1, d11, s
24.3.4.3
Add 32-bit data register to accumulator
add A, Dreg32, <s/u>
bit 15
1
X
14
1
13
1
s/u X
s:0
u:1
12
0
11
P
Ad X
a0:0
a1:1
10
0
9
0
8
1
7
0
6
0
5
0
4
1
3
0
X
X
X
X
X
X
X
X
2
1
0
Dreg32s
(Source
Dreg32#)
X
X
X
syntax
add Ad, Dreg32s, <s/u>
opcode range 0xE110_0000-0xE117_5000
example: add a1, d7.6, u
263 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
24.3.4.4
Ximo16A
Subtract 32-bit data register from accumulator
sub A, Dreg32, <s/u>
bit 15
1
X
14
1
13
1
s/u X
s:0
u:1
12
0
11
P
Ad X
a0:0
a1:1
10
0
9
0
8
1
7
0
6
0
5
0
4
1
3
1
X
X
X
X
X
X
X
X
2
1
0
Dreg32s
(Source
Dreg32#)
X
X
X
syntax
sub Ad, Dreg32s, <s/u>
opcode range 0xE118_0000-0xE11F_5000
example: sub a0, d7.6, u
24.3.5
シフト命令
24.3.5.1
Arithmetic shift left accumulator by register
asl A, Dreg32
bit 15
1
X
14
1
13
1
12
0
11
P
X
X
Ad X
a0:0
a1:1
10
0
9
0
8
1
7
0
6
0
5
1
4
0
3
0
X
X
X
X
X
X
X
X
2
1
0
Dreg32s
(Source
Dreg32#)
X
X
X
syntax
asl Ad, Dreg32s
opcode range 0xE120_0000-0xE127_1000
example: asl a0, d5.4
24.3.5.2
Arithmetic shift right accumulator by register
asr A, Dreg32
bit 15
1
X
14
1
13
1
12
0
11
P
X
X
Ad X
a0:0
a1:1
10
0
9
0
8
1
7
0
6
0
5
1
4
0
3
1
X
X
X
X
X
X
X
X
2
1
0
Dreg32s
(Source
Dreg32#)
X
X
X
syntax
asr Ad, Dreg32s
opcode range 0xE128_0000-0xE12F_1000
example: asr a0, d5.4
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
264 頁
Ximo16A
Preliminary
24.3.5.3
Logical shift left accumulator by register
lsl A, Dreg32
bit 15
1
X
14
1
13
1
12
0
11
P
X
X
Ad X
a0:0
a1:1
10
0
9
0
8
1
7
0
6
0
5
1
4
1
3
0
X
X
X
X
X
X
X
X
2
1
0
Dreg32s
(Source
Dreg32#)
X
X
X
syntax
lsl Ad, Dreg32s
opcode range 0xE130_0000-0xE137_1000
example: lsl a0, d5.4
24.3.5.4
Logical shift right accumulator by register
lsr A, Dreg32
bit 15
1
X
14
1
13
1
12
0
11
P
X
X
Ad X
a0:0
a1:1
10
0
9
0
8
1
7
0
6
0
5
1
4
1
3
1
X
X
X
X
X
X
X
X
2
1
0
Dreg32s
(Source
Dreg32#)
X
X
X
syntax
lsr Ad, Dreg32s
opcode range 0xE138_0000-0xE13F_1000
example: lsr a0, d5.4
24.3.6
即値シフト命令
24.3.6.1
Arithmetic shift left accumulator by immediate
asli A, IMM4
bit 15
1
X
14
1
X
13
1
X
12 11
0
P
Ad X
a0:0
a1:1
10
0
X
9
0
X
8
1
X
7
0
X
6
1
X
5
0
X
4
0
X
3
2
1
0
0
X
X
X
IMM4(0 to 15)
syntax
asli Ad, IMM4
opcode range 0xE140_0000-0xE140_100F
example: asli a0, 4
265 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
24.3.6.2
Ximo16A
Arithmetic shift right accumulator by immediate
asri A, IMM4
bit 15
1
X
14
1
X
13
1
X
12 11
0
P
Ad X
a0:0
a1:1
10
0
X
9
0
X
8
1
X
7
0
X
6
1
X
5
0
X
4
0
X
3
2
1
0
1
X
X
X
IMM4(0 to 15)
syntax
asri Ad, IMM4
opcode range 0xE148_0000-0xE148_100F
example: asri a0, 4
24.3.6.3
Logical shift left accumulator by immediate
lsli A, IMM4
bit 15
1
X
14
1
X
13
1
X
12 11
0
P
Ad X
a0:0
a1:1
10
0
X
9
0
X
8
1
X
7
0
X
6
1
X
5
0
X
4
1
X
3
2
1
0
0
X
X
X
IMM4(0 to 15)
syntax
lsli Ad, IMM4
opcode range 0xE150_0000-0xE150_100F
example: lsli a0, 4
24.3.6.4
Logical shift right accumulator by immediate
lsri A, IMM4
bit 15
1
X
14
1
X
13
1
X
12 11
0
P
Ad X
a0:0
a1:1
10
0
X
9
0
X
8
1
X
7
0
X
6
1
X
5
0
X
4
1
X
3
2
1
0
1
X
X
X
IMM4(0 to 15)
5
0
X
4
0
X
3
0
X
syntax
lsri Ad, IMM4
opcode range 0xE158_0000-0xE158_100F
example: lsri a0, 4
24.3.7
アキュームレータ間演算命令
24.3.7.1
Add accumulator
add A, A
bit 15
1
X
14
1
X
13
1
As
a0:0
a1:1
12 11
0
P
Ad X
a0:0
a1:1
10
0
X
9
0
X
8
1
X
7
1
X
6
0
X
2
X
X
1
X
X
0
X
X
syntax
add Ad, As
opcode range 0xE180_0000-0xE180_3000
example: add a0, a1
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
266 頁
Ximo16A
Preliminary
24.3.7.2
Subtract accumulator
sub A, A
bit 15
1
X
14
1
X
13
1
As
a0:0
a1:1
12 11
0
P
Ad X
a0:0
a1:1
10
0
X
9
0
X
8
1
X
7
1
X
6
0
X
5
0
X
4
0
X
3
1
X
2
X
X
1
X
X
0
X
X
5
0
X
4
1
X
3
0
X
2
X
X
1
X
X
0
X
X
syntax
sub Ad, As
opcode range 0xE188_0000-0xE188_3000
example: sub a0, a1
24.3.7.3
Add accumulator with left shift
adl A, A
bit 15
1
X
14
1
X
13
1
As
a0:0
a1:1
12 11
0
P
Ad X
a0:0
a1:1
10
0
X
9
0
X
8
1
X
7
1
X
6
0
X
syntax
adl Ad, As
opcode range 0xE190_0000-0xE190_3000
example: adl a0, a1
24.3.7.4
Subtract accumulator with left shift
sbl A, A
bit 15
1
X
14
1
X
13
1
As
a0:0
a1:1
12 11
0
P
Ad X
a0:0
a1:1
10
0
X
9
0
X
8
1
X
7
1
X
6
0
X
5
0
X
4
1
X
3
1
X
2
X
X
1
X
X
0
X
X
7
1
X
6
0
X
5
1
X
4
0
X
3
0
X
2
X
X
1
X
X
0
X
X
syntax
sbl Ad, As
opcode range 0xE198_0000-0xE198_3000
example: sbl a0, a1
24.3.7.5
Compare accumulator
cmp A, A
bit 15
1
X
14
1
X
13
1
As
a0:0
a1:1
12 11
0
P
Ad X
a0:0
a1:1
10
0
X
9
0
X
8
1
X
syntax
cmp Ad, As
opcode range 0xE1A0_0000-0xE1A0_3000
example: cmp a0, a1
267 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
24.3.7.6
Ximo16A
Negate value on accumulator
neg A, A
bit 15
1
X
14
1
X
13
1
As
a0:0
a1:1
12 11
0
P
Ad X
a0:0
a1:1
10
0
X
9
0
X
8
1
X
7
1
X
6
1
X
5
0
X
4
0
X
3
0
X
2
X
X
1
X
X
0
X
X
syntax
neg Ad, As
opcode range 0xE1C0_0000-0xE1C0_3000
example: neg a0, a1
24.3.7.7
Absolute value on accumulator
abs A, A
bit 15
1
X
14
1
X
13
1
As
a0:0
a1:1
12 11
0
P
Ad X
a0:0
a1:1
10
0
X
9
0
X
8
1
X
7
1
X
6
1
X
5
0
X
4
0
X
3
1
X
2
X
X
1
X
X
0
X
X
8
1
X
7
1
X
6
1
X
5
0
X
4
1
X
3
0
X
2
X
X
1
X
X
0
X
X
7
1
X
6
1
X
5
0
X
4
1
X
3
1
X
2
X
X
1
X
X
0
X
X
syntax
abs Ad, As
opcode range 0xE1C8_0000-0xE1C8_3000
example: abs a0, a1
24.3.7.8
Saturate accumulator
sat A, A
bit 15
1
X
14
1
X
13
1
As
a0:0
a1:1
12 11
0
P
Ad X
a0:0
a1:1
10
0
X
9
0
X
syntax
sat Ad, As
opcode range 0xE1D0_0000-0xE1D0_3000
example: sat a0, a1
24.3.7.9
Round on accumulator
rnd A, A
bit 15
1
X
14
1
X
13
1
As
a0:0
a1:1
12 11
0
P
Ad X
a0:0
a1:1
10
0
X
9
0
X
8
1
X
syntax
rnd Ad, As
opcode range 0xE1D8_0000-0xE1D8_3000
example: rnd a0, a1
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
268 頁
Ximo16A
Preliminary
24.3.7.10
Move accumulator to accumulator
mov A, A
bit 15
1
X
14
1
X
13
1
As
a0:0
a1:1
12 11
0
P
Ad X
a0:0
a1:1
10
0
X
9
0
X
8
1
X
7
1
X
6
1
X
5
1
X
4
0
X
3
0
X
2
X
X
1
X
X
0
X
X
8
1
X
7
1
X
6
1
X
5
1
X
4
0
X
3
1
X
2
X
X
1
X
X
0
X
X
syntax
mov Ad, As
opcode range 0xE1E0_0000-0xE1E0_3000
example: mov a0, a1
24.3.7.11
Clear accumulator
clr A
bit 15
1
X
14
1
X
13
1
X
12 11
0
P
Ad X
a0:0
a1:1
10
0
X
9
0
X
syntax
clr Ad
opcode range 0xE1E8_0000-0xE1E8_1000
example: clr a0
24.3.8
アキュームレータレジスタ - データレジスタ間転送命令
24.3.8.1
Move accumulator to 16-bit data register
mov.w Dreg16, A, <s/u>
bit 15
1
X
14
1
s/u
s:0
u:1
13 12
1
0
As X
a0:0
a1:1
11
P
X
10
0
X
9
1
X
8
0
X
7
0
X
6
0
X
5
0
X
4
0
X
3
X
Dreg
16d
Even
/Odd
2
1
0
X
X
X
Dreg16d
(Destination
Dreg16#)
syntax
mov.w Dreg16d, As, <s/u>
opcode range 0xE200_0000-0xE200_600F
example: mov.w d0, a0, s
269 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版
Preliminary
24.3.8.2
Ximo16A
Move accumulator to 32-bit data register
mov.l Dreg32, A, <s/u>
bit 15
1
X
14
1
s/u
s:0
u:1
13 12
1
0
As X
a0:0
a1:1
11
P
X
10
0
X
9
1
X
8
0
X
7
0
X
6
0
X
5
0
X
4
1
X
3
X
X
2
1
0
X
X
X
Dreg32d
(Destination
Dreg32#)
2
1
0
Dreg16s
(Source
Dreg16#)
X
X
X
syntax
mov.l Dreg32d, As, <s/u>
opcode range 0xE210_0000-0xE210_6007
example: mov.w d0, a0, u
24.3.8.3
Move 16-bit data register to accumulator
mov.w A, Dreg16, <s/u>
bit 15
1
14
1
13
1
Dreg s/u X
16s s:0
Even u:1
/Odd
12
0
11
P
Ad X
a0:0
a1:1
10
0
9
1
8
0
7
0
6
0
5
1
4
0
3
X
X
X
X
X
X
X
X
X
syntax
mov.w Ad, Dreg16s, <s/u>
opcode range 0xE220_0000-0xE227_D000
example: mov.w a0, d5, s
24.3.8.4
Move 32-bit data register to accumulator
mov.l A, Dreg32, <s/u>
bit 15
1
X
14
1
13
1
s/u X
s:0
u:1
12
0
11
P
Ad X
a0:0
a1:1
10
0
9
1
8
0
7
0
6
0
5
1
4
1
3
X
X
X
X
X
X
X
X
X
2
1
0
Dreg32s
(Source
Dreg32#)
X
X
X
syntax
mov.l Ad, Dreg32s, <s/u>
opcode range 0xE230_0000-0xE237_5000
example: mov.l a1, d5.4, u
2013.12.20 版
(C) 2009-2013 New Japan Radio Co., Ltd.
270 頁
Ximo16A
Preliminary
24.3.9
no operation( 並列転送実行用 )
24.3.9.1
No operation (2)
dnop
bit 15
1
X
14
1
X
13
1
X
12
0
X
11
P
X
10
0
X
9
1
X
8
1
X
7
X
X
6
X
X
5
X
X
4
X
X
3
X
X
2
X
X
1
X
X
0
X
X
syntax
dnop
opcode range 0xE300_0000
example: dnop
271 頁
(C) 2009-2013 New Japan Radio Co., Ltd.
2013.12.20 版