这里使用32位的汇编环境
.386
.model flat,stdcall
option casemap:none
includelib msvcrt.lib
printf PROTO C :dword, :VARARG
scanf PROTO C :dword, :VARARG
.data ;数据段
num dword ?
input byte '%d',0
szOut byte 'FIB(%d)=%d',0ah,0
.code ;代码段开始
fib proc C n:dword
cmp n, 2 ;当n=1或 2时跳转
jbe exitrecurse;小于等于跳转(b:below,e:equal)
mov ebx, n ;EBX=n
dec ebx ;EBX=n-1
invoke fib, ebx ;fib(n-1)
mov ebx, n
sub ebx,2
invoke fib,ebx;fib(n-2)
add eax,1
ret
exitrecurse:
ret
fib endp
start:
mov eax,1
invoke scanf,offset input,offset num;需要传送地址指针
invoke fib, num
invoke printf, offset szOut, num, eax
ret
end start; 代码段结束