我正在查看一些汇编代码并遇到以下内容(为了便于阅读,我已对其进行了转换)。所有寄存器均为 8 位,指针为 16 位。所以(q)
加载8位。
(q+1) = (q+1) = rr(q+1)
在哪里(q)
取消引用q
并rr(q)
向右旋转
(q) = (q) + (q)/2 + bit((q+1), 0)
在哪里bit((q+1), 0)
获得第 0 位(q+1)
这真的让我很困惑,因为上面的代码所做的是将一个 16 位的值乘以 1.5,而不管它的字节序(即,无论您将 q 解释为小字节序还是大字节序,它的值在其各自的字节序中乘以 1.5)。
我对他们如何使用两个 8 位值将 16 位值乘以 1.5 感到困惑。这里发生了什么?具体来说,添加的第0位和向右(q+1) to (q)
旋转的目的是什么?(q+1)
这是汇编代码:
ld a, (q)
ld b, a
ld a, (q+1)
ld c, a
srl b
rr c
add c
ld (q+1), a
ld a, (q)
adc b
ld (q), a
ret