Assembly 由于无法识别字符,程序集编译失败

Assembly 由于无法识别字符,程序集编译失败,assembly,compilation,arm,Assembly,Compilation,Arm,我在这里向你描述我的问题。 我在汇编中有一个项目,我必须编译它,以便捕获转换和调用的指令 我必须执行的指令是: arm-eabi-none delay.s -o delay.o 以获取对象文件并执行objectDump 问题是执行给了我这个问题: delay.s: Assembler messages: delay.s: Warning: end of file not at end of a line; newline inserted delay.s:1: Error: junk at e

我在这里向你描述我的问题。 我在汇编中有一个项目,我必须编译它,以便捕获转换和调用的指令

我必须执行的指令是:

arm-eabi-none delay.s -o delay.o
以获取对象文件并执行objectDump

问题是执行给了我这个问题:

delay.s: Assembler messages:
delay.s: Warning: end of file not at end of a line; newline inserted
delay.s:1: Error: junk at end of line, first unrecognized character is G'
我在这里报告我的全部代码是为了向您展示我所做的,因为我真的不理解这个错误

试试这个:

.equ    GPFSEL2,    0x3f200008
.equ    GPSET0,     0x3f20001c
.equ    GPCLR0,     0x3f200028
.equ    GPLEV0,     0x3f200034
.equ    SYSTIMER_CLO,   0x3f003004
.
.
. your code here
.
.
.end

也许您的行尾与汇编器期望的不匹配,所以汇编器认为所有内容都在一行上?这可以解释错误信息。(不过,这可能不是唯一可能的解释。)

例如,将
x=1y=2
放在
foo.s
中,并将其与GNU binutils
组合为
会准确地给出错误消息:

foo.s:1: Error: junk at end of line, first unrecognized character is `y'
但是,如果在单独的行中定义了这些集合时间常数,它就可以工作了。(即使在
=
前面有空格,这也不是问题所在)

(请注意,图像中的第二行源代码也以
G
开头,因此错误消息无助于将其与实际第一行上不可打印的隐藏字符区分开来。)


您是否检查过DOS或Mac与Unix线路结束问题?也许您有Unix行结尾,但您正在运行Windows版本的
as
,并且它以某种方式在文本模式输入中丢弃单个
\n
LF(0xa)?或者,无论做什么,面向行的输入实际上都在寻找CR-LF对(
\r\n

这也解释了
警告:文件结尾不在一行末尾;插入换行符


你的文字图片对确定这一点或其他任何事情都没有帮助。但是,复制/粘贴为文本也没有帮助。您可以通过查看源文件的hextump进行检查


您还可以通过创建只包含前两行的[MCVE]来简化问题。你只需要一些应该组装但不需要的东西;它不需要做任何事情。

您必须以文本形式发布代码。是的,正如工具所指出的,在我所见过的任何asm中,没有一行代码的开头是有效的……更不用说gnu汇编程序或gcc了,因为您的命令行无效,所以我们无法分辨。接下来,请不要发布代码的图像,发布代码,最小的可复制量。另外,根据您为此问题准备的代码发布实际的命令行。因此,请100%粘贴导致问题所需的代码,并粘贴真正的命令行以及工具的输出。在某些情况下,该工具的版本是有用的。@old_timer GNU assembler接受这种赋值。请参阅:“一个符号,后跟一个等号“=”,后跟一个表达式。这相当于使用.set指令。”。您是否检查了DOS或Mac与Unix的行尾问题?就像你可能只有经典的Mac换行符(0xD=CR,没有换行符)那么汇编器认为一切都在一行上?你的文字图片对确定这一点或其他任何事情都没有帮助。但是复制/粘贴为文本也没有帮助。“CF-LF-pair”的措辞错误,你的意思是CR.@ecm:谢谢,修复了。最后问题只是一些没有实例化的常量。谢谢大家