〔プログラム1〕
(行番号)
1 BITSON START
2 RPUSH
3 LD GR3,1,GR1 ; GR3: ビット位置
4 ; ビット位置を,相対アドレス(GR2)と
5 ; ビットインデックス(GR3)とに変換
6 LD GR2,GR3
7 [ a ]
; ア SLL GR2,O,GR3 エ SRL GR2,O,GR3
; イ SLL GR2,4 オ SRL GR2,4
; ウ SLL GR2,4,GR3 カ SRL GR2,4,GR3
8 AND GR3,=#000F
9 LD GR4,2,GR1 ; GR4:ビット長(初期値)
10 ; (ビットインデックス+ビット長) >= 16 の間,ビット操作を行う
11 LOOP LD GR0,GR4
12 ADDL GR0,GR3
13 GPL GR0,BITSPW
14 JMI BREAK
15 LD GR5,BITSPW ; GR5:語内で対象となるビット数
16 LD GR3,GR3
17 JZE FULL
18 [ b ]
; ア ADDL GR5,GR2 エ SUBL GR5,GR2
; イ ADDL GR5,GR3 オ SUBL GR5,GR3
; ウ ADDL GR5,GR4 カ SUBL GR5,GR4
19 SUBL GR3,GR3 ; GR3←0
20 FULL SUBL GR4,GR5 ; 操作するビット数だけビット長を減らす
21 LD GR0,=1
22 SLL GR0,0,GR5
23 SUBL GR0,=1 ; GR0:ビットマスク
24 CALL SETOP
25 ADDL GR2,=1 ; GR2:次の語の相対アドレス
26 JUMP LOOP
27 BREAK LD GR4,GR4 ; 操作の対象になる未処理のビットあり?
28 [ c ]
; ア JNZ FIN ウ JPL FIN オ JZE FIN
; イ JNZ LOOP エ JPL LOOP カ JZE LOOP
29 ; 未操作のビット数分の右詰めのビットマスクを生成し,
30 ; 必要なビット数だけ左へシフト
31 LD GR0,=1
32 SLL GR0,0,GR4
33 SUBL GR0,=1
34 LD GR5,BITSPW
35 SUBL GR5,GR3
36 [ d ]
; ア ADDL GR5,GR2 エ SUBL GR5,GR2
; イ ADDL GR5,GR3 オ SUBL GR5,GR3
; ウ ADDL GR5,GR4 カ SUBL GR5,GR4
37 SLL GR0,0,GR5 ; GR0: ビットマスク
38 CALL SETOP
39 FIN RPOP
40 RET
41 BITSPW DC 16 ; 1語のビット数
42 END
〔プログラム2〕
(行番号)
1 SETOP START
2 RPUSH
3 LD GR3,0,GR1
4 ADDL GR3,GR2
5 OR GR0,0,GR3
6 ST GR0,0,GR3
7 RPOP
8 RET
9 END
〔プログラム3〕
(行番号)
1 BITSON START
2 RPUSH
3 LAD GR7,SETOP
4 CALL BITSON
5 RPOP
6 RET
7 END