2018-06-08
更新 2020-10-10

CASL2のデータ転送命令一覧







アセンブリ言語では、データがメモリとCPU内のレジスタ間を頻繁に行き来します。その際に欠かせないものが、「ロード」命令と「ストア」命令です。アセンブリ言語のソースコードには必ず記述されている命令でもあります。

今回は、ロード命令とストア命令について紹介します。










ロード命令



ロード命令は、メモリからCPUの汎用レジスタにデータを転送する命令です。

名称オペコード第1オペランド第2オペランド第3オペランド
LoaDLDレジスタ
アドレス
or
レジスタ
---
レジスタアドレスレジスタ

使用例1: LD GR0, A

メモリA番地のデータを、汎用レジスタGR0に転送せよ。



使用例2: LD GR0, 1

メモリ1番地のデータを、汎用レジスタGR0に転送せよ。



使用例3: LD GR0, 1, GR1

メモリ汎用レジスタGR1のデータ + 1番地のデータを、汎用レジスタGR0に転送せよ。



使用例4: LD GR0, GR1

汎用レジスタGR1のデータを、汎用レジスタGR0に転送せよ。



ロードアドレス命令



ロードアドレス命令は、メモリからCPUの汎用レジスタにアドレス値を転送する命令です。

名称オペコード第1オペランド第2オペランド第3オペランド
Load
ADdress
LADレジスタ名アドレス---
レジスタアドレスレジスタ

使用例1: LAD GR0, A

メモリA番地のアドレス値を、汎用レジスタGR0に転送せよ。



使用例2: LAD GR0, 1

メモリ1番地のアドレス値を、汎用レジスタGR0に転送せよ。



使用例3: LAD GR0, 1, GR1

メモリ汎用レジスタGR1のデータ + 1番地のアドレス値を、汎用レジスタGR0に転送せよ。

ただし、LAD命令は第2オペランドに汎用レジスタ名を指定することはできません。

このLAD命令は、第2オペランドで指定した値を、そのままレジスタに格納できる便利な命令です。この命令のすごいところは、メモリにわざわざ値を設定せずとも、アドレス値そのものを数値として扱える点で、メモリを節約できます。



スマートなLAD命令



LAD命令は、定数の設定にも使用できます。

つまり、アドレス値そのものを定数として用いることができます。

例1: GR1に値3を設定する場合

1   LAD GR1, 3
   
  ||
   
1   LD GR1, =3
   
  ||
   
1   LD GR1, A
2 A DC 3
   

上記例1におけるLD、LADのニーモニックは全て同じ意味になります。LADを用いる利点として、LD命令でリテラルや定数の設定をする場合と比べてメモリに値を設定しなくて済むため、メモリを1語分節約できます。




ストア命令



ストア命令は、CPUの汎用レジスタからメモリにデータを格納する命令です。

ロード命令と反対の動きをする命令となります。

名称オペコード第1オペランド第2オペランド第3オペランド
SToreSTレジスタアドレス---
レジスタアドレスレジスタ

使用例1: ST GR0, A

汎用レジスタGR0のデータを、メモリA番地に格納せよ。



使用例2: ST GR0, 1

汎用レジスタGR0のデータを、メモリ1番地に格納せよ。



使用例3: ST GR0, 1, GR1

汎用レジスタGR0のデータを、メモリ汎用レジスタGR1のデータ + 1番地に格納せよ。

ただし、ST命令は第2オペランドに汎用レジスタ名を指定することはできません。

また、この命令だけ第1オペランドと第2以上のオペランドとの関係が他の命令と逆なことに注意してください。

例2: LD命令とST命令におけるデータの流れ

  • ST GR0, A ・・・GR0のデータをA番地に格納(データの流れ GR0 --> A)

  • LD GR0, A ・・・A番地のデータをGR0に転送(データの流れ GR0 <-- A)




最後に



今回は、ロード、ロードアドレス、そしてストア命令について紹介いたしました。特に、ロードアドレス命令は、メモリの節約ができる優秀な命令ですが、それ以外に加算や減算を行うことができる機能も有しています。

それでは、続きはまた次回にご期待を!












プロフィール

ニッシー
詳細プロフィールへ
お問い合わせへ

こんにちは。ITネタブログの管理人のニッシーです。