レジスタ~メモリ間転送

アキュムレータ(A)とメモリ間でデータを転送します。操作対象のメモリは、汎用レジスタにメモリアドレスを入れて指定します。また、扱うデータの長さによって命令を使い分けます。

Operation Mnemonic inCode Opr2 Opr3 Opr4 Opr5 #bytes Opcode Ie Cy Cd
A <- M(Rx)(2d) LDM.b Rx 2 33 0R
A <- M(Rx)(4d) LDM.w Rx 2 33 1R
A <- M(Rx)(8d) LDM.q Rx 2 33 2R
M(Rx) <- A(2d) STM.b Rx 2 34 0R
M(Rx) <- A(4d) STM.w Rx 2 34 1R
M(Rx) <- A(8d) STM.q Rx 2 34 2R

Opcode欄の「R」にあたるところにレジスタ番号0~9を入れてください。Rxとはレジスタの内容をインデクス(指標、目標、指示先)として使うという意味です。

コーディング例(1バイト=10進2桁の転送)

Addr Data Label Opcode Operand Comment
R0=1000であるとする
R1=1050であるとする
0000 33 00 start: LDM.b R0 Aに1000(R0の内容)番地の1バイトを転送する
0002 34 01 STM.b R1 Aの内容の最下位の1バイトを1050(R1の内容)番地に転送する

コーディング例(2バイト=10進4桁の転送)

Addr Data Label Opcode Operand Comment
R0=1000であるとする
R1=1050であるとする
0000 33 10 start: LDM.w R0 Aに1000(R0の内容)番地からの2バイトを転送する
0002 34 11 STM.w R1 Aの内容の下位の2バイトを1050(R1の内容)番地からの2バイトに転送する

コーディング例(4バイト=10進8桁の転送)

Addr Data Label Opcode Operand Comment
R0=1000であるとする
R1=1050であるとする
0000 33 20 start: LDM.q R0 Aに1000(R0の内容)番地の4バイトを転送する
0002 34 21 STM.q R1 Aの内容の4バイトすべてを1050(R1の内容)番地からの4バイトに転送する

補足

  • “LDM”は”Load Memory”(ロード・メモリ)の略です。
  • “STM”は”Store to Memory”(ストア・トゥ・メモリ)の略です。
  • 扱うメモリ領域に制限はありません。もちろんプログラム領域や読み出し専用のI/O領域に書き込んだ場合は何も起こりません。
  • I/O領域へのアクセスは原則として入出力命令(IN命令とOUT命令)を使ってください。
  • ここでいう転送とは内容をコピーすることで、転送元にはデータが残ります。
  • この命令はステータスレジスタ(SR)を変化させません。