我想要注释掉ARM汇编代码的标签,因为我想使用不同的代码,但即使我注释掉主标签,编译器仍会抱怨标签已经定义。
这是代码
.section .data
.section .init
.globl _start
_start:
b main
.section .text
main:
mov sp, #0x8000
mov r1, #1
mov r2, #3
sub r1, r2
halt$:
b halt$
.section .data
; STARTING FROM THIS, IT IS SUPPOSED TO BE COMMENTED OUT
;.section .init
;.globl _start
;_start:
;b main
;.section .text
;main:
;mov sp, #0x8000
;bl EnableJTAG
;mov r1, #0
;mov r2, #0
;mov r3, #0 ;i = 0
;forloop:
;cmp r3, #100
;bpl forloopEnd
;tst r3, #0xAA
;bne elseif
这是收到的错误
Error: symbol `_start' is already defined
Error: symbol `main' is already defined
Error: symbol `halt$' is already defined
那么我该怎么办才能让编译器忽略注释标签?感谢
答案 0 :(得分:2)
实际上,我通过使用块注释/ ** /
解决了这个问题.section .data
.section .init
.globl _start
_start:
b main
.section .text
main:
mov sp, #0x8000
mov r1, #1
mov r2, #3
sub r1, r2
halt$:
b halt$
.section .data
/*
STARTING FROM THIS, IT IS SUPPOSED TO BE COMMENTED OUT
.section .init
.globl _start
_start:
b main
.section .text
main:
mov sp, #0x8000
bl EnableJTAG
mov r1, #0
mov r2, #0
mov r3, #0 ;i =
forloop:
cmp r3, #100
bpl forloopEnd
tst r3, #0xAA
bne elseif
...
*/
答案 1 :(得分:2)
@
字符表示使用GNU的ARM汇编程序为32位源时单行注释的开始:
出现了`@'一行中的任何位置表示注释的开头,该注释延伸到该行的末尾。
如果是`#'作为一行的第一个字符出现,然后整行被视为注释,但在这种情况下,该行也可以是逻辑行号指令(请参阅注释)或预处理器控制命令(请参阅预处理)。
(source)
64位源不是这样。 gas为所有处理器提供了可怕的文档(一种尺寸适合所有(因此很难评论它能做什么和不能做什么。)
可能没有办法在64位 gas 中注释掉一行。 gcc 中 -S 的输出会小心避免任何注释行,这在IMO中是一个不好的标志。
这是我在64位臂关上引用的 as :
as --version
GNU assembler (GNU Binutils for Debian) 2.28
如果确认,这可能被视为缺陷(" bug"),值得一个错误报告。