機械語命令の書き方は、オペランドの指定の仕方により、以下の5通りに分類
できる。
ラベル欄 | 命令コード欄 | オペランド欄 | 注釈欄 |
---|---|---|---|
[label] | OP | r1,r2 | ;レジスタ同士の操作 |
[label] | OP | r,adr[,x] | ;レジスタとメモリーの操作 |
[label] | OP | adr[,x] | ;メモリーの操作 |
[label] | OP | r | ;レジスタの操作 |
[label] | OP | ;メモリーやレジスタを操作しない |
これを見て分かるように、機械語命令の多くは、メモリーやレジスターを操作 する。プログラムの目的は、データを処理することで、そのデータはメモリー またはレジスターに格納されることからも、そのことが理解できる。
xは指標レジスタを示している。指標レジスタについては、第6回の授業 で説明したが、忘れていると思うので、再度説明する。プログラムを書いてい るとき、基準点のアドレスにある値を加算してデータにアクセスしなくてはな らないことがある。このようなときに指標レジスタを使う。CASL IIでは、オ オペランド欄に、
adr,xと書けば、それが出来る。adrが基準点のアドレスで、xが指標レジ スタである。実際にデータが操作される実行アドレスは、adr+xというこ とになる。adrは、つぎに述べる方法でアドレスを指定する。加算する値 を格納するのは指標レジスタ(index register)で汎用レジスタのGR1〜 GR7を使う。どうして、GR0はダメなのか?。命令をマシン語に直す とこの理由が分かる。このように、指標レジスタを用いて、アドレスを操作す ることをアドレス修飾と言う。
COMET IIのメインメモリーのアドレスは、16ビットである。従って、アドレス の範囲は、0〜65535(#0000〜#FFFF)番地となる。このメモリー空間は、20年 くらい前の8ビットパソコンと同じである。64kバイトです。ちなみに、いま主 流の32ビットパソコンのメモリー空間は32ビットで、4Gバイトにもなる。メモ リーにアクセスする場合、番地を指定しなくてはならない。その番地の指定方 法を述べます。
教科書に書かれている通り、アドレスは、つぎに示す3通りの方法で記述でる。
最初の2つの10進数と16進数を使う場合、絶対アドレスを指定することになる。
よっぽどのことがないかぎり、絶対番地を指定することはない3。
なぜならば、実際のプログラムを実行する場合、データがどの番地に格納され
ているかは、プログラマは分からない。プログラム実行段階で、OSが決めるか
らである。従って、みなさんは最後のアドレス定数を使うことになる。
10進定数 | 10進数の定数を用います。内容は、教科書に書かれている通 りです。 |
16進定数 | 16進数の定数を用います。16進数であることを表すために、 先頭に#を付けます。 |
アドレス定数 | ラベル名を指定します。アセンブラーにより、ラベル名がア ドレスに変換されます。 |
教科のリテラル形式をアセンブルすると、DC命令を使ったのマシン語に なる。あとは、教科書の通り。