0

うまくいけば、これは簡単な質問ですが、バイナリでビットシフトを行う方法を理解することはできません。これは LC3 環境で行われています。2 で算術除算して右にシフトする方法を知る必要があるだけです。バイナリ値をそれ自体に追加するだけで左に行くのは簡単ですが、右にビットシフトする場合は反対のことを試しました(それ自体から減算、NOTしてから減算など)。

または、x00A0 を x000A に移動するより良い方法があれば、それも素晴らしいでしょう。ありがとう!

4

5 に答える 5

0
; right shift R0 1-bit with sign-extention
; Algorithm:    look-uo table and auto-stop
.ORIG   x3000
        AND     R1, R1, #0  ; r1 = 0
        LEA     R2, TABLE   ; r2 = table[]
        AND     R0, R0, #-2
LOOP    BRzp    MSB0
        LDR     R3, R2, #0  ; r3 = table[r2]
        ADD     R1, R1, R3  ; r1 += r3
MSB0    ADD     R2, R2, #1  ; r2++
        ADD     R0, R0, R0  ; r0 << 1
        BRnp    LOOP
        ADD     R0, R1, #0  ; r0 = r1
        HALT
TABLE
        .FILL   xC000
        .FILL   x2000
        .FILL   x1000
        .FILL   x0800
        .FILL   x0400
        .FILL   x0200
        .FILL   x0100
        .FILL   x0080
        .FILL   x0040
        .FILL   x0020
        .FILL   x0010
        .FILL   x0008
        .FILL   x0004
        .FILL   x0002
        .FILL   x0001
.END
于 2019-11-29T20:31:18.580 に答える