求助,编译汇编源码遇到的问题!

jieleiping 2013-05-15 10:37:21

;// Debugging flag and macros

OPTION CASEMAP:NONE

;// debug flags
IF DEBUG
DEBUG_FILE = 1
ELSE
DEBUG_FILE = 0
ENDIF
....

以上是部分源码,不知道为什么DEBUG这个无法识别,我有尝试在DEBUG前面强行的设置“DEBUG = 1”或者 “DEBUG = 0”, 可以正常编译,但是编译出来的东西不对。

错误如下:

1>Assembling...
1> Assembling: .\test.asm
1>.\dbg.inc(6) : error A2006: undefined symbol : DEBUG
1>.\dbg.inc(79) : error A2006: undefined symbol : DEBUG
1>.\test.asm(75) : error A2006: undefined symbol : DEBUG
1> DBGSTART(1): Macro Called From
1> .\test.asm(75): Main Line Code
1>.\test.asm(93) : error A2006: undefined symbol : DEBUG
...全文
149 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jieleiping 2013-05-16
  • 打赏
  • 举报
回复
引用 8 楼 zara 的回复:
就是改成 .model flat,c 不过,你上面说“编译为C代码(/TC)”可以正确调用,那就这么用呗。
非常感谢前辈的耐心指点,已经解决了,给分,再次感谢!
zara 2013-05-15
  • 打赏
  • 举报
回复
定义标记,不是用 DEBUG=0/1 的吧,只要有定义或设置了它的,IFDEF DEBUG 即为 TRUE 。 除了在程序里进行定义外,也可以在命令行上进行,如 ml /c /coff /D DEBUG yourasm.asm
zara 2013-05-15
  • 打赏
  • 举报
回复
就是改成 .model flat,c

不过,你上面说“编译为C代码(/TC)”可以正确调用,那就这么用呗。
jieleiping 2013-05-15
  • 打赏
  • 举报
回复
引用 6 楼 zara 的回复:
汇编文件开头有个 [b].model flat,stdcall[b/] 语句吧,里面的 stdcall 就是相应的语言设定了,决定了如何对函数名之类的转换方式。cecal ?cdecl ?wince 里的函数名是什么样的完整形式?最干净赤溜的应该是被 extern "c" 修饰出来的什么也没加的那类,这样可以在汇编里试试将 stdcall 改为 c 重新编译。
前辈,请问如何“在汇编里试试将 stdcall 改为 c 重新编译”???
zara 2013-05-15
  • 打赏
  • 举报
回复
汇编文件开头有个 [b].model flat,stdcall[b/] 语句吧,里面的 stdcall 就是相应的语言设定了,决定了如何对函数名之类的转换方式。cecal ?cdecl ?wince 里的函数名是什么样的完整形式?最干净赤溜的应该是被 extern "c" 修饰出来的什么也没加的那类,这样可以在汇编里试试将 stdcall 改为 c 重新编译。
jieleiping 2013-05-15
  • 打赏
  • 举报
回复
出错的时候是按下面这种方式设定的:


如果设定成“编译为 C 代码(/TC)”,而不是“编译为 C++ 代码(/TP)”,则不会出现,可以正确的调用,跪求解决方案,谢谢
jieleiping 2013-05-15
  • 打赏
  • 举报
回复
引用 3 楼 zara 的回复:
上面 lst 示例版面乱了,重贴下
				;// Debugging flag and macros

				OPTION CASEMAP:NONE

 = 0001				DEBUG = 1

				;// debug flags
				IF DEBUG
 = 0001				    DEBUG_FILE = 1
				ELSE
				ENDIF


 = 0000				DEBUG = 0

				;// debug flags
				IF DEBUG
				ELSE
 = 0000				    DEBUG_FILE = 0
				ENDIF
感谢前辈的解答,我按照您2楼的方案,已经解决了编译的问题。 但是又遇到一个问题,就是将这个汇编代码编成LIB后提供给wince调用,出现了调用约定的问题。 汇编里是_stdcall,而wince是cecal,不知道改如何修改呢?
zara 2013-05-15
  • 打赏
  • 举报
回复
上面 lst 示例版面乱了,重贴下
				;// Debugging flag and macros

				OPTION CASEMAP:NONE

 = 0001				DEBUG = 1

				;// debug flags
				IF DEBUG
 = 0001				    DEBUG_FILE = 1
				ELSE
				ENDIF


 = 0000				DEBUG = 0

				;// debug flags
				IF DEBUG
				ELSE
 = 0000				    DEBUG_FILE = 0
				ENDIF
zara 2013-05-15
  • 打赏
  • 举报
回复
抱歉,上面看错了。下面是根据你说的的示例生成的 lst 文件,不存在你说的问题啊[code=asm] ;// Debugging flag and macros

OPTION CASEMAP:NONE

= 0001 DEBUG = 1

;// debug flags
IF DEBUG
= 0001 DEBUG_FILE = 1
ELSE
ENDIF


= 0000 DEBUG = 0

;// debug flags
IF DEBUG
ELSE
= 0000 DEBUG_FILE = 0
ENDIF[code]

21,453

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧