警告:单独在没有冒号的行上标注可能有误
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 源代码行的布局记录了这一点。
我已经有了这个简单的汇编程序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 源代码行的布局记录了这一点。