这对许多人来说可能很常见。我只需要帮助使用Visual Studio以汇编语言声明和打印字符串。我只是尝试一些汇编代码,而我却可以处理许多基于数学的东西。无法处理与字符串相关的功能。
我正在尝试运行一些我在同一在线上找到的代码。使其显示一些错误。我正在使用Visual Studio visualc ++ 2013
main proc
MOV AX, @DATA ; initialize DS
MOV DS, AX
LEA DX, STRING_1 ; load & display the STRING_1
MOV AH, 9
INT 21H
错误1错误A2004:符号类型冲突.asm 11 1项目
答案 0 :(得分:1)
我正在使用Visual Studio Visual C ++ 2013
...这可能意味着您正在创建32位或64位Windows程序。
但是,您发布的代码显然是16位代码。通常,您不能混合使用16位,32位和64位代码。
用户“ prl”和“ rkhb”留下了两条评论:
在Windows中,您无法使用DOS或BIOS软件中断...
...
确切地说:Windows的某些版本
在16位Windows程序中,您同时使用了.DLL文件中的功能组合以及BIOS和MS-DOS中断。 AH=3Eh
的函数INT 21h
用于关闭文件句柄。
但是,在32位和64位Windows程序中,绝对不允许使用INT
指令。相反,.DLL文件包含所有必需的功能(例如CloseHandle
,在32位和64位程序中替换了AH=3Eh, INT 21h
)。
而且16位Windows程序从未访问过控制台,因此AH=9
的功能INT 21h
在16位Windows程序中不起作用,而仅在MS-DOS程序中起作用。 / p>
我只是尝试一些汇编代码,而我可以处理许多基于数学的东西。
那你想做什么?
出于性能原因,在32位或64位程序中使用汇编代码吗?
在这种情况下,您应该了解16位,32位和64位x86汇编程序之间的区别,并以32位或64位汇编程序编写程序。您不能“直接”调用操作系统函数(例如,字符串输出),但必须从.DLL文件中调用函数(只需使用CALL
指令即可完成)。
学习16位x86汇编程序吗?
在这种情况下,您将需要一个16位编译器和一个16位汇编器来创建MS-DOS程序(因此Visual Studio 2013将无处可寻)。而且,如果您的计算机运行Windows 7或更高版本,则将需要一些MS-DOS模拟器或运行某些DOS操作系统的虚拟机,因为最新的Windows版本不支持运行DOS程序。