作者TKyo (暗黑貴公子)
看板ASM
標題Re: [問題] 組譯錯誤訊息看不太懂
時間Mon Dec 1 08:41:53 2008
※ 引述《Nessa1103 (紫藤茁壯中)》之銘言:
: 以下是我的程式,使用MASM和Visual C++撰寫。組譯錯誤訊息說我沒有定義Fbnc
: 這個符號(error A2006: undefined symbol : Fbnc),可是我明明在下面定義了
: 啊?請問我該怎麼修改比較好?
Fbnc 在呼叫方的下面定義, 所以才會被組譯器視為未定義
同樣原理和處理方式, 高階語言的編譯器亦同
解決方式
1.將 Fbnc 移至呼叫方上方定義
2.在不隸屬任一區段處(.code/.data/.data?/.const)
定義 Fbnc PROTO :DWORD 一行宣告
這樣組譯就會過了
另外, 不太需要自行處理 ebp ...
procedure 只要有任何參數
ml 組譯時會自動安插其對應 code (push ebp ... leave)
procedure 使用到 USES
ml 組譯時會自動安插其對應 code (pop xxx ... leave ret)
1F:推 Nessa1103:謝謝m(_ _)m (膜拜狀) 11/30 22:44
2F:→ Nessa1103:不過那個stdcall是什麼? 11/30 22:46
3F:→ R119:忽略它沒關係 XDD 我用的是MASM6.11版 所以要加stdcall 11/30 23:06
stdcall 跟 MASM 版本無關, 有無關係要看其版本是否有支援
stdcall 是 PROC/.MODEL 的宣告方式之一, 其名為 langtype
除了 stdcall 外, 尚有 C, SYSCALL, BASIC, FORTRAN, PASCAL 這幾種 langtype
C - Leading Underscore, Arguments Right to Left, Caller Stack Cleanup
:VARARG Allowed
SYSCALL - Arguments Right to Left, :VARARG Allowed
STDCALL - Leading Underscore, Arguments Right to Left
Caller Stack Cleanup (註解一), :VARARG Allowed
BASIC - Capitalize All, Arguments Left to Right, BP Saved
FORTRAN - Capitalize All, Arguments Left to Right, BP Saved
PASCAL - Capitalize All, Arguments Left to Right, BP Saved
註解一 : 使用 :VARARG, Caller Stack Cleanup
未使用 :VARARG, Called Rotine Must Stack Cleanup
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.133.168.73
4F:推 zha0:推+1 12/11 22:43