【问题标题】:Lost with fibonacci series on TASM Assembly在 TASM 大会上迷失了斐波那契系列
【发布时间】:2015-09-30 23:46:35
【问题描述】:

当我们知道前 2 个元素时,我从大学得到了一项任务来计算 10 个元素的斐波那契数列。 在过去的几个小时里,我一直在尝试这样做,但我在途中迷路了。

这是我的代码:

IDEAL
MODEL small
STACK 100h
DATASEG

Fiburnachi db 0, 1, ?, ?, ?, ?, ?, ?, ?, ?
TenTimes db 8


CODESEG

start:
    mov ax, @data
    mov ds, ax
    xor ax, ax
    xor bx, bx
    xor cx, cx


    mov cl, [TenTimes]
    lea bx, [Fiburnachi]
    FibLoop:
        mov al, [bx]       //This is my first attempt.
        add al, [bx+1]     //i have tried using only the "ax" register,
        inc [bx]           //i can't seem the find the correct way to
        mov [bx], al       //store the value I have in al (last result)

        mov al, [bx]       //This Doesn't work I dunno why really.
        mov dl, [bx+1]
        add al, dl
        mov [bx+1], al
        inc [bx]

    FibLoop

我认为我对通过数组索引正确循环和分配的理解是错误的。

这样做的正确方法是什么?我是否必须为计算本身使用 2 个寄存器?

【问题讨论】:

    标签: loops assembly x86-16 tasm


    【解决方案1】:

    两次尝试都很接近,都缺少loop 命令。

    第一个会这样工作:

    mov al, [bx]
    add al, [bx+1]
    inc [bx]           
    mov [bx+1], al // need to write to the next position
    

    第二个:

    mov al, [bx]
    mov dl, [bx+1]
    add al, dl
    inc [bx] // need to increment before writing
    mov [bx+1], al
    

    并以loop FibLoop 结束。

    附:您的问题并不完全清楚,但这是两次单独的尝试,对吗?他们不会在同一个应用程序中一起工作:-)

    【讨论】:

      【解决方案2】:

      我不知道 TASM,但我怀疑 inc [bx] 会增加内存中的一个字节(或单词?)而不是增加 bx,在这种情况下语法是 inc bx。

      替代示例

              lea     bx,[Fiburnachi+2]
      fib0:   mov     al,[bx-2]
              add     al,[bx-1]
              mov     [bx],al
              inc     bx              ;increment bx, not memory?
              loop    fib0
      

      【讨论】:

        猜你喜欢
        • 2018-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-05
        • 1970-01-01
        • 2014-01-08
        相关资源
        最近更新 更多