Subsections

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バイトにもなる.メモリーにアクセスする場合,番地を指定しなく てはならない.その番地の指定方法を述べる.

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

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

2.4 リテラル

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

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


ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
2005-12-21


no counter