うまくいけば、これは簡単な質問ですが、バイナリでビットシフトを行う方法を理解することはできません。これは LC3 環境で行われています。2 で算術除算して右にシフトする方法を知る必要があるだけです。バイナリ値をそれ自体に追加するだけで左に行くのは簡単ですが、右にビットシフトする場合は反対のことを試しました(それ自体から減算、NOTしてから減算など)。
または、x00A0 を x000A に移動するより良い方法があれば、それも素晴らしいでしょう。ありがとう!
; 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