【问题标题】:Nasm error; undefined labels纳斯姆错误;未定义的标签
【发布时间】:2016-11-18 17:06:13
【问题描述】:

这段时间我正在努力学习汇编。我使用 ms-dos "debug" 命令来创建简单的程序,但现在我想制作大型程序。我下载了nasm并尝试组装以下代码:

.model small
.code
    mov ax, bx

但是在标签 .model 和 .code 中,它说它们是未定义的。我在其他几个汇编程序中再次尝试了这个,同样的事情发生了。谁能帮我解决这个问题? 我正在使用 Windows 10。

【问题讨论】:

  • 你的语法(指令)看起来更像 MASM 而不是 NASM。
  • @zx485 nasm 中的语法如何?
  • 我怀疑您仍在编写 16 位代码。您不必这样做,您可以在 asm 中编写可以在 64 位 Windows 上本机运行的 32 位或 64 位代码,并使用普通库/Win32 API。您可以编写可以从普通 C++ 程序调用的函数。所以你不必使用 DOSBOX 或类似的东西。查看x86 tag wiki 中的一些链接。

标签: assembly windows-10 nasm assemble


【解决方案1】:

你的程序的 Nasm 语法:

segment code 
..start: 
mov ax, bx

特殊符号 ..start 标记程序的入口点。 Here 是一本很好的用 Nasm 编写 16 位代码的手册

关于 .model small - Nasm 中没有内存模型,引用 http://www.nasm.us/doc/nasmdoc2.html 的文档:

NASM 也没有任何指令来支持不同的 16 位 记忆模型。程序员必须跟踪哪些函数是 应该用远距离呼叫和近呼叫呼叫,并且 负责放置正确形式的 RET 指令(RETN 或 RETF; NASM 接受 RET 本身作为 RETN 的替代形式);在 另外,程序员负责编码CALL FAR 调用外部函数时需要的指令,并且必须 还跟踪哪些外部变量定义远, 附近。

我建议您阅读Nasm documentation - 您的大部分问题都有答案。

【讨论】:

    猜你喜欢
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    • 2014-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多