CASL U - 文字列の検査 |
入力した文字列を検査、ここでは、数字(0〜9)の個数をカウントする副プログラムCNTNUMを作成する。
数字の文字コードは次の通りである。入力した文字を1文字ずつ3016〜3916の範囲にあるかを検査し、範囲内であればカウントする。
文字コードは16進数。
数字 0 1 2 3 4 5 6 7 8 9 文字コード 30 31 32 33 34 35 36 37 38 39
主(メイン)プログラムで入力装置から文字列を入力し、文字列の先頭アドレスを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 |