Assembly arm none eabi as和arm注释符号'';
我不得不问它。。。这已经让我疯狂了好几天了。在选择arm none-eabi作为工具链之后,我的生活变成了一场噩梦,原因很简单——arm none-eabi将每一条评论都视为一条指令,而且有时它只是不理解一个arm汇编程序抛出的奇特错误,比如“区域是一条糟糕的指令” 以下是我从keil的文档中复制并粘贴的代码: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
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变量(奇怪的是,我没有使用任何自定义链接器脚本)。