【问题标题】:Assembly loop doesn't work装配循环不起作用
【发布时间】:2016-11-13 17:17:44
【问题描述】:

我试图做一个循环来计算斐波那契数的前 10 个数。 我在代码的和处使用了“循环”,但它不起作用。

    xor cx, cx
    mov cx, 8
    mov bx, offset Array
    mov [byte ptr bx], 0
    mov [byte ptr bx+1], 1
    mov bx, 1

Fibo:
    inc bx
    mov al, [byte ptr bx-1]
    mov [byte ptr bx], al
    mov al, [byte ptr bx-2]
    add [byte ptr bx], al
    loop Fibo

【问题讨论】:

  • 你应该避免loop。它很慢,并且隐式使用[r/e]cx,这意味着在 32 位或 64 位模式下,您发布的代码可能会比您预期的循环更多。

标签: loops assembly fibonacci


【解决方案1】:

循环没问题,但是你不小心破坏了你的bx。尝试使用调试器对其进行调试。

(投反对票,因为如果您调试它,它显而易见,即使在没有硬件的纸上也是如此)。

【讨论】:

    【解决方案2】:

    我认为所有指针类型都应该使用“byte ptr [bx]”而不是“[byte ptr bx]”。

    另外,这条线可能会导致错误。

    mov bx, 1
    

    它重置了bx,所以它不再指向Array的地址。请改用“inc bx”。

    【讨论】:

    • 但是当我使用而不是“循环”时,那个:dec cx- cmp cx, 0- jne Fibo - 它可以工作。
    • 有很多方法仍然可以工作。其中之一是 Array 在内存中的相对地址为 0。但是您想要一个始终有效的程序。不是一个有时会起作用的。 :)
    【解决方案3】:

    循环是正确的。 我对如何调试循环感到困惑。 对不起。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-23
      • 2012-03-30
      • 2011-10-19
      • 2016-03-04
      • 2012-07-02
      • 2017-04-13
      • 2013-12-31
      • 1970-01-01
      相关资源
      最近更新 更多