这是我需要的格式:
F(3) = F(2) + F(1) =
F(2) = (F1) + F(0) =
F(1) = 1
F(0) = 1
F(2) = 1
F(1) = 1
F(3) = 2
这是我的代码,我该怎么做才能获得所需的格式? 请给我一个提示或可能有帮助的东西,谢谢。我刚刚开始学习汇编语言。 我只知道如何显示第一行,例如f()=答案,但不知道如何显示过程。
.data
fib1 BYTE "f(",0
fib2 BYTE ") + f(",0
fib3 BYTE ") = ",0
intVal DWORD ?
main PROC
mov edx, OFFSET fib1 ;show f(intVal)=
call WriteString
mov edx, intVal
call WriteDec
mov edx, OFFSET fib3
call WriteString
mov ecx, intVal-1
push intVal
call fib
add esp, 4
call WriteDec ;show result
call crlf
mov edx, OFFSET msg5 ;show goodbye msg
call WriteString
mov edx, OFFSET username
call WriteString
exit
main ENDP
fib PROC c
add ecx, 1
push ebp
mov ebp, esp
sub esp,4
mov eax, [ebp+8] ;get value
cmp eax,2 ;if ((n=1)or(n=2))
je S4
cmp eax,1
je S4
dec eax ;do fib(n-1)+fib(n-2)
push eax ;fib(n-1)
call fib
mov [ebp-4], eax ;store first result
dec dword ptr [esp] ;(n-1) -> (n-2)
call fib
add esp,4 ;clear
add eax,[ebp-4] ;add result and stored first result
jmp Quit
S4:
mov eax,1 ;start from 1,1
Quit:
mov esp,ebp ;restore esp
pop ebp ;restore ebp
ret
fib ENDP
END main
答案 0 :(得分:0)
代码需要在每行输出的末尾输出一个“换行符”,根据系统的不同,它可以是回车符(00dh),后跟换行符(00ah)或换行符(00ah)不知道irvine的设置。
缩进的行应从fib函数中打印,这意味着您必须保存(推入/弹出堆栈)打印函数使用的所有寄存器。
fib函数需要根据文本的递归级别打印出可变数量的空格,基于文本,每个递归级别需要2个空格。
fib函数需要处理输入0并返回0。
请注意,假设fib检查fib(0),fib(1),fib(2),则递归调用fib函数的次数将为2 * fib(n)-1(如果不是,则更多)检查fib(2)),这将是59.4亿次调用fib(47)= 2971215073,这是32位无符号整数的最大值。您可能希望将输入限制为fib(10)= 55或fib(11)= 89或fib(12)= 144。