私はいくつかのアセンブリコードを見ていて、次のコードに出くわしました(読みやすくするために変換しました)。レジスタはすべて 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 倍されます)。
2 つの 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