Skip to content

Instantly share code, notes, and snippets.

@maehrm
Created November 18, 2018 07:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save maehrm/fe1edcfcdbbd6e5c77c4ece80865e5c3 to your computer and use it in GitHub Desktop.
Save maehrm/fe1edcfcdbbd6e5c77c4ece80865e5c3 to your computer and use it in GitHub Desktop.
平成22年度秋期基本情報午後問12_設問3
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment