// レジスタによる更新 <reg> = PM(<ireg>+=<mreg>); PM(<ireg>+=<mreg>) = <reg>;
// レジスタによる更新 AX0 = PM( I1+=M0 ); ASTAT = PM( I6+=M5 ); PM( I4+=M6 ) = DMPG1; // 実行例 L0=5; M1=3; I0=0x6100; AX0=PM(I0+=M1); // 0x6100番地の上位16bitがAX0に、下位8bitがPXにロードされる。 // 実行後、I0の値は0x6103になる AX1=pM(I0+=M1); // 0x8103番地の上位16bitがAX0に、下位8bitがPXにロードされる。 // 実行後、I0の値は0x6106になるがL0によって循環アクセス化 // され、結局0x6105になる
24ビット値をPMバス経由で転送します。転送アドレスはIレジスタで与えます。転送後、IレジスタにはMレジスタの値が加えられます。
IレジスタはDAG1,DAG2いずれのレジスタも使用できます。ただし、MレジスタはIレジスタと同じDAGのものしか使えません。例えば、( I3+=M2 )は許されますが、( I7+=M2 )は許されません。レジスタの分類についてはDAGを参照してください。
転送はPMバスを経由して行いますが、転送先のメモリーが16ビットか24ビットかは問いません。それぞれの場合の動作は以下のとおりです。
後更新転送は循環バッファ・アクセスに使用することができます。詳細は循環バッファ・アクセスを参照してください。オペランドの長さと符号拡張に関する一般論については転送とレジスタを参照してください。
<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