如何在ARM程序集中注释标签

时间:2016-11-25 07:02:24

标签: assembly arm

我想要注释掉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      

那么我该怎么办才能让编译器忽略注释标签?感谢

2 个答案:

答案 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"),值得一个错误报告。