5.1.5 オペランド部の記述方法

(1)

数値

プログラムに記述できる数値の種類は以下5つがあります。

記述した値は32ビット符号付きで処理されます。(浮動小数点数を除く)

(a)

2進数

0〜1のいずれかの数字で記述し、接尾辞としてBまたはbを添付します。

-

記述例

1011000B
1011000b

(b)

8進数

0〜7までの数字で記述し、接尾辞としてOまたはoを添付します。

-

記述例

60702O
60702o

(c)

10進数

0〜9までの数字で記述します。

-

記述例

9243

(d)

16進数

0〜9, A〜F, a〜fで記述し、接尾辞としてHまたはhを添付します。

アルファベットで始まる数値の場合は接頭辞として0を添付します。

-

記述例

0A5FH
5FH
0a5fh
5fh

(e)

浮動小数点数

浮動小数点数は制御命令 ".FLOAT"と".DOUBLE" のオペランドにのみ記述できます。

浮動小数点数は式に記述できません。

浮動小数点数で表される次の範囲の値を記述できます。

FLOAT (32bits)1.17549435×10-38 〜 3.40282347×1038

DOUBLE (64bits)2.2250738585072014×10-308 〜 1.7976931348623157×10308

-

記述方法

(仮数部)E(指数部)
(仮数部)e(指数部)

-

記述例

3.4E35    ;3.4x10**35
3.4e-35   ;3.4x10**-35
-.5E20    ;-0.5x10**20
5e-20     ;5.0x10**-20

(2)

アドレッシングモード

命令のオペランド部に記述できるアドレッシングモードは以下3つがあります。

(a)

一般命令アドレッシング

-

レジスタ直接

指定したレジスタが演算の対象となります。R0〜R15、SPを記述することができます。-dpfpu指定時はさらにDR0〜DR15、DRL0〜DRL15及びDRH0〜DRH15を記述することができます。SPはR0と解釈します。(R0=SP)

Rn (Rn=R0〜R15, SP)

-

記述例

ADD  R1, R2

-

即値

#immで示した即値は整数を表します。

#uimmで示した即値は符号なし整数を表します。

#simmで示した即値は符号付き整数を表します。

#imm:n、#uimm:n、および#simm:n は、n ビット長の即値を表します。

#imm:8, #uimm:8, #simm:8, #imm:16, #simm:16, #simm:24, #imm:32

RTSD命令の#uimm:8は、確定値でなければなりません。

-

記述例

MOV.L  #-100, R2         ; #simm:8

-

レジスタ間接

レジスタの値が演算対象の実効アドレスになります。実効アドレスの範囲は、00000000h〜FFFFFFFFhです。

[Rn] (Rn=R0〜R15, SP)

-

記述例

ADD  [R1], R2

-

レジスタ相対

ディスプレースメント(dsp)を32ビットにゼロ拡張した値と、レジスタ値を加算した結果が演算対象の実効アドレスとなります。実効アドレスの範囲は、00000000h〜FFFFFFFFh です。dsp:n は、nビット長のディスプレースメントを表します。

dsp:8[Rn], dsp:16[Rn] (Rn=R0〜R15,SP)

dspの値は以下規則によりスケーリングされた値で指定します。アセンブラではスケーリング前の値に戻し、命令のビットパターンに埋め込みます。

表 5.5

dsp値スケーリング規則

命令

規則

サイズ指定子をとる転送命令

サイズ指定子.B/.W/.L に応じてそれぞれ、1/2/4倍

サイズ拡張指定子をとる演算命令

サイズ拡張指定子.B/.UB/.W/.UW/.Lに応じてそれぞれ、1/1/2/2/4倍

ビット操作命令

1倍

上記以外

4倍

-

記述例

ADD  400[R1], R2               ; dsp:8[Rn] (400/4 = 100)

サイズ指定子W/Lで2/4の倍数でない場合、アセンブル時確定値はアセンブラエラー

アセンブル時未確定値はリンク時エラー

(b)

拡張命令アドレッシング

-

短縮即値

#immで示した即値が演算の対象となります。即値がアセンブル時確定値でない場合はエラー処理されます。

#imm:1

このアドレッシングは、DSP機能命令(RACW)のsrcにのみ使用されます。1または2を記述できます。

-

記述例

RACW  #1                      ; RACW  #imm:1

#imm:2

#immで示した2 ビット即値が演算の対象となります。このアドレッシングは、コプロセッサ命令(MVFCP,MVTCP,OPECP)のコプロセッサ番号指定にのみ使用されます。

-

記述例

MVTCP  #3, R1, #4:16          ; MVTCP  #imm:2, Rn, #imm:16

#imm:3

#immで示した3 ビット即値が演算の対象となります。このアドレッシングは、ビット操作命令(BCLR,BMCnd,BNOT,BSET,BTST)のビット番号指定に使用されます。

-

記述例

BSET   #7, R10                 ; BSET   #imm:3, Rn

#imm:4

ADD,AND,CMP,MOV,MUL,OR,SUB命令のソースに使用される場合は、#immで示した4 ビット即値を32ビットにゼロ拡張した結果が演算の対象となります。

MVTIPL命令の割り込み優先レベル指定に使用される場合は、#immで示した4ビット即値が演算の対象となります。

-

記述例

ADD   #15, R8                  ; ADD   #imm:4, Rn

#imm:5

#immで示した5 ビット即値が演算の対象となります。このアドレッシングは、ビット操作命令(BCLR, BMCnd, BNOT, BSET, BTST)のビット番号指定、シフト命令(SHAR,SHLL,SHLR)のシフト幅指定、および、ローテート命令(ROTL,ROTR)のローテート幅指定にのみ使用されます。

-

記述例

BSET  #31, R10                 ; BSET   #imm:5, Rn

-

短縮レジスタ相対

5ビットディスプレースメント(dsp)を32ビットにゼロ拡張した値と、レジスタ値を加算した結果が演算対象の実効アドレスとなります。実効アドレスの範囲は、00000000h〜FFFFFFFFh です。

dspの値はサイズ指定子.B/.W/.L に応じて、それぞれ1/2/4倍した値で指定します。dspの値がアセンブル時確定値でない場合、エラー処理をします。このアドレッシングは、MOV,MOVU 命令にのみ使用されます。

dsp:5[Rn] (Rn=R0〜R7, SP)

-

記述例

MOV.L  R3,124[R1]               ; dsp:5[Rn] (124/4 = 31)

*src/destのレジスタもR0〜R7でなくてはなりません。

-

ポストインクリメントレジスタ間接

レジスタの値に、サイズ指定子.B/.W/.L に応じて、それぞれ1/2/4 を加算します。更新前のレジスタの値が演算対象の実効アドレスとなります。実効アドレスの範囲は、00000000h〜FFFFFFFFh です。このアドレッシングは、MOV,MOVU命令にのみ使用されます。

[Rn+] (Rn=R0〜R15, SP)

-

記述例

MOV.L [R3+],R1

-

プリデクリメントレジスタ間接

レジスタの値に、サイズ指定子.B/.W/.L に応じて、それぞれ1/2/4 を減算します。更新後のレジスタの値が演算対象の実効アドレスとなります。実効アドレスの範囲は、00000000h〜FFFFFFFFh です。このアドレッシングは、MOV,MOVU命令にのみ使用されます。

[-Rn] (Rn=R0〜R15, SP)

-

記述例

MOV.L [-R3],R1

-

インデックス付きレジスタ間接

インデックスレジスタ(Ri)の値をサイズ指定子.B/.W/.L に応じて、それぞれ1/2/4 倍した値とベースレジスタ(Rb)の値を加算した結果の下位32 ビットが演算対象の実効アドレスとなります。実効アドレスの範囲は、00000000h〜FFFFFFFFh です。このアドレッシングは、MOV,MOVU 命令にのみ使用されます。

[Ri,Rb] (Ri=R0〜R15, SP)  (Rb=R0〜R15,tfe SP)

-

記述例

MOV.L [R3,R1],R2
MOV.L R3, [R1,R2]

(c)

特定命令アドレッシング

-

制御レジスタ直接

指定した制御レジスタが演算の対象となります。

このアドレッシングは、MVTC,POPC,PUSHC,MVFC 命令にのみ使用されます。

PSW, FPSW, USP, ISP, INTB, EXTB, BPSW, BPC, FINTV, PC

-dpfpu指定時はさらにDPUSHM,DPOPM,MVTDC,MVFDC命令でも使用されます。

DPSW, DCMR, DECNT, DEPC

-

記述例

STC  PSW,R2

-

PSW直接

指定したフラグ、または、ビットが演算の対象となります。このアドレッシングは、CLRPSW,SETPSW 命令にのみ使用されます。

U, I, O, S, Z, C

-

記述例

CLRPSW  U

-

プログラムカウンタ相対

分岐命令の分岐先を指定するためのアドレッシング。

Rn(Rn=R0〜R15, SP)

プログラムカウンタの値と、Rnの値を符号付きで加算した結果が実効アドレスとなります。Rnの値の範囲は、-2147483648〜2147483647です。実効アドレスの範囲は、00000000h〜FFFFFFFFh です。このアドレッシングモードは、BRA(.L)、BSR(.L)命令に使用されます。

label(PC + pcdsp:3)

分岐命令の分岐先アドレスを表します。指定したシンボル、数値が実効アドレスとなります。

指定した分岐先アドレスからプログラムカウンタの値を引いたものをディスプレースメント(pcdsp)として命令のビットパターンに埋め込みます。

分岐距離指定子が“.S”の場合、プログラムカウンタの値とディスプレースメントの値を符号なしで加算した結果の下位32 ビットが実効アドレスとなります。

pcdsp の範囲は、3 ≦ pcdsp:3≦10です。

実効アドレスの範囲は、00000000h〜FFFFFFFFh です。このアドレッシングは、BRA,BCnd(Cnd==EQ,NE,Z,NZ のみ)のみに使用できます。

label(PC + pcdsp:8/pcdsp:16/pcdsp:24)

分岐命令の分岐先アドレスを表します。指定したシンボル、数値が実効アドレスとなります。

指定した分岐先アドレスからプログラムカウンタの値を引いたものをディスプレースメント(pcdsp)として命令のビットパターンに埋め込みます。

分岐距離指定子が“.B”または“.W”または“.A”の場合、プログラムカウンタの値とディスプレースメントの値を符号付きで加算した結果の下位32 ビットが実効アドレスとなります。

pcdsp の範囲は以下の通りです。

“.B”の場合 128≦pcdsp:8≦ +127

“.W”の場合 32768 ≦ pcdsp:16≦ +32767

“.A”の場合 8388608 ≦ pcdsp:24 ≦ +8388607

実効アドレスの範囲は、00000000h〜FFFFFFFFh です。

(3)

ビット長指定子

ビット長指定子はオペランドの即値、またはディスプレースメントのサイズを指定します。

-

記述方法

:width

-

内容

本指定子はオペランドに記述された即値、またはディスプレースメントの直後に指定します。

アセンブラは指定されたビット長のアドレッシングモードを選択します。

本指定子を省略した場合はアセンブラがもっとも効率のよいビット長を選択します。

本指定子が記述されている場合には最適選択は行わず、指定されたビット長とします。

本指定子はアセンブラ制御命令のオペランドには記述できません。

即値、ディスプレースメントの式と本指定子の間には、1つ以上の空白文字を入れることができます。

命令フォーマットに存在しないビット長が指定された場合は、エラー処理されます。

width に指定できるものは次の通りです。

2:有効ビット長が2ビットであることを表します。

#imm:2

3:有効ビット長が3ビットであることを表します。

#imm:3

4:有効ビット長が4ビットであることを表します。

#imm:4

5:有効ビット長が5ビットであることを表します。

#imm:5, dsp:5

8:有効ビット長が8ビットであることを表します。

#uimm:8, #simm:8, dsp:8

16:有効ビット長が16ビットであることを表します。

#uimm:16, #simm:16, dsp:16

24:有効ビット長が24ビットであることを表します。

#simm:24

32:有効ビット長が32ビットであることを表します。

#imm:32

(4)

サイズ拡張指定子

サイズ拡張指定子は、演算命令でソースがメモリオペランドの場合、メモリオペランドのサイズと拡張方法を指定するために付加されます。

-

記述方法

.memex

-

内容

本指定子はメモリオペランドの直後に記述し、間に空白文字を入れることはできません。

サイズ拡張指定子は特定の命令と、メモリオペランドの組み合わせに対してのみ有効で、有効でない命令とオペランドの組み合わせで指定した場合は、エラー処理をします。

指定可能な命令とオペランドの組み合わせは、RXファミリソフトウェアマニュアルの命令フォーマットのオペランドに .memex が付いているパターンのみです。

省略時はビット操作命令では'B'として扱い、それ以外の命令では'L'として扱います。

指定可能なサイズ拡張指定子と効果を、以下表に記します。

表 5.6

サイズ拡張指定子

サイズ拡張指定子

効果

B

8ビットデータを32ビット符号拡張

UB

8ビットデータを32ビットゼロ拡張

W

16 ビットデータを32ビット符号拡張

UW

16ビットデータを32ビットゼロ拡張

L

32ビットデータをロード

(記述例)

ADD [R1].B, R2

AND 125[R1].UB, R2