使用汇编语言打印字符串变量

时间:2019-03-31 20:57:25

标签: windows visual-studio assembly

这对许多人来说可能很常见。我只需要帮助使用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项目

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程序。