Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly arm none eabi as和arm注释符号'';_Assembly_Arm - Fatal编程技术网

Assembly arm none eabi as和arm注释符号'';

Assembly arm none eabi as和arm注释符号'';,assembly,arm,Assembly,Arm,我不得不问它。。。这已经让我疯狂了好几天了。在选择arm none-eabi作为工具链之后,我的生活变成了一场噩梦,原因很简单——arm none-eabi将每一条评论都视为一条指令,而且有时它只是不理解一个arm汇编程序抛出的奇特错误,比如“区域是一条糟糕的指令” 以下是我从keil的文档中复制并粘贴的代码: AREA Loadcon, CODE, READONLY ENTRY ; Mark first instruct

我不得不问它。。。这已经让我疯狂了好几天了。在选择arm none-eabi作为工具链之后,我的生活变成了一场噩梦,原因很简单——arm none-eabi将每一条评论都视为一条指令,而且有时它只是不理解一个arm汇编程序抛出的奇特错误,比如“区域是一条糟糕的指令”

以下是我从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

众所周知,gnu汇编程序以编写自己的汇编语言来取代公认的语法而闻名。基本上,编写的arm汇编程序语法无法与gnu一起工作。就评论而言,我更喜欢将两者结合使用;@对于我的评论,除此之外,您还需要找出两者之间的共同语法,在我为两者开发时,我会/可以编写在两者上组装的代码,但我不再有访问权限


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

gnu汇编程序以编写自己的汇编语言来取代公认的语法而闻名。基本上,编写的arm汇编程序语法无法与gnu一起工作。就评论而言,我更喜欢将两者结合使用;@对于我的评论,除此之外,您还需要找出两者之间的共同语法,在我为两者开发时,我会/可以编写在两者上组装的代码,但我不再有访问权限


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

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

BL   func1             @ Branch to first subroutine

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


例如,要替换
区域Loadcon,code,READONLY
,您可能可以使用
.text
(除非您需要能够通过其名称引用该节)。

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

BL   func1             @ Branch to first subroutine

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


例如,要替换
区域Loadcon,code,READONLY
,您可能可以使用
.text
(除非您需要能够通过其名称引用该节)。

应将
gnu作为
进行检查。一般来说,每种架构都有其自身的差异。ARM是否。

应该将gnu作为检查。一般来说,每种架构都有其自身的差异。手臂是不行的。

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