後更新DM転送

命令形式

        // レジスタによる更新
<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;    // 負の値による更新

          // 実行例
L0=5;
M1=3;
I0=0x8100;
AX0=DM(I0+=M1);        // 0x8100番地の内容がAX0にロードされる。
                       // 実行後、I0の値は0x8103になる
AX1=DM(I0+=M1);        // 0x8103番地の内容がAX1にロードされる。
                       // 実行後、I0の値は0x8106になるがL0によって循環アクセス化
                       // され、結局0x8105になる

説明

16ビット値をDMバス経由で転送します。転送アドレスはIレジスタで与えます。転送後、IレジスタにはMレジスタあるいは即値が加えられます。

IレジスタはDAG1,DAG2いずれのレジスタも使用できます。ただし、MレジスタはIレジスタと同じDAGのものしか使えません。例えば、( I3+=M2 )は許されますが、( I7+=M2 )は許されません。レジスタの分類についてはDAGを参照してください。

転送はDMバスを経由して行いますが、転送先のメモリーが16ビットか24ビットかは問いません。それぞれの場合の動作は以下のとおりです。

転送先が24ビット・メモリー
上位16ビットにオペランド・レジスタの値が格納され、下位8ビットには0が書き込まれます。
転送元が24ビット・メモリー
上位16ビットの値がオペランド・レジスタにロードされ、下位8ビットは無視されます。PXの値は変化しません。
転送先が16ビット・メモリー
オペランド・レジスタの値がそのままストアされます。
転送元が16ビット・メモリー
メモリーの値がそのままロードされます。PXの値は変化しません。

更新値は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ビットの即値
2191空挺団 | プログラム | EZ-KIT | こぼれ話 | アーキテクチャー | 命令 | レジスタ | DSP掲示板 | FAQ |