nasm - error: attempt to define a local label before any non local labels

nasm - error: attempt to define a local label before any non local labels

我是汇编语言的新手,我正在使用 nasm 汇编器进行研究。 我收到无法解决的错误:

error: attempt to define a local label before any non-local labels

在该程序的第 1 行:

.data
hello:  db  "hello world"   
.code
..start
    MOV AX,hello        
    MOV DS,AX
    MOV AH,09h
    INT     21h
.exit
end

我该如何解决?

您的代码有一些错误:变量 hello 不需要冒号,带有两个点的单词 start 不正确,您试图在不初始化数据段的情况下访问变量,显示字符串的代码不会执行此操作。

任何 x86 汇编程序都需要基本结构才能运行,然后您可以添加更多代码、过程等。接下来是基本结构:

.stack 100h
.data
my_variable db 'hello$'
.code          
;INITIALIZE DATA SEGMENT.
  mov  ax,@data
  mov  ds,ax

  call my_procedure

;FINISH.  
  mov  ax,4c00h
  int  21h           

proc my_procedure
  mov  dx,offset my_variable
  mov  ah,9
  int  21h
my_label:
  ret
endp
  1. 首先你有堆栈,在本例中为 256 字节 (100h)。

  2. 接下来是变量的数据段。

  3. 代码段需要初始化数据段,否则您将无法访问您的变量。之后添加所有代码,但永远不要忘记正确完成程序。在底部你可以添加你的程序。

  4. 在程序中有一个标签和声明它的语法:标签名称后跟冒号,以及显示变量的正确方式。

希望对您有所帮助。

抱歉,我忘了:我用的是EMU8086编译器。

另一个编辑:注意 'hello' 末尾的“$”符号,对于以这种方式显示的任何字符串都是必需的。如果忘记了,也会显示奇怪的字符。