CASL U - 文字列の検査
 前へ 目次へ 次へ

文字列の検査

 入力した文字列を検査、ここでは、数字(0〜9)の個数をカウントする副プログラムCNTNUMを作成する。
 数字の文字コードは次の通りである。入力した文字を1文字ずつ3016〜3916の範囲にあるかを検査し、範囲内であればカウントする。

数字
文字コード 30 31 32 33 34 35 36 37 38 39
  文字コードは16進数。 

 主(メイン)プログラムで入力装置から文字列を入力し、文字列の先頭アドレスをGR1、文字長をGR2に格納して副プログラムに渡し、カウントした数字の個数をGR0に格納する。
 入力できる文字数は10文字以内とし、リターンキーだけ(0文字)のときや11文字以上のときは再入力する。

MAIN     START
DIN      IN      MOJI, MLEN
         LAD     GR0, 0
         CPA     GR0, MLEN     ;0文字?
         JZE     DIN           ;再入力.
         LAD     GR0, 10
         CPA     GR0, MLEN     ;11文字以上?
         JMI     DIN           ;再入力.
         LAD     GR1, MOJI
         LD      GR2, MLEN
         CALL    CNTNUM
         ST      GR0, KOSUU
         RET
MOJI     DS      256
MLEN     DS      1             ;入力文字長.
KOSUU    DS      1
         END
CNTNUM   START
         RPUSH
         LAD     GR4, 0        ;初期化(カウント用)
LOOP     LD      GR3, 0, GR1   ;入力文字の1文字.
         CPA     GR3, ='0'     ;文字'0'と比較.
         JMI     NEXT          ;'0'より小さいときNEXTへ.
         CPA     GR3, ='9'     ;文字'9'と比較.
         JPL     NEXT          ;'9'より大きいときNEXTへ.
         LAD     GR4, 1, GR4   ;カウント.
NEXT     LAD     GR1, 1, GR1   ;アドレスに1加算.
         SUBA    GR2, =1       ;文字数1減算.
         CPA     GR2, =0       ;終わりか?
         JPL     LOOP          ;繰り返し.
         LD      GR0, GR4      ;個数をGR0に格納.
         RPOP
         RET
         END


課題1 上の問題と同じ副プログラムを使って、カウントした数字の個数を出力装置に表示できるように主プログラムを作成する。
 条件は上の問題と同じである。
ヒント:数値に3016を加算すると数字の文字コードになる。


メインプログラムのみを示す。


課題2 英大文字の個数をカウントする副プログラムCNTALPHを作成する。
 条件は上の問題と同じである。主プログラムも同じものMAINを使う。
 レジスタの値は副プログラム呼び出し前と変わらないようにすること。



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

 

 

inserted by FC2 system