LoginSignup
4
2

More than 3 years have passed since last update.

アセンブリ言語(CASL2)を学習#1

Last updated at Posted at 2020-06-11

はじめに。

 今回は基本情報技術者試験に使われるCASL2/COMET2をやります。
簡略化されたものであり、アセンブリ言語の基本を学習するために行います。

CASL2/COMET2のインストール

  1. Visual Studio Codeをインストールする。
  2. CASL2/COMET2をインストールする

CASL2について

 アセンブリ言語にはレジスタ、メモリがあります。
レジスタには凡用レジスタ(GR0~GR7)、フラグレジスタ(ZF,SF,Of)、プログラムレジスタ(PR)、スタックポインタ(SP)があります。
メモリにはプログラム領域、データ領域、スタック領域があります。
(図や説明があり、わかりやすいです。→https://arcanum.work/contents?id=10#3-1)

CASL2を実際に書いてみる

HELLO.cas
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命令を書くことでスタックに格納されている値を読み取り終了しているわけです。

終わり

 記事を書いた本人もアセンブリ言語を始めたばかりなので間違いがあると思います。なにかあれば、ご指摘ください。今後、少しずつアセンブラを投稿しようと思います。

 

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2