警告:单独在没有冒号的行上标注可能有误

warning: label alone on a line without a colon might be in error

我已经有了这个简单的汇编程序asm1.asm,但是在尝试编译它时出现错误。这是代码

;--- constant variables ---
SECTION .data

    msg: db "Hello World!", 10, 0; 10: carriage return, 0: NULL end of msg (stop)

;--- dynamic variables ---
; SECTION .bss

;--- assembler code ---
SECTION .text

extern _printf
global _main                    ;
_main:                          ; void main() {
    push ebp ;basepointer       ;   /* creation of the stack */
    mov ebp, esp ;stackpointer  ;

    push msg                    ;   /* pushing memory address */
    call _printf                    ;   /* call printf */

    mov esp, ebp                ;   /* function body */
    pop ebp                     ;
    return;                     ; }

我收到这个错误

C:\Users\David\Desktop>nasm -f elf asm1.asm
asm1.asm:23: warning: label alone on a line without a colon might be in error

我是汇编的新手,所以我想这只是一些小问题,但有人可以告诉我是什么导致了警告吗?

return; 行有什么用?这不是 x86 指令名称,因此汇编程序将其视为等同于 return: 并警告您,以防这不是您的意思。

x86 的 return 指令被称为 ret.

在 NASM 语法中,不带 :label 被允许作为定义符号的方式,但由于输入指令/指令的歧义,它已被弃用,或者此版本 NASM 尚无法识别的新指令助记符。 (使用 :,您甚至可以使用指令名称作为标签,例如 loop:-w+orphan-labels 默认打开。

https://nasm.us/doc/nasmdoc3.html#section-3.1 NASM 源代码行的布局记录了这一点。