2 機械語命令の書き方

2.1 命令形式

教科書に書かれているように、機械語命令の書き方は、オペランドが異なる5 種類に分類できる。機械語命令の場合、CASL IIの1行は機械語命令の1, 2ワー ドのマシン語に変換されて、メインメモリーに格納される。1ワードは16ビッ トで、2ワードは32ビットである。その1あるいは2ワードで、命令の種類と対象 であるオペランドを示すマシン語になる2

機械語命令の書き方は、オペランドの指定の仕方により、以下の5通りに分類 できる。


ラベル欄  命令コード欄 オペランド欄 注釈欄
[label] OP r1,r2 ;レジスタ同士の操作
[label] OP r,adr[,x] ;レジスタとメモリーの操作
[label] OP adr[,x] ;メモリーの操作
[label] OP r ;レジスタの操作
[label] OP   ;メモリーやレジスタを操作しない

これを見て分かるように、機械語命令の多くは、メモリーやレジスターを操作 する。プログラムの目的は、データを処理することで、そのデータはメモリー またはレジスターに格納されることからも、そのことが理解できる。

2.2 オペランドの内容

命令の対象となるオペランドの書き方は、先に示したように、5種類である。 機械語命令の書き方を見よ。これらの内、r1r2, rが汎用レ ジスタを示している。GR0とか、GR1と書く。汎用レジスタの範囲は、 GR0からGR7までである。

xは指標レジスタを示している。指標レジスタについては、第6回の授業 で説明したが、忘れていると思うので、再度説明する。プログラムを書いてい るとき、基準点のアドレスにある値を加算してデータにアクセスしなくてはな らないことがある。このようなときに指標レジスタを使う。CASL IIでは、オ オペランド欄に、

   adr,x
と書けば、それが出来る。adrが基準点のアドレスで、xが指標レジ スタである。実際にデータが操作される実行アドレスは、adr+xというこ とになる。adrは、つぎに述べる方法でアドレスを指定する。加算する値 を格納するのは指標レジスタ(index register)で汎用レジスタのGR1GR7を使う。どうして、GR0はダメなのか?。命令をマシン語に直す とこの理由が分かる。このように、指標レジスタを用いて、アドレスを操作す ることをアドレス修飾と言う。

2.3 アドレス

メインメモリーの中に格納されているプログラム(命令とデータ)にアクセスし ないと、CPUは何もできない。メモリーの特定の場所の内容を参照するために、 記憶領域に応じて番地が振り分けられている。その番地のことをアドレスと言 う。

COMET IIのメインメモリーのアドレスは、16ビットである。従って、アドレス の範囲は、0〜65535(#0000〜#FFFF)番地となる。このメモリー空間は、20年 くらい前の8ビットパソコンと同じである。64kバイトです。ちなみに、いま主 流の32ビットパソコンのメモリー空間は32ビットで、4Gバイトにもなる。メモ リーにアクセスする場合、番地を指定しなくてはならない。その番地の指定方 法を述べます。

教科書に書かれている通り、アドレスは、つぎに示す3通りの方法で記述でる。 最初の2つの10進数と16進数を使う場合、絶対アドレスを指定することになる。 よっぽどのことがないかぎり、絶対番地を指定することはない3。 なぜならば、実際のプログラムを実行する場合、データがどの番地に格納され ているかは、プログラマは分からない。プログラム実行段階で、OSが決めるか らである。従って、みなさんは最後のアドレス定数を使うことになる。

10進定数 10進数の定数を用います。内容は、教科書に書かれている通 りです。
16進定数 16進数の定数を用います。16進数であることを表すために、 先頭に#を付けます。
アドレス定数 ラベル名を指定します。アセンブラーにより、ラベル名がア ドレスに変換されます。

2.4 リテラル

機械語命令のオペランドのadrは、アドレスを示すことは先に述べた 通りである。アドレスの指定は、10進定数と16進定数、アドレス定数がある。 さらに、リテラルでもそれを指定できる。リテラルを用いたアドレスは、10 進定数や16進定数、あるいは文字定数の前に'='の記号をつける。

教科のリテラル形式をアセンブルすると、DC命令を使ったのマシン語に なる。あとは、教科書の通り。


ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
平成16年9月7日


no counter