arm-none-eabi-as和ARM评论签署';'

时间:2013-11-30 14:04:10

标签: assembly arm

我不得不问它......它已经让我疯了好几天了。在选择了工具链之后,我的生活变成了一种噩梦,其原因很简单 - 没有武装 - 将每条评论视为一种指令,而且有时它只是不理解ARM汇编程序抛出像“AREA是一个糟糕的指令”这样的花哨错误...

以下是我从keil的文档中复制并粘贴的代码:

AREA     Loadcon, CODE, READONLY
    ENTRY                              ; Mark first instruction to execute
start
    BL       func1                     ; Branch to first subroutine
    BL       func2                     ; Branch to second subroutine
stop
    MOV      r0, #0x18                 ; angel_SWIreason_ReportException
    LDR      r1, =0x20026              ; ADP_Stopped_ApplicationExit
    SVC      #0x123456                 ; ARM semihosting (formerly SWI)
func1
    LDR      r0, =42                   ; => MOV R0, #42
    LDR      r1, =0x55555555           ; => LDR R1, [PC, #offset to
                                       ; Literal Pool 1]
    LDR      r2, =0xFFFFFFFF           ; => MVN R2, #0
    BX       lr
    LTORG                              ; Literal Pool 1 contains
                                       ; literal Ox55555555
func2
    LDR      r3, =0x55555555           ; => LDR R3, [PC, #offset to
                                       ; Literal Pool 1]
    ; LDR r4, =0x66666666              ; If this is uncommented it
                                       ; fails, because Literal Pool 2
                                       ; is out of reach
    BX       lr
LargeTable
    SPACE    4200                      ; Starting at the current location,
                                       ; clears a 4200 byte area of memory
                                       ; to zero
    END                                ; Literal Pool 2 is empty

我的问题是:我应该使用哪些标志来制作arm-none-eabi-以了解其自己的汇编程序指令并将注释视为注释?

* 已添加:* 这是我用来编译这段代码的命令:

arm-none-eabi-gcc hello.S -Os -g -mthumb -mcpu=cortex-m3 -msoft-float -o hello.elf

3 个答案:

答案 0 :(得分:4)

在GNU的ARM汇编语法中启动单行注释的默认字符是@ IIRC。如:

BL   func1             @ Branch to first subroutine

至于汇编指令;它们是特定于汇编程序的,所以你不能只使用armasm代码并用GNU的汇编程序组装它,反之亦然。您必须查找每个指令的含义,并尝试为您将要使用的汇编程序找到相应的指令。

例如,要替换AREA Loadcon, CODE, READONLY,您可以使用.text(除非您需要能够通过其名称引用该部分)。

答案 1 :(得分:1)

众所周知,gnu汇编程序用它来构建自己的汇编语言来替换成熟的语法。基本上你的arm汇编程序语法不会与gnu一起使用。就评论而言,我更喜欢使用两者的组合; @对于我的评论,除此之外,你需要弄清楚两者之间常见的语法,在我为两者开发的时候,我会/可能会编写代码在两者上组装,但我再也无法访问了。

是的,这非常令人沮丧...

答案 2 :(得分:1)

应该检查gnu as的{​​{3}}。通常,每个体系结构都有自己的documentation差异。 ARM不是syntax