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

CASL2の配列(指標修飾)とリテラル







アセンブリ言語には「指標修飾」「リテラル」という機能があり、アセンブリでプログラムを組むためには必要になる知識です。特に指標修飾は、メモリからデータを取り出す際に必要な機能であり、高級言語においては「配列」を実現するのに用いられています。

また、リテラルは、アドレス指定をよりプログラマーに解りやすくするための表現方法で、知っているとプログラムの行数を短縮できるため、非常に便利です。

今回は、指標修飾とリテラルについて紹介します。










指標修飾



指標修飾とは、あるアドレスを基準に指標レジスタの値を加算してアドレスを指定することをいいます。

コンピューターは、メモリからレジスタにデータをロードする場合、そのデータはメモリ上のどこにあるのかアドレスを示す必要があります。指標修飾とは、コンピューターのアドレス指定方式(アドレッシングモード)の一つで、指標レジスタの値を加えてアドレスを指定する方法のことです。

指標レジスタを使用してアドレス指定する意義は、アドレス値を基準に何番目かずらした位置のアドレスからデータを取得したい場面に遭遇したときに威力を発揮します。

CASL2では、第3オペランド(命令によっては第2オペランド)で指定したレジスタが指標レジスタとして用いられます。

【指標レジスタ】
LD GR0, 1, GR1 <-- このGR1のことです。

ここで、「GR1は汎用レジスタでは?」と疑問を抱くと思いますが、CASL2では指標レジスタとして汎用レジスタを使用します。アドレスを指定するためのレジスタを指標レジスタと呼ぶと認識しておけば問題ありません。

ただし、CASL2では指標レジスタとしてGR0を使うことはできません。

【指標修飾における禁止】
LD GR1, 1, GR0 <-- このような使用はできません。

GR0が指標レジスタとして使えない理由は、COMET2の機械語の仕様が関係しています。




そして、この指標修飾は高級言語における「配列」や「文字列」として使用されています。ちなみに、アドレス指定方式の問題でよく出る「指標アドレス指定方式」という方法は、この指標修飾のことを意味しています。

【指標アドレス指定方式】




リテラル



リテラル(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    
5 A DC 1 
6   END 
   
   
 ||
   
   
1 PROG2 START 
2   LD GR0, =1 
3   RET 
4   END 

具体的なアドレス値は知らないけど、メモリのどこかに値が設定されています。COMET2が、勝手にメモリ上のどこのアドレスに値を設定するかを決定しています。

前もってメモリに値を設定しなくても手っ取り早く「1」という値が欲しい、といったときに活躍します。また、リテラルで値を設定した場合も、DC命令使用時と同じくメモリ上に1語分の領域を必要とします。



最後に



今回は、指標修飾・リテラルについてご紹介いたしました。リテラルは、兎に角データだけが欲しい、というときに威力を発揮します。プログラムコードが見やすくなるので、是非積極的に使ってみてください。

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












プロフィール

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

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