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

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

詳細プロフィールへ

お問い合わせへ






2018-06-03

CASL2のアセンブラ命令とマクロ命令の種類







アセンブリ言語でプログラムを組むときに知っておいて欲しい命令が「アセンブラ」命令と「マクロ」命令です。


アセンブラ命令は、プログラミングの際に最初と最後に必ず記述し、マクロ命令は、キーボードで入力した情報を使用するために知っておかなければなりません。


今回は、アセンブラ命令とマクロ命令を見てみたいと思います。
















アセンブラ命令



アセンブラ命令とは、アセンブラというプログラムが認識するための命令のことです。


アセンブラとは、アセンブリ言語で書かれたプログラムを機械語に対応させるプログラムのことをいいます。C言語でいうコンパイラが、アセンブリ言語でいうアセンブラです。


アセンブラ命令は、アセンブラが認識するための命令で、直接対応する機械語があるわけではありません。


CASL2の機械語については「CASL2に対応する機械語はどうなっているのか?」も参考にしてみてください。





アセンブラ命令には以下のような命令があります。



START命令



名称オペコード第1オペランド
STARTSTART---
ラベル

使用例1: START

プログラムを開始する。



使用例2: START MAIN

ラベルMAINから始まるプログラムを開始する。



プログラムの始めに必ず記述する命令です。



END命令



名称オペコード第1オペランド
ENDEND---

使用例1: END

プログラムを終了する。



プログラムの終わりに必ず記述する命令です。



DC命令



名称ラベルオペコード第1オペランド
Define
Constant
ラベルDC定数

使用例1: A DC 1

A番地定数1を設定せよ。



使用例2: B DC #FFFF

B番地16進定数FFFFを設定せよ。


※ 数値の前に「#」をつけると16進数扱いになります。



使用例3: CHR DC 'A'

CHR番地文字定数「A」を設定せよ。


※ 文字を「'」(シングルクォーテーション)で囲んで記述すると文字コードがメモリに格納されます。


使用例3では「A」なので、JIS-X-0201コード表に基づき、CHR番地に(0041)16が格納されるということです。つまり、「A」という文字を定義したければ、「#0041」を定義しても同じ意味になります。


【同じ意味の記述】
  • CHR DC 'A'
  • CHR DC #0041


このように文字コードを直接定義しても同じ意味になります。



使用例4: STR DC 'ABC'

STR番地文字定数「A」を、STR + 1番地文字定数「B」を、STR + 2番地文字定数「C」を設定せよ。



使用例5: STR DC 'A', 'B', 'C'

STR番地文字定数「A」を、STR + 1番地文字定数「B」を、STR + 2番地文字定数「C」を設定せよ。



使用例6: STR DC 'A'
  DC 'B'
  DC 'C'

STR番地文字定数「A」を、STR + 1番地文字定数「B」を、STR + 2番地文字定数「C」を設定せよ。


使用例4~6は3例とも同じ意味になります。





文字コード表




DS命令



名称ラベルオペコード第1オペランド
Define
Storage
ラベルDS容量(語数)

使用例1: A DS 1

A番地1語(16ビット)の容量を設定せよ。



使用例2: B DS 5

B番地からB + 4番地まで、計5語(80ビット)の容量を設定せよ。



DC命令との違いは、具体的な値をメモリに設定するのではなく、メモリ上に容量だけ確保したいときに使用します。


容量だけ確保したいというのは、具体的な数値は決まってないけど兎に角この番地は近い内に使用するから場所取りだけしておこう、というイメージです。


以上の命令以外にも...


  • RPUSH
  • RPOP


RPUSH・RPOP命令もアセンブラ命令に含まれます。













マクロ命令



マクロ命令とは、予(あらかじ)め記述された複数の命令によって実現している何らかの機能を、名前を呼ぶだけでその機能を果たせる命令のことです。


丁度、高級言語の「ライブラリ」に似ているでしょう。例えば、ディスプレイに文字を出力する機能を持ったプログラムを毎回書こうとするなら膨大な手間が掛かってしまいます。そこで、予めディスプレイに文字を出力する機能をプログラムしておき、名前をつけておきます。


↑予めプログラムを作ってくださった開発者様は偉大です。


そして、その名前を呼ぶだけで機能を使えるようにし、プログラマに楽してもらいましょうよ、というのがこのマクロ命令です。


CASL2には以下のようなマクロ命令があります。



入力命令



名称オペコード第1オペランド第2オペランド
INputINラベルラベル


使用例1:
   IN WORDS, LENGTH
   :
 WORDS DS 1
 LENGTH DC 1
   :


ラベルWORDSで定義されるメモリ上の領域にラベルLENGTHで定義される語数分の文字を格納せよ。



WORDS DS 1 と LENGTH DC 1


であるため、1語分の文字列がメモリに格納できます。


ちなみに、1語の領域に1文字格納できます。


1語 = 1文字


したがって、使用例1は、1文字しか入力できないということになります。



出力命令



名称オペコード第1オペランド第2オペランド
OUTputOUTラベルラベル


使用例1:
   OUT WORDS, LENGTH
   :
 WORDS DC 'abc'
 LENGTH DC 1
   :

ラベルWORDSで定義されるメモリ上の領域からラベルLENGTHで定義される語数分の文字を出力せよ。



WORDS DC 'abc' で3語の文字定数を定義していますが、LENGTH DC 1 であるため、出力される値は「a」文字だけです。


もし、abcと表示したければ、LENGTH DC 3 と定義すればいい、ということになります。





最後に



今回はアセンブラ・マクロ命令についてご紹介いたしました。


マクロ命令というのは本当にありがたいですね。CPU設計者の心遣いに感謝ですね。


続きはまた次回にご期待を!














プロフィール

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

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

詳細プロフィールへ

お問い合わせへ