ARM组件中的AREA字段

时间:2014-10-02 01:23:39

标签: arm keil

您好我正在使用Keil uVision编译器进行ARM组装。我刚开始学习这个,我的程序中有以下代码。

AREA PROGRAM, CODE, READONLY
EXPORT SYSTEMINIT
EXPORT __MAIN
SYSTEMINIT
__MAIN
    MOV R1, #0X25
    MOV R2, #0X23
    END

当我构建目标时,它说

test.s(1):错误:A1163E:未知的操作码程序,期待操作码或宏

我不确定为什么会这样。上面的代码是我给出的代码作为样本运行以确保其工作。我不应该为AREA投入任何东西吗?任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:7)

该错误信息是有用的,如果有点难以解密:anything that starts in the first column is considered to be a label,那么汇编程序会看到一个名为“AREA”的标签,然后尝试将“PROGRAM”解释为助记符,宏或指令,这显然是失败的,因为它不是。

简而言之,指令需要缩进,就像指令一样;这组装得很好:

    AREA PROGRAM, CODE, READONLY
    EXPORT SYSTEMINIT
    EXPORT __MAIN
SYSTEMINIT
__MAIN
    MOV R1, #0X25
    MOV R2, #0X23
    END

答案 1 :(得分:0)

AREA指令指示汇编程序汇编新代码或数据部分。节是由链接器操纵的独立的,命名的,不可分割的代码块或数据块。 的语法

AREA sectionname{,attr}{,attr}...

其中:

sectionname 是要提供给该部分的名称。您可以为部分选择任何名称。

因此,请检查两个地方是否有相同的名称:紧跟在 AREA 指令之后和代码中的某处。

有关指令的进一步阅读,您可以找到here