--- /dev/null
+;;; 平成20年 秋期 基本情報技術者 午後 問13
+;;; アンケートに対するn人分の回答を集計し、集計結果をグラフで出力する副プログラム
+SUMMARY START
+ RPUSH
+; カウンタ領域と出力バッファを初期化
+ LD GR2,=0
+ LD GR3,=' '
+ LD GR4,=0 ; ループカウンタ
+ LAD GR5,PBUF ; 出力バッファのポインタ
+LOOP1 ST GR2,COUNTR,GR4 ; カウンタ領域を初期化
+ ST GR3,0,GR5 ; 出力バッファを空白で初期化
+ ST GR3,1,GR5
+ ST GR3,2,GR5
+ LAD GR5,3,GR5 ; 出力バッファのポインタを更新
+ LAD GR4,1,GR4 ; ループカウンタを更新
+ CPA GR4,=16
+ JMI LOOP1
+; 項目ごとに "はい" と答えた人数を集計
+ LD GR5,=0 ; GR5: "はい" の人数の最大値
+LOOP2 LD GR4,=0 ; カウンタ領域のポインタ
+ LD GR2,0,GR1 ; GR2 ←1人分の回答
+LOOP3 SLL GR2,1 ; 回答は "はい" ?
+ JOV ON
+ JZE NEXTW ; 残りの項目はすべて "いいえ"
+ JUMP OFF
+ON LD GR3,COUNTR,GR4 ; カウンタに1を加算
+ ADDA GR3,=1
+ ST GR3,COUNTR,GR4
+ CPA GR3,GR5 ; 最大値と比較
+ JPL CHANGE
+ JUMP OFF
+CHANGE LD GR5,GR3 ; 最大値を入替え
+OFF LAD GR4,1,GR4 ; 次の項目
+ JUMP LOOP3
+NEXTW LAD GR1,1,GR1
+ SUBA GR0,=1 ; 全回答処理済?
+ JPL LOOP2
+; 集計結果を棒グラフで出力
+ LD GR5,GR5
+ JZE FIN
+ LD GR0,='*'
+LOOP4 LD GR3,=1 ; 出力バッファのポインタ
+ LD GR4,=0 ; カウンタ領域のポインタ
+LOOP5 CPA GR5,COUNTR,GR4 ; "はい" の人数と比較
+ JNZ NOTSET
+ ST GR0,PBUF,GR3 ; 出力バッファに "*" を設定
+NOTSET LAD GR3,3,GR3 ; 出力バッファのポインタを更新
+ LAD GR4,1,GR4 ; カウンタ領域のポインタを更新
+ CPA GR4,=16
+ JMI LOOP5
+ OUT PBUF,PLEN
+ SUBA GR5,=1
+ JPL LOOP4
+FIN OUT FOOTER,PLEN
+ RPOP
+ RET
+COUNTR DS 16 ; カウンタ領域
+PLEN DC 48
+PBUF DS 48 ; 出力バッファ
+FOOTER DC '01 02 03 04 05 06 07 08 09 10 11 12 13 '
+ DC '14 15 16 '
+ END