【问题标题】:arm-none-eabi-as and ARM comments sign ';'arm-none-eabi-as 和 ARM 注释符号 ';'
【发布时间】:2013-12-16 13:23:42
【问题描述】:

我不得不问它......它确实已经让我发疯了好几天。在选择 arm-none-eabi 作为工具链后,我的生活变成了一场噩梦,原因很简单 - arm-none-eabi-as 将每条评论都视为指令,而且有时它只是不理解 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-as 理解它自己的汇编指令并将 cmets 视为 cmets?

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

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

【问题讨论】:

    标签: assembly arm


    【解决方案1】:

    应该检查gnu asdocumentation。一般来说,每个架构对于syntax 都有自己的差异。 ARM 不是different

    【讨论】:

    • 我做到了。事实上,编译器现在可以理解代码了。所以现在我对crt0.S只有一些问题。它说的是未定义的 end 变量(这很奇怪,我不使用任何自定义链接器脚本)。
    【解决方案2】:

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

    BL   func1             @ Branch to first subroutine
    

    至于汇编指令;它们是特定于汇编程序的,因此您不能只使用 armasm 代码并使用 GNU 的汇编程序进行汇编,反之亦然。您必须查找每个指令的含义,并尝试为您要使用的汇编程序找到对应的指令。

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

    【讨论】:

      【解决方案3】:

      gnu 汇编器以创建自己的汇编语言来替代完善的语法而闻名。基本上,您编写的 arm 汇编器语法不适用于 gnu。就 cmets 而言,我更喜欢将两者结合使用 ;@ 对于我的 cmets,除此之外,您还需要弄清楚两者之间共有的语法,在我为两者开发时,我会/可以编写代码两者都组装了,但我不再有访问权限了。

      是的,这很令人沮丧...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-24
        • 1970-01-01
        • 2016-12-21
        • 2016-05-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多