【问题标题】:How can I turn an odd number even, or vice versa, in Motorola 68000 Assembly?如何在摩托罗拉 68000 组件中将奇数变为偶数,反之亦然?
【发布时间】:2018-05-03 06:00:02
【问题描述】:

基本上,如果我在 D1 中有一个数字,并且希望它始终是偶数,我将如何确保它永远不会是奇数?

我知道它与 AND 指令有关。但是当我尝试这样做时,它总是会减去 1。所以它会将奇数变为偶数,将偶数变为奇数。

if n is odd, sub 1我基本怎么办

【问题讨论】:

  • 所以它会将奇数变为偶数,将偶数变为奇数:AND不能设置位,只能清除它们或保持它们设置,所以它不能产生偶数数奇数。所以你对 AND 的尝试一定有一个错误,使它做别的事情。 (XOR 与 1 会翻转低位,在奇数和偶数之间翻转。ADD 1 也会如此,但这会带入高位。)无论如何,希望通过这些答案+easy68k 内置的调试器,您可以整理出您的实际情况做了。
  • "... AND 指令。但是当我尝试这样做时,它总是会减去 1。" - 这实际上是不可能的。如果你真的相信这一点,你应该尝试产生minimal reproducible example,但你应该自己弄清楚and不会总是减1(例如(12 and 254) = 12 ...仅(13 and 254) = 12 之类的情况可能看起来像是 1) 的减法。

标签: assembly bit-manipulation 68000 easy68k


【解决方案1】:

and 你的号码与-2

在 2 的补码表示中,-2 是一个除最低位 (11111...110) 之外的所有位都设置为 1 的数字,因此,用作掩码时,它总是只删除数字的低位。这迫使它是偶数(即使对于负数也能正常工作)。


至于标题中的“viceversa”:相反(=强制每个偶数到下一个奇数),只需 or1。这会将低位设置为 1,从而获得所需的效果。

【讨论】:

    【解决方案2】:

    奇数以二进制1 结尾,偶数以二进制0 结尾。你真正想要的是让最后一个二进制数字成为0,不管它是从什么开始的。 (奇数减 1,偶数不变。)

    执行此操作的方法是与1111...1110 进行“与”运算,其中所有二进制数字都是1,除了最后一个数字是0。您可以通过对0000...0001 进行按位否定来构造它,当然也就是1

    所以如果你的号码是n,你想计算n & (~1)

    【讨论】:

      【解决方案3】:

      68000 CPU 实际上有单独的位设置和位清除命令。在像您这样的情况下,显式清除操作数的第 0 位而不恢复为布尔逻辑可能更简单、更清晰:

      bclr.l #0,d0
      

      而不是

      and.l $fffffffe,d0
      

      【讨论】:

        【解决方案4】:

        你只需要清除底部位,所以虽然其他人使用长字指令,但使用AND的字节形式没有任何问题

        AND.B #0xFE, D1   ; make even
        OR.B  #0x01, D1   ; make odd
        XOR.B #0x01, D1   ; toggle even/odd
        

        无论 D1 中的值大小(字节、字或长字)如何,您仍然清除了底部位并保持寄存器中的所有其他位不变

        或者

        BCLR #0,D1  ; make even
        BSET #0,D1  ; make odd
        BCHG #0,D1  ; toggle even/odd 
        

        【讨论】:

          【解决方案5】:

          对于 16 位数字,请执行以下操作:

          EvenNumber = (D1 & 0xFFFE);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-02-03
            • 2015-02-16
            • 2012-10-07
            • 1970-01-01
            相关资源
            最近更新 更多