作者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