Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Q123 START
- LAD GR1,FIG1
- LD GR2,P
- LD GR3,Q
- CALL PREVRS
- RET
- FIG1 DC #B3D1 ; 図1のビットの並び
- P DC 4 ; p = 4
- Q DC 8 ; q = 8
- END
- REVRS START
- RPUSH
- LD GR4,=0 ; 結果のビット列を初期化
- LAD GR2,15 ; ループカウンタ
- LD GR3,0,GR1 ; GR3 ← ビット列
- LOOP SLL GR4,1 ; 結果のビット列を左シフト
- SRL GR3,1 ; 元のビット列を右シフト
- JOV ON
- JZE FIN1 ; 残りのビット列の残りのビット列は全てゼロ
- JUMP OFF
- ON OR GR4,=#0001
- OFF SUBA GR2,=1
- JMI FIN2 ; 16ビット処理済み
- JUMP LOOP
- FIN1 SLL GR4,0,GR2 ; 結果のビット列を残りのビット数だけシフト
- FIN2 ST GR4,0,GR1
- RPOP
- RET
- END
- PREVRS START
- RPUSH
- LD GR4,0,GR1 ; ビット列を保存
- CALL REVRS ; ビット列のビットの並びを逆転
- LD GR5,0,GR1 ; GR5 ← 逆転したビット列
- LD GR6,=16
- SUBA GR6,GR3 ; GR6 ← 16-q
- SRL GR5,0,GR2 ; 逆転した部分ビット列αを右端に移動
- SLL GR5,0,GR6 ; 逆転した部分ビット列αを左端に移動
- SRL GR5,0,GR2 ; 逆転した部分ビット列αをpビット右に移動
- LD GR6,=#8000
- SRA GR6,-1,GR3 ; qビット連続した1の並びを作成
- SRL GR6,0,GR2
- XOR GR6,=#FFFF
- AND GR6,GR4 ; 元のビット列中の部分ビット列αにゼロを設定
- OR GR6,GR5
- ST GR6,0,GR1
- RPOP
- RET
- END
Add Comment
Please, Sign In to add comment