CASL U - 練習問題5 |
【練習問題5】
1 次の演算を行うときに適している命令を解答群から選んで記号で答えよ。
ヒント:@符号ありの加算は算術加算。 A符号無しのシフトは論理シフト。 C符号ありの減算は算術減算。 D40000として比較したいので。算術比較では-32768〜32767、論理比較では0〜65535が扱える範囲である。
2 次のプログラムを完成しなさい。英字はすべて半角の大文字で入力すること。
(1) ATAI1-ATAI2 を計算し、結果をKOTAE番地に格納する。ATAI1, ATAI2はそれぞれ123(16), 456(16)とする。
ヒント:@プログラムの始まりを定義するアセンブラ命令。 AOSに戻る機械語命令。 B定数定義のアセンブラ命令。 Cラベル名。プログラム中で使われているラベル名をよく見てみよう。 D答え記憶用の領域を確保する。領域確保のアセンブラ命令。 Eプログラムの終わりを定義するアセンブラ命令。
(2) D1+D2+D3 を計算し、結果をKOTAE番地に格納する。D1, D2, D3はそれぞれ123(16), 456(16), 789(16)とする。
ヒント:@どのGRを使って計算しているかよく見てみよう。 Aオペランドのアドレスを各部分。定数定義しているラベル名をよく見てみよう。 BST命令はメモリに記憶させる命令。どこへ記憶させるのか。
(3) D1+D2+D3 を計算し、結果をKOTAE番地に格納する。D1, D2, D3はそれぞれ123(16), 456(16), 789(16)とする。また、ラベル名D2, D3は使わずに指標レジスタを使うこと。
ヒント:@2つ目のデータはD1番地の次である。指標レジスタを答える。 A何かと1を加算している。次の行でさらにGR0に(D1番地+B)番地の内容を加算している。 B指標レジスタを答える。 C何をKOTAE番地に記憶させるのか。
(4) ATAIの2倍と4倍を計算し、結果をANS1, ANS2番地に格納する。ATAIは 3 とする。
ヒント:@値を1ビット左シフトすると元の値の2倍となる。 AGR0は直前の行で2倍の計算がされている。 B2倍された値をさらに2倍すると4倍になる。 CGR0をどこに記憶させるのか。
(2)と(3)は同じ計算問題である。プログラム的には、指標レジスタを使うか、使わないか、の差である。データ個数の少ない値(ここでは3つ)の計算なので指標レジスタを使った方が面倒になるが、データ個数が多くなると指標レジスタ及び繰り返しの処理ですっきりしたプログラムが可能となる。
このアセンブラ言語には乗算(×)と除算(÷)の命令がないが、(4)のシフト演算などの演算でプログラムすることができる。この問題(4)では2倍と4倍という限定されたものであるが、n×mの処理も可能である。
CASL U | Copyright © 2003 Hiroshi Masuda |