【问题标题】:MASM32, display string and integerMASM32,显示字符串和整数
【发布时间】:2010-12-31 20:50:54
【问题描述】:

我正在使用 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

它没有输出任何东西就崩溃了。我尝试了其他几件事,但有不同的问题,唯一的共同点是我没有在屏幕上显示字符串:)

【问题讨论】:

  • 你有什么问题吗?你有没有为此付出任何努力?
  • 这里不是为你做作业的地方。请发布您已经尝试过的内容并说明为什么它不起作用。
  • 不,不是作业。我不是学生,不再是:)

标签: assembly console x86 dos masm32


【解决方案1】:

您似乎在使用 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 代码,您可能希望从“小”内存模型开始。

【讨论】:

  • TBH,在 MASM32 (v10) 中尝试过,但遇到了很多错误。我有一种感觉,它可以与 MASM 6.11 一起编译,虽然我不感兴趣。但是感谢您为我澄清了 16/32 位的问题,并感谢您努力寻找有用的链接。
【解决方案2】:

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

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

【讨论】:

  • 虽然没有提供完整的源代码,但它确实很有帮助。谢谢
【解决方案3】:

使用内置的“打印”功能/宏。它会为您插入适当的呼叫。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 2020-03-17
    • 2010-10-05
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多