-1

我正在尝试编写一条 68000 指令来将 D0 中的 32 位无符号值乘以 0.125。然而分数乘法不可用。所以我想知道是否有任何方法可以绕过它?它应该是无符号的并且 0.125 = 1/8。因此,我认为它的工作方式是:

LSL (LSR #0,#3),D0

这甚至没有运行,我不知道我还能怎么做。

4

2 回答 2

1

这是汇编,你不能仅仅组合这样的指令的表达式。每条指令都需要在自己的行上。如果你想实现(x >> 3) << 3,你必须先右移,然后左移,这是两个单独的指令:

LSR.L #3,D0
LSL.L #3,D0

顺便说一句,请注意,这(x >> N) << N相当于,在is:x & -(1 << N)的情况下,或在 68k 汇编中(或在 hex 中)。N=3x & -8AND.L #-8,D0AND.L #$fffffff7,D0

但是,如果您只想乘以 0.125(即除以 8),则右移一次就足够了:

LSR.L #3,D0
于 2020-10-22T02:06:28.500 回答
1

不确定您要达到的目的:

LSL (LSR #0,#3),D0

如果您想将值逻辑右移d0三位(即除以8或乘以0.125),那将更简单:

lsr #$03, d0 ;; or lsr.l
于 2020-10-22T02:06:47.480 回答