今まで、さんざん言ったようにコンピューターのプログラムは、全てビットパ
ターンに変換される。データである整数や文字の変換の仕方は、すでに学習し
た。後は、命令の変換の仕方だけである。
文字の変換の仕方が、表(教科書p.13 JIS X0201)になっていたように、命令も
表になっている。教科書のp.213の命令語の構成に書かれている。全ての命令
がこの表に書かれている。40個弱しかないのである。
ただ、表の見方が、文字のコード表よりちょっと難しい。整数や文字は、16ビッ
トのビットパターンであったが、命令の場合は16ビットであったり、32ビット
だったりする。少し厄介であるが、慣れればたいしたことない。
それでは、実際の表の見方を示す。まずは、表の中央より右側に機械語命令が
書かれている。その左側がマシン語を表し、右側がその動作を記述している。
今は、動作はどうでもよいので、アセンブラの命令と機械語の対応を考える。
たとえば、LD命令を例にとる。表の機械語命令LDを見ると、
2つあることに気が付く。それは、
である。
LDは分かるとして、それ以外(オペランド)が分からない。
詳しいことは、今後の学習に譲るとして、それを簡単にまとめると、次のよう
になる。
|
r |
汎用レジスター |
GR0〜GR7 |
|
r1 |
1つの命令で2つの汎用レジスターを使うときの一方 |
GR0〜GR7 |
|
r2 |
もう一方の汎用レジスター |
GR0〜GR7 |
|
adr |
アドレスを示す。 |
レベル名が書かれることが多い。 |
|
x |
アドレスをシフトするインデックスレジスタ。 |
GR0〜GR7 |
これで表の見方がわかった。アセンブラのプログラムをマシン語に変換できる
ようになった。
たとえば、ラベルAが(A007)として、LD GR1,A,GR2
という命令は、
LD GR1,A,GR2 |
|
(1012)
|
|
|
(A007)
|
と変換される。また、
LD GR1,GR2という命令は、
LD GR1,GR2 |
|
(1412)
|
と変換される。これで、命令が1語の場合と2語の場合があることが分かるであ
ろう。表を見て分かるように、2語を使う命令場合、その2語目は必ず、アドレ
スとなっている。
これで、全て終わるのはまだ早い。賢い者は、LD GR1,A という命令
の変換方法に疑問が湧くであろう。インデックスレジスターが無い場合である。
これは、
と変換される。すなわち、命令を構成する2語の最初の1語の第0〜3ビットがゼ
ロの場合、インデックスレジスターが無いと判断されるのである。もし、イン
デックスレジスターに
GR0が使えると、インデックスレジスターが無
い場合と
GR0を使っている場合の区別ができなくなる。そのような理
由から、インデックスレジスターに
GR0が使えないのである。ハード
ウェアー(CPU)がそうなっているからである。
準備が整ったので、図
のプログラムを機械語に変換する。これ
をビットパターンに変換したものが、教科書のp.17の図2.4に書かれている。
ただし、この表には間違いがあるので、注意が必要である。プログラムの最初
の
PGM STARTはアセンブラ命令と言って、機械語に変換されない。こ
れについては来週の授業で説明する。したがって、最初に機械語に変換される
命令は、
LD GR1,Aとなる。その変換は、次のように行う。
- LDという命令から、16進数4桁の表示の最上位の桁は
(1)と分かる。すなわちビットパターンは、(0001)である。
- 次の桁は、LDには、(0)か(4)である。ここで
は、LD r,adr,xのパターンとなっているので、次の桁は
(0)と分かる。すなわちビットパターンは、(0000)である。
- 次の桁は、汎用レジスターを示す。(1)と分かる。ビットパター
ンは、(0001)である。
- 次の桁は、インデックスレジスターを示す。インデックスレジスター
は無いので、(0)である。ビットパターンは、(0000)となる。
ここの命令は、
LD r,adr,xのパターンであるので、命令語長は2語で
ある。最初の1語は今示したとおり、(1010)
である。次の1語は、ラベ
ル
のアドレスである。これは、プログラムが格納されるアドレスに依存す
る。ここでは、教科書(p.17の図2.4)に沿って、(A000)
からプログラム
は格納されるとすると、
のアドレスは(A007)
となる。これが第2 語
のビットパターンとなる。以上をまとめると、
|
命令 |
|
2進数 |
16進数 |
|
LD GR1,A |
|
0001000000010000 |
1010 |
|
|
|
1010000000000111 |
A007 |
となる。
このようにアセンブラー言語を人間が表を見ながら、マシン語に変換すること
をハンドアセンブル(ほとんど死語か?)と言う。これは単純作業なので、通常
は、コンピューターの仕事である。ただし、コンピューターを学習する者にとっ
ては、一度は経験しておきたいことである。
ホームページ:
Yamamoto's laboratory著者:
山本昌志
Yamamoto Masashi
平成16年9月7日