【发布时间】:2022-01-13 18:37:23
【问题描述】:
我正在开发一个程序来计算斐波那契数列的前七个值。我得到了一些 C 来作为基础,但我不确定我所拥有的一切是否正确。这只是我第二次在 MASM 中使用堆栈执行程序,我不确定我所做的是否正确。 这是我在 C 中得到的:
//Fibonacci Series using Recursion
#include<stdio.h>
int fib(int n)
{
if (n <= 1)
return n;
return fib(n-1) + fib(n-2);
}
int main ()
{
int n = 9;
int result = fib(n);
return 0;
}
这就是我在 MASM 中所拥有的。我有正确的堆栈调用吗?
INCLUDE Irvine32.inc
ExitProcess proto,dwExitCode:dword
.data
nValue DWORD 9
val DWORD 0
.code
fib PROC
push ebp
mov ebp, esp
sub esp, 12
mov EAX, [EBP+12]
mov [EBP-8], ECX
cmp ECX, 1 ;compare if greater than 1
JG L1
L1: mov esp, ebp
pop ebp
ret
JG L2
L2: sub ecx, 1
sub ecx, 2
mov val, ecx
push val
call fib
fib ENDP
main PROC
mov ecx, nValue
push nValue
call fib
main ENDP
END main
【问题讨论】:
-
您在
fib和main的末尾都缺少ret语句,并且您在fib中的结语放错了位置。 -
另外,
JG L1; L1:和JG L2; L2:都没有做任何有用的事情。