CASL U - 練習問題6
 前へ 目次へ 次へ

【練習問題6】

1 次のプログラムを見て各設問に答えよ。

REN61    START
         OUT     BUFF1, LEN
         RET
LEN      DC      5
BUFF1    DC      'CASL2'
BUFF2    DC      'COMET2'
         END
@ プログラムを実行したとき、出力される文字データを答えよ。
 
 
A ラベルLENの行を LEN  DC  3 に変更したとき、出力される文字データを答えよ。
 
 
B ラベルLENの行を LEN  DC  11 に変更したとき、出力される文字データを答えよ。
 
 
   

ヒント:@文字データが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
@ 1 と入力したとき、出力される文字データを答えよ。
 
 
A 3 と入力したとき、出力される文字データを答えよ。
 
 
B 5 と入力したとき、出力される文字データを答えよ。
 
 
C 7 と入力したとき、出力される文字データを答えよ。
 
 
D 123 と入力したとき、出力される文字データを答えよ。
 
 
   

ヒント:D比較されるのは入力された文字データの先頭の1文字だけである。



3 次のプログラムを完成しなさい。英字はすべて半角の大文字で入力すること。

(1) 文字データを入力し、'Q' であれば 'OK' 、それ以外のときは 'ERROR' と出力する。

EX63 START
LD GR0, @
IN BUFF, LEN
CPL GR0, BUFF
A OK
OUT MSG2, MLEN2
JUMP B
OK OUT MSG1, MLEN1
OWARI RET
MSG1 DC 'OK'
MSG2 DC 'ERROR'
C DC 2
D DC 5
LEN DS 1
BUFF DS 256
END
 
   

ヒント:例題3-1 @4行目でGR0とBUFF(入力データ)を比較しているので、GR0には比較元のデータを格納する。 AオペランドがラベルOKだけなのでジャンプ命令と推測できる。直前で比較をしており、OK番地(8行目)ではMSG1('OK')を出力しているので直前の比較が一致したときにジャンプする。 B直前でMSG2('ERROR')を出力しているので次行のMSG1を出力しないようにジャンプする。 CDラベルを設定する。データは出力用のものである。



(2)  1+3+5+7+9 を計算する。計算結果はKOTAE番地に記憶する。

EX64 START
LD GR0, =0
LD GR1, =1
LD GR2, =5
LOOP ADDA GR0, @
ADDA GR1, A
SUBA B, =1
C LOOP
ST D, KOTAE
RET
KOTAE DS 1
END
 
   

ヒント:例題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番地に記憶する。

EX65 START
LD GR0, =0
LD GR1, =0
L1 LD GR2, DATA, GR1
CPL @, ='*'
JZE A
B GR0, GR2
ADDA C, =1
JUMP D
L2 ST GR0, ANS
RET
DATA DC 1,2,5,4,8,'*'
ANS DS 1
END
 
   

ヒント:加算データをDC命令で定義し、データの終わりとして'*'を追加している。すなわち、'*'まで加算しながら繰り返すことで計算している。 @'*'と比較したいのはDC命令で定義したデータである。そのデータは直前のLD命令で取り出している。 AJZE命令は直前の比較が一致したときにジャンプする。すなわち加算データ(加算処理)の終わりである。 Bこの行と次の行のあとジャンプしている。次の行では何かに1を加算している。データを加算する命令がない。GR0が加算結果用、GR2は加算データが記憶されている。 C何かに1を加算している。指標レジスタか。 D繰り返しによって加算の処理をしている。無条件にジャンプしている。どこへ。


 (3)のプログラムはデータの個数に関係なく、'*'が見つかるまで加算を繰り返すようになっている。このように、データの終わりにという目印を番兵という。


 前へ 目次へ 次へ
 CASL U Copyright © 2003  Hiroshi Masuda

 

 

inserted by FC2 system