// レジスタによる修飾
<reg> = DM(<ireg>+<mreg>);
DM(<ireg>+<mreg>) = <reg>;
// 即値による修飾
<dreg> = DM(<ireg>+<imm8>);
DM(<ireg>+<imm8>) = <dreg>;
// レジスタによる修飾
AX0 = DM( I1+M0 );
ASTAT = DM( I6+M5 );
DM( I4+M6 ) = DMPG1;
// 即値による修飾
AX0 = DM( I6+3 );
DM( I4+ -1 ) = AX1; // 負の値による修飾
// 実行例
I0=0x8100;
M1=3;
AX0=DM(I0+M1); // 0x8103番地の内容がAX0にロードされる。
// 実行後、I0の値は0x8100のまま
16ビット値をDMバス経由で転送します。転送アドレスはIレジスタと修飾量の和で与えられます。転送後、Iレジスタの値は変わりません
IレジスタはDAG1,DAG2いずれのレジスタも使用できます。ただし、MレジスタはIレジスタと同じDAGのものしか使えません。例えば、( I3+M2 )は許されますが、( I7+M2 )は許されません。レジスタの分類についてはDAGを参照してください。
転送はDMバスを経由して行いますが、転送先のメモリーが16ビットか24ビットかは問いません。それぞれの場合の動作は以下のとおりです。
修飾値は2の補数として使われます。従って、即値の場合修飾量は+127..-128となります。
前修飾転送は循環バッファ・アクセスに使用できません。オペランドの長さと符号拡張に関する一般論については転送とレジスタを参照してください。
<reg> ::= <dreg>, <g1reg>, <g2reg>, <g3reg>
<dreg> ::= ax0, ax1, mx0, mx1, ay0, ay1, my0, my1,
mr2, sr2, ar, si, mr1, sr1, mr0, sr0
<g1reg> ::= i0, i1, i2, i3, m0, m1, m2, m3, l0, l1, l2, l3,
imask, irptl, icntl, stacka
<g2reg> ::= i4, i5, i6, i7, m4, m5, m6, m7, l4, l5, l6, l7,
cntr, lpstacka
<g3reg> ::= astat, mstat, sstat, lpstackp, ccode, se, sb, px,
dmpg1, dmpg2, iopg, ijpg, stackp
<ireg> ::= I0, I1, I2, I3, I4, I5, I6, I7
<mreg> ::= M0, M1, M2, M3, M4, M5, M6, M7
<imm8> ::= 8ビットの即値