平成9年度 春期 第二種 午後 問10

                        [更新日]2001.06.4
問10 次のアセンブラプログラムの説明及びプログラムを読んで,設問に答えよ。 〔プログラムの説明〕 コンマ(,)で区切られた複数の数字列からなる文字列を受け取り,すべての数字 列の値の合計を計算する副プログラムDECSUMである。 (1)主プログラムは,GR1にパラメタの先頭番地を格納してDECSUMを呼ぶ。パラメ タの内容は,図のとおりである。 ┌─────────┐ (GR1)+0 │文字列の先頭番地 │ ├─────────┤ 1 │文字列の長さ │ ├─────────┤ 2 │合計領域の先頭番地│ └─────────┘ 図 パラメタの内容 (2)主プログラムから渡される文字列は,数字列とコンマで構成され,その他の文字 は含まない。文字列の最大長は80文字とする。 (3)数字列の最大長は9文字である。数字列は10進数とする。 (4)コンマは数字列を区切るために用いられる。コンマが連続したり,文字列の先頭 又は最後に現れたりすることはない。 (5)合計領域は10語とし,主プログラムから渡されたときには,間隔文字で埋めら れている。 (6)DECSUMは,主プログラムから渡された文字列を,最後の数字列から順に,前方 に向かって加算する。合計は,10進数字列として合計領域に右詰めで格納する。 例: ┌───┐ ┌──────┐ (GRl)+0 │ ●─┼───→│21,587,1389 │文字列 ├───┤ └──────┘ 1 │ 11 │ ├───┤ ┌─────────┐ 2 │ ●─┼───→│ △△△△△△1997 │ 合計領域 └───┘ └─────────┘ (注) △は間隔文字を示す 〔プログラム〕 DECSUM START ; PUSH 0 GR1 ; LD GR3,0,GR1 ; GR3 = 文字列へのポインタ ST GR3,INTOP ; ADD GR3,1,GR1 ; LD GR2,2,GR1 ; GR2 = 合計領域へのポインタ ST GR2,OUTTOP ; ADD GR2,TEN ; LEA GR1,0 ; けた上がりの初期化 LOOP LEA GR3,-1,GR3 ; CPL GR3,INTOP ; 文字列の終わり? JMI CRYPRC ; [ a ]; CPL GR0,COMMA ; 文宇= "," ? JZE CRYPRC ; SUB GR0,ZERO ; CALL ADDPRC ; JMP LOOP ; CRYPRC LEA GR1,0,GR1 ; 残りのけた上がりの処理 JZE DECNXT ; LEA GR0,0 ; CALL ADDPRC ; JMP CRYPRC ; DECNXT CPL GR3,INTOP ; 文字列の終わり? JMI RETURN ; [ b ] ; 次の数字列の準備 ADD GR2,TEN ; JMP LOOP ; RETURN POP GR1 ; RET ; ; ADDPRC ST GR0,TEMP ; 加算処理 LEA GR2,-1,GR2 ; LD GR0,0,GR2 ; [ c ] ; ADD GR0,TEMP ; ST GR1,TEMP ; けた上がりを加算 ADD GR0,TEMP ; CPA GR0,TEN ; JPZ CRYNZR ; CRYZER LEA GR1,0 ; JMP DECCHR ; CRYNZR LEA GR1,1 ; SUB GR0,TEN ; DECCHR [ d ] ; ST GR0,0,GR2 ; RET ; INTOP DS 1 ; 文字列の先頭番地 OUTTOP DS 1 ; 合計領域の先頭番地 TEN DC 10 ; COMMA DC #002C ; 文字 "," MASK DC #000F ; ZERO DC '0' ; TEMP DS 1 ; END ; 設問 プログラム中の[ ]に入れる正しい答えを,解答群の中から選ベ。 a,bに関する解答群 ア LD GR0,0,GR2 イ LD GR0,0,GR3 ウ LD GR2,INTOP エ LD GR2,OUTTOP オ LEA GR0,0 カ LEA GR2,TEN キ ST GR0,0,GR2 ク ST GR0,0,GR3 c,dに関する解答群 ア ADD GR0,TEMP イ ADD GR0,TEN ウ ADD GR0,ZERO エ AND GR0,MASK オ LEA GR0,0,GR1 カ OR GR0,MASK キ SUB GR0,TEMP ク SUB GR0,TEN ケ SUB GR0,ZERO

戻る  前頁:問9  次頁:問11