MAIN START LAD GR1,DATA CALL BUNPU ;副プログラムの呼び出し RET DATA DC 'PROGRAMMING LANGUAGE CASL.' DC 'COMET&CASL#' END BUNPU START ;文字の分布 [b04.cas] RPUSH ;汎用レジスタの退避 LAD GR2,26 ;WORKの指標レジスタ LAD GR3,2 ;2 → GR3 [ a ] CLEAR ST GR3,WORK,GR2 ;初期値をWORKに入れる SUBA GR2,=1 ;GR2-1 → GR2 JPL CLEAR JZE CLEAR TOP LD GR2,0,GR1 ;GR2に1文字取り出す CPA GR2,='#' ;最後か? [ b ] JZE PRINT CPA GR2,='A' ;'A'と比較 JMI OTHER CPA GR2,='Z' ;'Z'と比較 JPL OTHER SUBA GR2,='A' ;数値に変換 JUMP SKIP OTHER LAD GR2,26 ;英大文字以外の文字 SKIP LD GR3,WORK,GR2 ;個数を読み込む LAD GR3,1,GR3 ;GR3を1加算する ST GR3,WORK,GR2 ;個数を格納 LAD GR1,1,GR1 ;指標レジスタUP JUMP TOP PRINT LAD GR2,0 ;WORKの指標レジスタ NEXT LD GR3,WORK,GR2 ;個数を読み込む ST GR3,LEN ;出力長を格納 CPA GR2,=26 ;最後か? [ c ] JZE LAST LD GR3,GR2 ;GR2 → GR3 ADDA GR3,='A' ;文字に変換 ST GR3,AREA ;文字を格納 OUT AREA,LEN ;グラフの出力 LAD GR2,1,GR2 ;指標レジスタを加算 [ d ] JUMP NEXT LAST LD GR3,='#' ;その他の文字 ST GR3,AREA ;'#'を格納 OUT AREA,LEN ;グラフの出力 RPOP ;汎用レジスタの復元 RET WORK DS 27 AREA DS 1 DC ' ********************' LEN DS 1 END