Skip to article frontmatterSkip to article content

アセンブリ言語

法政大学

学習目標

アセンブリ言語とは

機械語をより人間に理解しやすい形で記述したものがアセンブリ言語である。アセンブリ言語(Assembly Language)は、機械語命令に人間が理解しやすいニーモニック(mnemonic)という符号を付ける。

ニーモニックコード:

機械語の命令を,人間に分かりやすいよう英単語や略記,10進法数字などに置き換えて表したもの。 -- 大辞林(第2版)

コンピューターが直接理解できるのは機械語であるため、アセンブリー言語で記述されたソースコードをアセンブラ(Assembler)と呼ばれるプログラムを使って機械語に変換する必要がある。

Pep/9アセンブリ言語

ここでは、Pep/9アセンブリ言語を学び、アセンブリ言語でのプログラミングを体験する。

Pep/9アセンブリ言語では、命令部のオペコードをニーモニックで表現する。以下はPep/9アセンブリ言語の命令部の一部である。

mnemonic意味
STOP実行を停止する
LDWAレジスタAにワードをロードする
LDBAレジスタAにバイトをロードする
STWAワードをメモリにストアする
STBAバイトをメモリにストアする
ADDAレジスタAに加算する
SUBAレジスタAから減算する

以下はPep/9アセンブリ言語のアドレス指定方式の一部である。

アドレス指定方式意味
i即値アドレス指定
d直接アドレス指定

オペランド部は、16進数で書き、先頭に0xを付ける。オペランド部の後ろに、idなどのアルファベットを付けることで、アドレス指定方式を示す。

「Hi」を出力するPep/9の機械語プログラム

以下は、Pep/9アセンブリ言語で「Hi」を出力するプログラムの例である。.ENDは,アセンブリ言語のプログラムの終わりを示す記号である。

LDBA 0x0048,i  ; レジスタAに'H'のASCIIコードをロード
STBA 0xFC16,d  ; レジスタAの値をターミナルに出力
LDBA 0x0069,i  ; レジスタAに'i'のASCIIコードをロード
STBA 0xFC16,d  ; レジスタAの値をターミナルに出力
STOP           ; プログラムを停止
.END

このプログラムは、以下の手順で実行する。

  1. ソースコードを「Source Code」に入力する。

  2. Build > Run Source を選択し、プログラムを実行する。

  3. Outputに「Hi」と出力されることを確認する。

一文字を受け取り、ターミナルに出力するPep/9アセンブリ言語のプログラム

以下は、Pep/9アセンブリ言語で一文字を受け取り、ターミナルに出力するプログラムの例である。

LDBA 0xFC15,d  ; レジスタAにキーボードから入力した文字をロード
STBA 0xFC16,d  ; レジスタAの値をターミナルに出力
STOP           ; プログラムを停止
.END

練習問題

  1. 即値アドレス指定を使用し、「Hosei」と出力するPep/9アセンブリ言語のプログラムを作成せよ。

  2. 二つの文字を受け取り、位置を入れ替え、ターミナルに出力するPep/9アセンブリ言語のプログラムを作成せよ.Hint: Pep/9の入力アドレスはFC15、出力アドレスはFC16