MASM32,显示字符串和整数

时间:2010-12-31 20:50:54

标签: assembly console x86 dos masm32

我正在使用MASM32(版本10),我想知道在屏幕上输出字符串和整数的最简单方法是什么。请提供完整的源代码,而不仅仅是具体的代码。

谢谢。

编辑:

.386
.model flat, stdcall
.stack
.data
stest db "This is a test", 0
.code
main proc
    mov ah, 09h
    lea dx, stest
    int 21h
main endp
end main

它崩溃而没有输出任何东西。我尝试了几个其他的东西,有不同的问题,唯一常见的是我没有在屏幕上显示字符串:)

3 个答案:

答案 0 :(得分:3)

您似乎正在使用DOS中断(int 21h),但也使用了.model flat,这表示您没有构建DOS程序(DOS不支持平面模型)。

如果您打算构建适合在Windows上运行的32位控制台模式程序,则不能使用DOS中断。这篇文章介绍了使用Win32调用的32位“hello world”Windows示例:32-Bit Flat Memory Model MASM Code for Windows NT

如果您打算构建16位DOS代码,您可能希望从“小”内存模型开始。

答案 1 :(得分:1)

请注意,int21 / 09要求字符串以美元符号($)结尾。 此外,即使您的代码确实打印了某些东西,它也会在之后立即崩溃,因为您根本没有终止程序(参见int21 / 4c),因此它继续执行未定义的内存。根据内存模型和环境,您可能还必须首先为自己设置段寄存器和堆栈。所有这些都假定您确实可以访问int21服务。

最后,作为一般建议,让调试器工作并跟踪您的程序。

答案 2 :(得分:1)

使用内置的“打印”功能/宏。它会为你插入适当的电话。

print "This is a test",13,10,0