CASL U - 文字列の比較 |
2つの文字列を比較して同じかどうかを調べ、比較した結果は、フラグレジスタの値として設定する副プログラムHIKAKUを作成する。
基本的には、前ページ「2つのデータテーブルから共通データを取り出す」と同じで、先頭から1文字ずつ比較していくことになる。
2つの文字列はラベルMOJIAとMOJIBから順に1文字ずつ格納される。各文字は文字コードとして次の図のようにメモリに格納される。2つの文字列は同じ長さとする。
MOJIA
0043 0041 0053 004C 0032 C A S L 2
2つの文字列の先頭アドレスとその文字長のデータは次のようにテーブルとして格納しその先頭アドレスをGR1に格納して副プログラムに渡す。副プログラムでは、先頭から1文字ずつ比較していき、一致しなければそこで処理を中断して呼び出し側に戻る。
(GR1) (GR1)+1 (GR1)+2
MOJIAの先頭アドレス MOJIBの先頭アドレス 文字列の長さ
MAIN START
LAD GR1, ADDR
CALL HIKAKU
JZE ONAJI
OUT NO, LNO
JUMP OWARI
ONAJI OUT OK, LOK
OWARI RET
ADDR DC MOJIA, MOJIB, 9
MOJIA DC 'MOJIRETSU'
MOJIB DC 'MOJIRETSU'
OK DC 'ONAJI'
LOK DC 5
NO DC 'CHIGAU'
LNO DC 6
END
HIKAKU START
RPUSH
LD GR2, 1, GR1 ;MOJIBの先頭アドレス.
LD GR3, 2, GR1 ;文字列の長さ.
LD GR1, 0, GR1 ;MOJIAの先頭アドレス.
LOOP LD GR0, 0, GR1 ;MOJIAの文字.
CPL GR0, 0, GR2 ;MOJIAとMOJIBの文字を比較.
JNZ FUICCHI ;不一致.
LAD GR1, 1, GR1 ;MOJIAのアドレス1加算.
LAD GR2, 1, GR2 ;MOJIBのアドレス1加算.
SUBA GR3, =1 ;文字列長1減算.
JNZ LOOP ;繰り返し.
FUICCHI RPOP
RET
END
課題1 上の問題と同じ副プログラムを使って、2つの文字列を入力装置から入力できるように主プログラムを作成する。
条件は上の問題と同じである。入力できる文字数は1〜256文字とする。
CASL U | Copyright © 2003,2017 Hiroshi Masuda |