2014-10-02 2 views
3

Привет Я использую компилятор Keil uVision для сборки ARM. Я только начинаю изучать это, и у меня есть следующий код в моей программе.Поле AREA в ARM Assembly

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

Когда я строю цели он говорит

test.s (1): ошибка: A1163E: неизвестно опкод ПРОГРАММА,, ожидая опкод или Macro

Я не уверен, почему это , Код выше s код, который мне дал, чтобы работать как образец, чтобы убедиться, что он работает. Разве я не могу вставить что-нибудь в AREA? Любая помощь приветствуется.

ответ

7

Это сообщение об ошибке информативно, если немного трудно расшифровать: anything that starts in the first column is considered to be a label, поэтому ассемблер видит метку с именем «AREA», а затем пытается интерпретировать «ПРОГРАМУ» как мнемонику, макрос или директиву, которая, очевидно, не работает так как это не так.

Короче говоря, директивы должны быть отступом, как и инструкции; эта сборка прекрасна:

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

Спасибо. Вот и все. Помогает много. – HarvP

0

Директива AREA поручает сборщику собирать новый раздел кода или данных. Разделы независимы, называются неделимыми кусками кода или данных, которые манипулируют компоновщиком. Синтаксис

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

где:

s имя раздела имя, чтобы дать раздел. Вы можете выбрать любое имя для своих разделов.

Итак, проверьте, что у вас одно и то же имя в обоих местах: сразу после AREA директива и где-то в вашем коде.

Дополнительную информацию о директивах вы можете найти here.

Смежные вопросы