アキュムレータ(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)を変化させません。