CASL U - 練習問題6 |
【練習問題6】
1 次のプログラムを見て各設問に答えよ。
REN61 START OUT BUFF1, LEN RET LEN DC 5 BUFF1 DC 'CASL2' BUFF2 DC 'COMET2' END
ヒント:@文字データがBUFF1番地とBUFF2番地で定義されている。どちらが出力されるか。 ALEN番地の値は出力する文字数である。 BBUFF1番地に定義している文字データの長さは5文字であるが、メモリ上には次のように文字データが記憶されている。
アドレス LEN BUFF1 BUFF2 データ #0005 #0043 #0041 #0053 #004C #0032 #0043 #004F #004D #0045 #0054 #0032 C A S L 2 C O M E T 2
2 次のプログラムを見て各設問に答えよ。
EX62 START IN BUFF, LEN ;文字データ入力. LD GR0, BUFF CPL GR0, ='1' JZE LL1 CPL GR0, ='3' JZE LL2 CPL GR0, ='5' JZE LL3 OUT MSG1, MLEN1 JUMP OWARI LL1 OUT MSG2, MLEN2 JUMP OWARI LL2 OUT MSG3, MLEN3 JUMP OWARI LL3 OUT MSG4, MLEN4 OWARI RET MSG1 DC 'CASL2' MSG2 DC 'COMET2' MSG3 DC 'Assembler' MSG4 DC 'Program' MLEN1 DC 5 MLEN2 DC 6 MLEN3 DC 9 MLEN4 DC 7 LEN DS 1 BUFF DS 256 END
ヒント:D比較されるのは入力された文字データの先頭の1文字だけである。
3 次のプログラムを完成しなさい。英字はすべて半角の大文字で入力すること。
(1) 文字データを入力し、'Q' であれば 'OK' 、それ以外のときは 'ERROR' と出力する。
ヒント:例題3-1 @4行目でGR0とBUFF(入力データ)を比較しているので、GR0には比較元のデータを格納する。 AオペランドがラベルOKだけなのでジャンプ命令と推測できる。直前で比較をしており、OK番地(8行目)ではMSG1('OK')を出力しているので直前の比較が一致したときにジャンプする。 B直前でMSG2('ERROR')を出力しているので次行のMSG1を出力しないようにジャンプする。 CDラベルを設定する。データは出力用のものである。
(2) 1+3+5+7+9 を計算する。計算結果はKOTAE番地に記憶する。
ヒント:例題3-2 @GR1は3行目より加算データ作成用、GR2は4行目よりデータの個数用と判断できる。したがって、GR0は計算結果用である。 AGR1は加算データ作成用。値は2ずつ増えている。 B何かから1を減じている。GR0とGR1は直前で加算しているので…。データの個数か。 C直前の減算でデータの個数を減じているとすれば、その個数が0になるまで繰り返せばよい。 D何かをKOTAE番地に格納する。KOTAE番地に計算結果を格納する。
(3) 1+2+5+4+8 を計算する。計算結果はANS番地に記憶する。
ヒント:加算データをDC命令で定義し、データの終わりとして'*'を追加している。すなわち、'*'まで加算しながら繰り返すことで計算している。 @'*'と比較したいのはDC命令で定義したデータである。そのデータは直前のLD命令で取り出している。 AJZE命令は直前の比較が一致したときにジャンプする。すなわち加算データ(加算処理)の終わりである。 Bこの行と次の行のあとジャンプしている。次の行では何かに1を加算している。データを加算する命令がない。GR0が加算結果用、GR2は加算データが記憶されている。 C何かに1を加算している。指標レジスタか。 D繰り返しによって加算の処理をしている。無条件にジャンプしている。どこへ。
(3)のプログラムはデータの個数に関係なく、'*'が見つかるまで加算を繰り返すようになっている。このように、データの終わりにという目印を番兵という。 |
CASL U | Copyright © 2003 Hiroshi Masuda |