平成8年度 秋期 第二種 午後 問10

                        [更新日]1996.11.19
問10 次のアセンブラプログラムの説明及びプログラムを読んで,設問に答えよ。 〔プログラムの説明〕 二つのビット列(ビット列1,ビット列2)の一部分(以下,部分ビット列と呼ぶ) を交換する副プログラムBSWAPである。 (1)ビット列1とビット列2の長さは,それぞれ1語(16ビット)とする。 (2)主プログラムは,CR1にパラメタの先頭番地を格納して副プログラムBSWAPを 呼ぶ。パラメタの内容と意味は,図1のとおりである。 ┌───┐ (CR1) +0 │ A1 │ビット列1のアドレス ├───┤ +1 │ A2 │ビット列2のアドレス ├───┤ +2 │ S │部分ビット列の先頭位置 ├───┤ +3 │ L │部分ビット列の長さ └───┘ 図1 パラメタの内容と意味 部分ビット列の先頭位置Sは,左端のビットを0番とするビット番号,部分ビット 列の長さLはビット数とする。 (3)実行例を図2に示す。この例では,ビット番号3のビットから始まる4ビットを 交換する。 (4)S≧0,L≧1,S+L≦16とする。 〔プログラム〕 BSWAP START ; PUSH 0,GR1 ; ┐ PUSH 0,GR2 ; ├ レジスタの退避 POSH 0,GR3 ; ┘ LD GR2,MSBIT ; ┐ LD GR3,3,GR1 ; │ LEA GR3,-1,GR3 ; │ 〔 a 〕 ; ├ 部分ビット列を取り出すための LDGR3,2,GR1 ; │ マスクを作成 〔 b 〕 ; │ ST GR2,GETSUB ; ┘ EOR GR2,ALLONE ; ┬ 部分ビット列を削除するための ST GR2,ERASE ; ┘ マスクを作成 LD GR2,1,GR1 ; LD GR0,0,GR2 ; ビット列2 → GR0 LD GR2,0,GR1 ; LD GR3,0,GR2 ; ビット列1 → GR3 ST GR3,SAVE ; CALL BMOVE�� ; 〔 c 〕 ; LD GR0,SAVE ; ビット列1 → GR0 LD GR2,1,GR1 ; LD GR3,0,GR2 ; ビット列2 → GR3 CALL BMOVE ; ST GR3,0,GR2 ; ビット列2を元の位置に格納 POP GR3 ; ┐ POP GR2 ; ├ レジスタの復元 POP GR1 ; ┘ RET ; BMOVE AND GR0,GETSUB ; ┐ ST GR0,WORK ; │ GR0から部分ビット列を取り出し, 〔 d 〕 ; ├ それをGR3の該当部分に格納する OR GR3,WORK ; │ 副プログラム RET ; ┘ MSBIT DC #8000 ; ALLONE DC #FFFF ; GETSUB DS 1 ; ERASE DS 1 ; SAVE DS 1 ; WORK DS 1 ; END ; 設問 プログラム中の〔 〕に入れる正しい答えを,解答群の中から選ベ。 a,bに関する解答群 ア SLA GR2,0,GR3  イ SLA GR3,0,GR2 ウ SLL GR2,0,GR3  エ SLL GR3,0,GR2 オ SRA GR2,0,GR3  カ SRA GR3,0,GR2 キ SRL GR2,0,GR3  ク SRL GR3,0,GR2 c,dに関する解答群 ア AND GR0,ERASE  イ AND GR3,ERASE ウ EOR GR0,ERASE  エ EOR GR3,ERASE オ OR  GR0,ERASE  カ OR  GR3,ERASE キ ST  GR3,0,CR1  ク ST  GR3,0,GR2 ケ ST  GR3,1,GR1
戻る 次頁:問11