来自 NASM 的 %line 指令等效于 MASM

Posted

技术标签:

【中文标题】来自 NASM 的 %line 指令等效于 MASM【英文标题】:%line directive from NASM equivalent for MASM 【发布时间】:2021-07-26 17:40:24 【问题描述】:

基本上,我正在编写一种简单的类 C 语言,可以直接输出 NASM 语法汇编程序。我可以在 VS 中调试它,但这有点痛苦。使用 MASM 可以更流畅地进行调试,但是 NASM 有一个 %line 指令,我可以在调试时将我的原始源代码链接到程序集(注意我实际上还没有让它工作)。

无论如何我都找不到在 Win 10 上调试 NASM 程序集或 MASM 中的 %line 指令的等效项(我可以在 VS 中调试)

非常感谢任何帮助。

【问题讨论】:

您应该能够将-gcv8 与 nasm 一起使用来生成符号。 Masm 从未设计为编译器的后端(VC++ 一直使用内部汇编器),因此它没有行号传递。 @TimRoberts 感谢您提供的信息。我已经尝试过了,但我看不出输出有什么不同。 NASM 应该生成一个带有符号的单独文件还是嵌入它们? 我相信它会生成一个.pdb 文件。调试符号格式用-F(大写F)给出;您可以使用nasm -h 获取支持的格式列表。 @TimRoberts 非常感谢您的帮助!你非常亲近,帮助我走上了正确的道路! 【参考方案1】:

对于遇到此问题的其他人。

NASM 需要类似于下面的内容才能在 Windows 上获得调试输出。

nasm -g -F cv8 mymain.asm -f win64 -o mymain.obj

要使用符号并实际获取 pdb 文件,您需要告诉 LINK 将其提供给您。 /pdb:filename 和 /debug 都是必需的。

链接 /subsystem:console /pdb:mymain.pdb /debug /entry:mymain mymain.obj

【讨论】:

以上是关于来自 NASM 的 %line 指令等效于 MASM的主要内容,如果未能解决你的问题,请参考以下文章

NASM编译时有时出现 label or instruction expected at start of line

等效于 Power PC 中的 SSE

为啥 nasm 在寄存器之间组装 MOV 指令时使用 0x89?

在 React 中等效于来自 React Native 的 FlatList

使用 NASM 在 64 位模式下不支持 pop 指令?

使用 div 指令的 x86 NASM 程序集中的浮点异常 [重复]