アセンブリ言語 CASL2 配列とリテラル
アセンブリ言語には「指標修飾」と「リテラル」という機能があり、アセンブリでプログラムを組むためには必要になる知識です。
特に指標修飾は、メモリからデータを取り出す際に必要な機能であり、高級言語でいう「配列」に相当します。
リテラルはアドレス指定を、プログラマーに解りやすくするための表現方法で、プログラムの行数を短縮できるのでとても便利です。
今回は、指標修飾とリテラルについて情報を共有したいと思います。
指標修飾
指標修飾とは、あるアドレスを基準に指標レジスタの値を加算してアドレスを指定することをいいます。
コンピューターは、メモリからレジスタにデータをロードする場合、そのデータはメモリ上のどこにあるのかアドレスを示す必要があります。
指標修飾とは、コンピューターのアドレス指定方式(アドレッシングモード)の一つで指標レジスタの値を加えてアドレスを指定する方法のことです。
指標レジスタを使用してアドレス指定する意味は、アドレス値を基準に何番目かずらした位置のアドレスからデータを取得したい場面のときに威力を発揮します。
CASL2では、第3オペランドや第2オペランドなど、最後の列で指定したレジスタが指標レジスタとして使用されます。
【指標レジスタ】- LD GR0, 1, GR1 <-- このGR1のことです。
ここで、「GR1は汎用レジスタでは?」と疑問を抱くと思いますが、CASL2では指標レジスタとして汎用レジスタを使用します。
アドレスを指定するためのレジスタを指標レジスタと呼ぶという認識でOKです。
ただし、CASL2では指標レジスタとしてGR0を使うことはできません。
【指標修飾における禁止】- LD GR1, 1, GR0 <-- このような使用はできません。
GR0が指標レジスタとして使えない理由はCOMET2の機械語の仕様が関係しています。
そして、この指標修飾はCやJAVAなどの高級言語でいうところの「配列」や「文字列」として使用されています。
ちなみに、アドレス指定方式の問題でよく出る「指標アドレス指定方式」という方法は指標修飾のことを意味しています。
【指標アドレス指定方式】リテラル
リテラル(literal)とは直接データを指定する表記法のことを指します。
CASL2では、以下のように第2オペランドにイコール(=)と数値を記述する形で表現します。
- LD GR0, =1 <-- この=1のことです。
このリテラルは「アセンブラ・マクロ命令」で紹介した、DC命令を省略した形ととらえることができます。
リテラルとDC命令は同じ役割
リテラルは、DC命令の省略を行うことができる使える機能です。
リテラルとDC命令では具体的にどのように同じなのか見てみます。
以下の「PROG1」、「PROG2」という名称で示されるプログラムは、同じ意味ということになります。
例1: 1を汎用レジスタGR0に転送(ロード)するプログラム1 | PROG1 | START | |
2 | LD | GR0, A | |
3 | RET | ||
4 | A | DC | 1 |
5 | END | ||
|| | 同じ | ||
1 | PROG2 | START | |
2 | LD | GR0, =1 | |
3 | RET | ||
4 | END |
リテラルはCOMET2が勝手にメモリ上のどこかのアドレスにデータを設定してくれます。
具体的なアドレス値はCOMET2のみぞ知るという状態になります。
前もってメモリにデータを設定しなくても手っ取り早く「1」という値が欲しい、といったときに活躍します。
また、リテラルでデータを設定した場合もDC命令使用時と同じくメモリ上に1語分の領域を必要とします。
さいごに
今回は、指標修飾・リテラルについてご紹介いたしました。リテラルは、兎に角データだけが欲しい、というときに威力を発揮します。
プログラムコードが見やすくなるので、ぜひ積極的に使ってみてください。
それでは次回にお会いしましょう。