問10 次のアセンブラプログラムの説明及びプログラムを読んで,設問に答えよ。 [プログラムの説明] 副プログラムPARITYは,連続するN語に格納されているデータにパリティビット を付加する処理(セット処理)と,パリティが正しいかどうかを検査する処理(チェ ック処理)を行う。 データは各語の第1〜15ビットの15ビットに格納し,第0ビット(左端ビット) をパリティビットとして使用する。 パリティビットの値は,各語の第1〜15ビット中の1であるビットの個数が奇数の ときは1,偶数のときは0とする。 図1 データとパリティビットの構成 (1) データとパリティビットは,図2のようにブロックに入れ,そのブロックの先頭 アドレスをGR1に格納して,主プログラムから渡される。
図2 ブロックの構成 (N > 0) (2) 主プログラムから渡されたGR0の内容が0のとき,セット処理を行う。 このとき,主プログラムから渡されるブロック中の語1〜Nのパリティビットは すべて0になっている。 (3) 主プログラムから渡されたGR0の内容が0以外のとき,チェック処理を行う。 ブロック中の全パリティビットの値が正しければ,GR0に0を設定して, 主プログラムに戻る。 パリティビットの値が正しくない語を検出した時点で,GR0にその語番号 (ブロックの先頭の語番号を0とする)を設定して,主プログラムに戻る。 (4) 主プログラムに戻るとき,汎用レジスタGR1〜GR3の内容は呼び出される前の 値に復元する。 [プログラム] PARITY START ; PUSH 0,GR3 ;┐ PUSH 0,GR2 ;├ レジスタの退避 PUSH 0,GR1 ;┘ ST GR0,SAVER0 ; LD GR2,0,GR1 ; ブロック長 LEA GR2,-1,GR2 ; ループカウント LOOP1 LEA GR0,0 ; ST GR0,ODDEVN ; 1のビット数の奇偶判定語を初期化 LEA GR1,1,GR1 ; LD GR3,0,GR1 ; LOOP2 SLL GR3,1 ; JZE CNTEND ; [ a ] ; LD GR0,MASK ;┐ [ b ] ;├ 判定語のビットを反転 ST GR0,ODDEVN ;┘ JMP LOOP2 ; CNTEND LD GR0,ODDEVN ; CPA GR3,SAVER0 ; JZE SET ; セット処理へ EOR GR0,0,GR1 ; パリティビットの検査 [ c ] ; JMP NEXTCH ; SET OR GR0,0,GR1 ; パリティビットを付加 ST GR0,0,GR1 ; NEXTCH LEA GR2,-1,GR2 ; JNZ LOOP1 ; LEA GR0,0 ; POP GR1 ;┐ FIN POP GR2 ;├ レジスタの復元 POP GR3 ;┘ RET ; ERROR POP GR1 ; [ d ] ; ST GR2,WORK ; SUB GR0,WORK ; JMP FIN ; MASK DC #8000 ; ODDEVN DS 1 ; SAVER0 DS 1 ; WORK DS 1 ; END ; 設問 プログラム中の[ ]に入れる正しい答えを,解答群の中から選べ。 a,cに関する解答群 ア JMI ERROR イ JMI LOOP1 ウ JMI LOOP2 エ JPZ ERROR オ JPZ LOOP1 カ JPZ LOOP2 キ JZE ERROR ク JZE LOOP1 ケ JZE LOOP2 答 aカ答 cア b,dに関する解答群 ア AND GR0,ODDEVN イ AND GR0,0,GR1 ウ AND GR3,ODDEVN エ EOR GR0,ODDEVN オ EOR GR3,ODDEVN カ LD GR0,0,GR1 キ OR GR0,ODDEVN ク OR GR0,0,GR1 ケ OR GR3,ODDEVN 答 bエ答 dカ