2016-11-18 77 views
0

这段时间我正在学习装配。我使用ms-dos“debug”命令来创建简单的程序,但现在我想制作大型程序。我下载NASM,并试图组装以下代码:Nasm错误; undefined labels

.model small 
.code 
    mov ax, bx 

但在标签型号和.CODE它说,他们不确定AR。我在其他几个汇编程序中再次尝试了这种情况,并发生了同样的情况。任何人都可以帮我解决这个问题吗? 我使用的是Windows 10

+3

您的语法(指令)看起来更像是MASM而非NASM。 – zx485

+0

@ zx485 nasm中的语法怎么样? –

+0

我怀疑你还在制作16位代码。你不必这样做,你可以用asm编写32位或64位代码,它可以在64位Windows上本地运行,并使用普通库/ Win32 API。您可以编写可以从普通C++程序调用的函数。所以你不必使用DOSBOX或类似的东西。查看[x86 tag wiki](http://stackoverflow.com/tags/x86/info)中的一些链接。 –

回答

2

NASM语法程序:

segment code 
..start: 
mov ax, bx 

特殊符号..start标志着入口点到您的程序。 Here是在NASM

编写16位代码关于.model small一个不错的手动 - 那里http://www.nasm.us/doc/nasmdoc2.html没有内存模型在NASM,从文档citate:

NASM也没有任何指示支持不同的16位 内存模型。程序员必须跟踪 应该使用远程调用调用哪些函数,哪些函数使用近端调用,并且 负责放置正确形式的RET指令(RETN 或RETF; NASM接受RET本身作为替代形式为RETN);在 另外,程序员负责在调用外部函数时根据需要编写CALL FAR 指令,而且还必须跟踪哪些外部变量定义远近,哪些外部变量定义近于 。

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