〔プログラム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





















































