前回の授業では、COMET IIのシミュレーターWCASL IIを実際に触れて、その使い方を学習
した。今後の授業に生かして欲しい。
今まで、学習したCOMET IIの命令は、次の通りである。これを思い出して、本日の学習内
容と絡めて、理解を深める必要がある。
- アセンブラ命令
開始 |
START |
プログラムの先頭を示し、入口名と実行開始番地を定義 |
終了 |
END |
プログラムの終わりを明示 |
領域確保 |
DS |
プログラムで使うメインメモリーを予約 |
定義 |
DC |
メインメモリーの初期値設定 |
- 機械語命令
- データ転送命令
データ転送 |
LD |
メインメモリーやレジスターの内容を汎用レジスタに転送 |
データ転送 |
ST |
汎用レジスタのデータをメインメモリーへ転送 |
アドレス転送 |
LAD |
実効アドレスを汎用レジスターへ転送 |
- 算術、論理演算
算術加算 |
ADDA |
1語のデータを符号付き整数と見なし、加算を行う。 |
論理加算 |
ADDL |
1語のデータを符号無し整数と見なし、加算を行う。 |
算術減算 |
SUBA |
1語のデータを符号付き整数と見なし、減算を行う。 |
算術減算 |
SUBL |
1語のデータを符号無し整数と見なし、減算を行う。 |
論理積 |
AND |
1語のデータのビット毎の論理積の演算を行う。 |
論理和 |
OR |
1語のデータのビット毎の論理和の演算を行う。 |
排他的論理和 |
XOR |
1語のデータのビット毎の排他的論理和の演算を行う。 |
本日の学習では、フラグレジスターが重要な役割を果たす。それは、次のようなものであっ
たことを思い出して欲しい。
- レジスターとはCPUにある記憶領域である。
- フラグレジスターとは、データや演算結果の状態を示すレジスターである。
- 演算結果により、0か1が設定される。フラグ(flag)とは、旗のことで、サッカー
の試合で、反則があると旗を上げるのと同じである。
- COMET IIには、3つのフラグレジスターが用意されている。それぞれは、1ビット
で0か1の値である。
サインフラグ |
(Sign Flag) |
SF |
第15ビットが1の時、SF=1となる。 |
ゼロフラグ |
(Zero Flag) |
ZF |
全てのビットが0の時、ZF=1となる。 |
オーバーフローフラグ |
(Overflow Flag) |
OF |
演算結果などが16ビットを越
えた場合、OF=1となる。 |
CASL IIで使われる整数は、符号付きと符号無しがある。符号付きと符号無し整数の違い
は、次の通りである。なぜこのようになるか、忘れた者は以前のノートを見よ。
表 1:
符号付きと負号無し整数
ビットパターン |
符号無整数 |
符号有整数 |
0000000001010011 |
(83) |
(83) |
1000000001010011 |
(32851) |
(-32685) |
|
|
|
本日は、比較とジャンプ命令を学習する。これは、セットで使われることが多く、数の比
較を行い、その結果を受けて、処理の実行を変える。FORTRANやC言語では、
IF(A.GT.B)GO TO 200 if(a>b)goto next_step;
と書かれる構文とにている。A.GT.Bが比較命令で、IFとGO TOがジャンプ命令に相当する。
CASL IIの比較とジャンプの命令は、次の通りである。
- 整数の大小の比較命令を学習する。比較の結果は、フラグレジスタ(FR)を設定す
ることで示される。
算術比較 |
CPA |
データは符号付き整数と見なし、比較を行う。 |
論理比較 |
CPL |
データは符号無し整数と見なし、比較を行う。 |
- フラグレジスタ(FR)の値に基づいて、処理を分岐させる。
正分岐 |
JPL |
SFとZFがともに0の時、指定の実効アドレスに分岐 |
負分岐 |
JMI |
SFが1の時、指定の実効アドレスに分岐 |
非零分岐 |
JNZ |
ZFが0の時、指定の実効アドレスに分岐 |
零分岐 |
JZE |
ZFが1の時、指定の実効アドレスに分岐 |
オーバーフロー分岐 |
JOV |
OFが1の時、指定の実効アドレスに分岐 |
無条件分岐 |
JUMP |
無条件に、指定の実効アドレスに分岐 |
ホームページ:
Yamamoto's laboratory著者:
山本昌志
Yamamoto Masashi
平成16年10月15日