LoginSignup
0
0

More than 5 years have passed since last update.

H27年秋期 基本情報技術者 午後問12 解説 設問3

Posted at
MAIN    START
        LD     GR0,X          ; GR0 ← X
        LAD    GR1,Y          ; GR1 ← Yのアドレス
        LD     GR2,=42        ; GR2 ← m
        LAD    GR3,Z          ; GR3 ← Zのアドレス
        LD     GR4,=4
        CALL   BITINSL
        RET
X       DC     #5E96
Y       DC     #1234
        DC     #5678
        DC     #EF18
        DC     #CDEF
Z       DS     5

BITINSL START
        RPUSH
LOOP1   CPA    GR2,=17
        JMI    INS
        CALL   COPY        ; ビット列 Y の先頭から挿入位置の直前の
        SUBA   GR2,=16     ; 語までを結果の領域ヘコピー
        JUMP   LOOP1
INS     CALL   BITINS
        LAD    GR1,1,GR1
        LAD    GR3,2,GR3
        SUBA   GR4,=1
        JZE    FIN
LOOP2   CALL   COPY        ; ビット列 Y の残りの部分を
        JNZ    LOOP2       ; 結果の領域ヘコピー
FIN     RPOP
        RET
COPY    START              ; ビット列 Y の1語を結果の領域ヘコピー
        LD     GR5,0,GR1
        ST     GR5,0,GR3
        LAD    GR1,1,GR1
        LAD    GR3,1,GR3
        SUBA   GR4,=1
        RET

BITINS  START
        RPUSH
        LD     GR6,=16
        SUBA   GR6,GR2        ; GR6 ← シフト数
        LD     GR1,0,GR1      ; GR1 ← ビット列 B
        LD     GR4,GR1        ; GR4 ← ビット列 B
        LD     GR5,GR0        ; GR5 ← ビット列 A
        SRL    GR1,0,GR6
        SLL    GR1,0,GR6      ; GR1 ← ビット列 B の左 n ビット(b1)
        SLL    GR4,0,GR2
        SRL    GR4,0,GR2      ; GR4 ← ビット列 B の右(16-n)ビット(b2)
        SRL    GR0,0,GR2      ; GR0 ← ビット列 A の左(16-n) ビット(a1)
        SLL    GR5,0,GR6      ; GR5 ← ビット列 A の右 n ビット(a2)
        OR     GR1,GR0        ; C1 ← b1+a1
        OR     GR4,GR5        ; C2 ← a2+b2
        ST     GR1,0,GR3
        ST     GR4,1,GR3
        RPOP
        RET
        END

X:#5E96
m:42
Y:#1234 5678 EF18 CDEF
N:4
Z:#1234 5678 EF17 A598 CDEF

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0