Assembly pep9汇编语言中的Fibonacci
我试图在带有索引寻址的数组中显示Fibonacci(降序)的前24个数字,但是,我得到了错误的输出 我试图将fib[I-1]存储到m,将fib[I-2]存储到n,并将它们相加,这就是我认为我出错的地方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
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