Re: [問題] 組譯錯誤訊息看不太懂
※ 引述《Nessa1103 (紫藤茁壯中)》之銘言:
: 以下是我的程式,使用MASM和Visual C++撰寫。組譯錯誤訊息說我沒有定義Fbnc
: 這個符號(error A2006: undefined symbol : Fbnc),可是我明明在下面定義了
: 啊?請問我該怎麼修改比較好?
: TITLE Fibonacci (Fbnc.asm)
: INCLUDE Irvine32.inc
: .data
: tip BYTE "How much Fibonacci do you want?",0
: tmp DWORD ?
: .code
: main PROC
: call Clrscr
: mov edx,OFFSET tip
: call WriteString
: call ReadDec
: mov tmp, eax ; tmp = eax
: INVOKE Fbnc, tmp
: main ENDP
: Fbnc PROC USES eax ,N:DWORD ; p.301
: LOCAL fbnc2:DWORD
: push ebp
: .IF N > 2
: INVOKE Fbnc, N-1
^^^^
這樣處理的話會變成 是位址會位移一個byte
例如原本值是03h 會變成 300h
: mov fbnc2, eax
: INVOKE Fbnc, N-2
^^^^
這邊會變成30000h
在遞迴回去就爆了
: add eax, fbnc2 ; Fbnc(N) = Fbnc(N-1) + Fbnc(N-2)
: call WriteDec
: .ELSE
: mov fbnc2, 1
: mov eax, fbnc2
: call WriteDec
: .ENDIF
: pop ebp
: ret 4
: Fbnc ENDP
: exit
: END main
再加上你使用了Uses EAX 會使得每次修改的EAX會再改回去
而且PUSH EBP 與POP EBP 似乎沒啥效果 @@?
所以我幫你改了副程式
Fbnc PROC stdcall ,N:DWORD ; p.301
LOCAL fbnc2:DWORD
.IF N > 2
mov eax,N
sub eax,01h
INVOKE Fbnc, eax
mov fbnc2, eax
mov eax,N
sub eax,02h
INVOKE Fbnc, eax
add eax, fbnc2 ; Fbnc(N) = Fbnc(N-1) + Fbnc(N-2)
call WriteDec
.ELSE
mov fbnc2, 01
mov eax, fbnc2
call WriteDec
.ENDIF
ret
Fbnc ENDP
因為你在計算過程中 會一值呼叫WriteDec
所以顯示的並非簡潔的Fibonacci 數列 這部份你自己修改即可
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.137.7.190
推
11/30 22:44, , 1F
11/30 22:44, 1F
→
11/30 22:46, , 2F
11/30 22:46, 2F
→
11/30 23:06, , 3F
11/30 23:06, 3F
討論串 (同標題文章)
ASM 近期熱門文章
PTT數位生活區 即時熱門文章