#はじめに。
今回は基本情報技術者試験に使われるCASL2/COMET2をやります。
簡略化されたものであり、アセンブリ言語の基本を学習するために行います。
#CASL2/COMET2のインストール
- Visual Studio Codeをインストールする。
- CASL2/COMET2をインストールする
#CASL2について
アセンブリ言語にはレジスタ、メモリがあります。
レジスタには凡用レジスタ(GR0~GR7)、フラグレジスタ(ZF,SF,Of)、プログラムレジスタ(PR)、スタックポインタ(SP)があります。
メモリにはプログラム領域、データ領域、スタック領域があります。
(図や説明があり、わかりやすいです。→https://arcanum.work/contents?id=10#3-1)
#CASL2を実際に書いてみる
HELLO START ; プログラムの開始
OUT BUF2, LEN2 ; 文字列の出力
RET
BUF DC 'Hello world' ; 文字列
LEN DC 11 ; 文字列の長さ
END
CASL2のファイルの拡張子は.casです。ラベル、命令、オペランド、コメントはそろえていますが見やすくするためであって意味はありません。
(注 : ラベル、命令、オペランドの間に一つ以上のスペースは必要です)
コードの説明
###START命令、END命令
START命令でプログラムが開始し、END命令で終了を意味します。ラベルはこの間の中でのみ有効です。
###DC命令
DC命令はデータ領域を確保し、初期値を入れる命令です。
###OUT命令
OUT命令はオペランドに文字列と長さを指定します。
ただし、直接文字列、長さを入れることはできません。なので、正しくは文字列を格納するアドレスと文字列の長さを格納するアドレスをオペランドに指定します。
〇 OUT BUF2, LEN2 ; 文字列の出力
☓ OUT "hello world", 11
###RET命令
RET命令はスタックにある値をPCに移し、スタックポインタの値を1増やす命令です。
#なぜ、RET命令が必要なのか。
アセンブリ言語には疑似命令という言葉があります。疑似命令とは、アセンブル(コンパイル)のときに必要であり、実際はメモリには書かれません。命令はプログラムレジスタを進めることでどのメモリを実行するかを決めます。つまり、終わりがどこのかはわかりません。そのため、RET命令を書くことでスタックに格納されている値を読み取り終了しているわけです。
#終わり
記事を書いた本人もアセンブリ言語を始めたばかりなので間違いがあると思います。なにかあれば、ご指摘ください。今後、少しずつアセンブラを投稿しようと思います。