Re: [問題] 組譯錯誤訊息看不太懂

看板ASM (組合語言)作者 (= =)時間16年前 (2008/11/30 21:51), 編輯推噓1(102)
留言3則, 2人參與, 最新討論串2/3 (看更多)
※ 引述《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
謝謝m(_ _)m (膜拜狀)
11/30 22:44, 1F

11/30 22:46, , 2F
不過那個stdcall是什麼?
11/30 22:46, 2F

11/30 23:06, , 3F
忽略它沒關係 XDD 我用的是MASM6.11版 所以要加stdcall
11/30 23:06, 3F
文章代碼(AID): #19CffIab (ASM)
討論串 (同標題文章)
文章代碼(AID): #19CffIab (ASM)