Assembly pep9汇编语言中的Fibonacci

Assembly pep9汇编语言中的Fibonacci,assembly,fibonacci,pep8-assembly,pep9-assembly,Assembly,Fibonacci,Pep8 Assembly,Pep9 Assembly,我试图在带有索引寻址的数组中显示Fibonacci(降序)的前24个数字,但是,我得到了错误的输出 我试图将fib[I-1]存储到m,将fib[I-2]存储到n,并将它们相加,这就是我认为我出错的地方 BR main list2: .BLOCK 24 ; fibonacci(24) i: .BLOCK 2 ; iterator m: .BLOCK 1 ; fib [i-1] n: .BLOC

我试图在带有索引寻址的数组中显示Fibonacci(降序)的前24个数字,但是,我得到了错误的输出

我试图将fib[I-1]存储到m,将fib[I-2]存储到n,并将它们相加,这就是我认为我出错的地方

BR main

list2:   .BLOCK  24          ; fibonacci(24)
i:       .BLOCK  2           ; iterator
m:       .BLOCK  1           ; fib [i-1]
n:       .BLOCK  1           ; fib [i-2]


; Fibonacci
; fib (n) = 0 if n = 0
; 1 if n = 1
; fib(n-1) + fib(n-2) if n < 1

fib:     LDWA    0,i         ; fib[0] = 0;
         LDWX    0,i         ; fib[1] = 1;
         STWA    list2,x     ; list2[x]   
         ADDX    2,i         
         LDWA    1,i         
         STWA    list2,x   
         ADDX    2,i  

         LDWX    2, i        ; for (i = 2)
         STWX    i, d       

for1:    CPWX    24, i       ; i < 24
         BRGE    endFor1
 
         LDWX    i, d        ; fib[i] = fib[i-1] + fib[i-2]
         SUBX    1, i 
         STWX    m, d
         
         LDWX    i, d
         SUBX    2, i
         STWX    n, d

         LDWX   m, d
         ADDX   n, d
         STWA   list2, x
                     

         LDWX    i, d  ; i++;
         ADDX    1, i  
         STWX    i, d
         BR      for1

endFor1: LDWX    23, i    ;for (i = 23
         STWX     i, d 

for2:    CPWX    0, i    ; i >= 0
         BRLT    endFor2
         DECO    i, d
         LDBA    ' ', i
         STBA    charOut, d
         ASLX
         DECO    list2, x
         LDBA    '\n', i
         STBA    charOut, d
         LDWX    i, d 
         SUBX    1, i 
         STWX    i, d
         BR for2
         
endFor2: RET
BR main
列表2:.块24;斐波那契(24)
一、第二区;迭代器
m:第1区;fib[i-1]
n.第1区;fib[i-2]
; 斐波那契
; 如果n=0,则fib(n)=0
; 如果n=1,则为1
; 如果n<1,则fib(n-1)+fib(n-2)
fib:ldwa0,i;fib[0]=0;
ldwx0,i;fib[1]=1;
STWA列表2,x;清单2[x]
地址2,i
LDWA 1,i
STWA列表2,x
地址2,i
ldwx2,i;对于(i=2)
STWX i,d
对于1:cpwx24,i;i<24
BRGE endFor1
ldwxi,d;fib[i]=fib[i-1]+fib[i-2]
subx1,i
STWX m,d
LDWX i,d
subx2,i
STWX n,d
LDWX m,d
地址n,d
STWA列表2,x
ldwxi,d;i++;
地址1,i
STWX i,d
BR for 1
完1:ldwx23,i;对于(i=23
STWX i,d
对于2:CPWX 0,i;i>=0
BRLT endFor2
德科一世
LDBA',i
STBA查罗特,d
ASLX
装饰清单2,x
LDBA'\n',i
STBA查罗特,d
LDWX i,d
subx1,i
STWX i,d
BR for 2
完二:RET
我试图翻译并用作参考的代码是

#include <stdio.h>

int main() {
        int fib[24];
        int i;

        fib[0] = 0;
        fib[1] = 1;

        for(i = 2; i < 24; i++)
                fib[i] = fib[i-1] + fib[i-2];

        for (i = 0; i < 24; i++)
                printf("%3d   %6d\n", i, fib[i]);
}
#包括
int main(){
int-fib[24];
int i;
fib[0]=0;
fib[1]=1;
对于(i=2;i<24;i++)
fib[i]=fib[i-1]+fib[i-2];
对于(i=0;i<24;i++)
printf(“%3d%6d\n”,i,fib[i]);
}


for2
缺少
i=0;
,还有一些其他错误

; These are too short: STW to m will wipe out n
; Use .BLOCK 2
    m:       .BLOCK  1           ; fib [i-1]
    n:       .BLOCK  1           ; fib [i-2]

    LDWX    i, d        ; fib[i] = fib[i-1] + fib[i-2]
    SUBX    1, i 
; so far computed  i - 1 into X
; you're missing a load here LDWX list2,x to do the array reference fib[i-1]
; now storing X which is i-1 into m, whereas you want fib[X]
    STWX    m, d
    LDWX   m, d
    ADDX   n, d
; so far have m+n in X
; and storing A, but nothing interesting is in A, X has m+n
; further x doesn't have i anymore so this store is going to m+n wherever that is 
     STWA   list2, x