ニッシー
1990年生まれ
血液型 O型

こんにちは。ITブログアルケーナム管理人のニッシーです。

詳細プロフィールへ

お問い合わせへ






2018-06-06

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







CASL2でプログラミングする前にどうしても知っておかないといけないものが、「指標修飾」と「リテラル」です。


特に、指標修飾は、アセンブリ言語を使ってプログラムするにあたり、常に用いられる機能であり、メモリとCPU間でデータのやり取りをする場合に必須の表現方法になります。


今回は、指標修飾とリテラルについて見てみたいと思います。
















指標修飾



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


LD GR0, 1, GR1 <-- このGR1のことです。


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


ここで、「GR1って汎用レジスタじゃね?」と思った方もいることでしょう。


COMET2は、指標レジスタとして汎用レジスタを用います。アドレスを指定するために用いるレジスタを指標レジスタと呼ぶと認識しておけば問題ありません。


これは、GR1に格納されたアドレス値を基準に何番目かずらした位置のアドレスからデータを取得したいときに活躍します。これを指標修飾といいます。


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


LD GR1, 1, GR0 <-- このような使用はできません。


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




この指標修飾は、C言語等の高級言語において「配列」や「文字列」として使用されています。


ちなみに、アドレス指定方式の問題でよく出る「指標アドレス指定方式」という方法は、この指標修飾のことを意味しています。


指標アドレス指定方式






リテラル



リテラル(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語分の領域を必要とします。





最後に



今回は、指標修飾・リテラルについてご紹介いたしました。リテラルは、兎に角データだけが欲しい、というときに威力を発揮します。


プログラムコードが見やすくなるので、是非積極的に使ってみてください。


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














プロフィール

ニッシー
1990年生まれ
血液型 O型

こんにちは。ITブログアルケーナム管理人のニッシーです。

詳細プロフィールへ

お問い合わせへ