好的,我找到了答案。实际上存在两种解决方案。但首先,错误的原因是对 VS 2005 及更高版本进行了更改,更改了程序集的组合方式,这导致了处理 VS 基础的技术信息。“如何”在这里更为重要。首先我把示例代码放上来,不管用什么方法,基本上都是一样的代码。
编码:
;sh3.asm - test using c run-time library functions
.586
.model flat
EXTRN _printf:PROC
.data
msgHello DB '来自 C 库的你好!', 0ah, 00h
.code
_main 进程
push OFFSET msgHello
call _printf
add esp, 4
ret 0
_main ENDP
END
好的,方法一:
从一个空项目开始;添加扩展名为 .asm 的源文件并输入代码。确保使用 _main 命名代码的入口点。方法二处理使用不同的名称。
接下来,通过在解决方案资源管理器中右键单击项目名称并选择自定义构建规则来设置使用 MASM 的项目;选中 Microsoft 宏汇编程序框。
接下来,转到项目 -> 属性 -> 链接器 -> 附加依赖项并输入 C 运行时库名称。例如,用于发布代码的 msvcrt.lib,或用于调试阶段的 msvcrtd.lib。重要提示:不要为入口点或子系统输入任何条目。
组装您的代码并运行它。
方法二:
从一个空项目开始;添加扩展名为 .asm 的源文件并输入代码。使用您选择的标签命名代码的入口点。例如,开始。
接下来,通过在解决方案资源管理器中右键单击项目名称并选择自定义构建规则来设置使用 MASM 的项目;选中 Microsoft 宏汇编程序框。
接下来,转到项目 -> 属性 -> 链接器 -> 附加依赖项并输入 C 运行时库名称。例如,用于发布代码的 msvcrt.lib,或用于调试阶段的 msvcrtd.lib。
接下来,在链接器页面中,选择系统并更改为控制台,然后转到高级并在入口点框中键入您的条目标签,例如开始。
接下来,在链接器页面中,选择清单文件 -> 附加清单依赖项并输入:type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken=' 1fc8b3b9a1e18e3b' 全部为一行。
组装并运行您的代码。
您可能想知道人们在哪里可以找到其他依赖项的资料,因为这些信息很可能是 VS 和 Windows 版本相关的。使用方法 1 创建一个简单的项目,然后找到它的清单文件并在文本编辑器中读取它。您将看到包含信息的依赖行。
就个人而言,我发现方法 1 是完成这项工作的最简单方法。被迫将我的入口点命名为 _main 是为了灵活地使用 C 运行时库代码而付出的很小的代价。它还具有不必设置子系统的优点。现在,作为特别说明 - 如果您不使用 C 运行时库,则使用方法 2 并省略添加其他清单依赖项的步骤;不需要!
顺便说一句,我还使用对 Win32 API 和 C 运行时库的调用测试了方法 1,并且代码运行良好。换句话说,您可以在同一代码中同时使用 windows api 调用和 c 运行时库调用。
我希望这些信息有助于您使用 Visual Studio 在 Windows 中编写汇编代码。祝好运并玩得开心点!
~江市