>Здравствуйте!!
>У меня возникла маленькая проблемка с компиляцией файла на ассемблере в Linux
>для ARM процессора....может кто занимался
>
>В файле следующее
>
> area
>|C$$code|, CODE, READONLY
> align 4
>
>
> export |mul|
>|mul|
> smull a3,
>a1, a2, a1 ; signed integer
>long multiply.
> mov
> pc, lr
> ; return, a1 = msw of
>result.
>
> end
>
>этот файл написан для ARM ассемблера
>самое интересное при компиляции он не отрабатывает комманду area, export,align и
>комментарии
>
>
>компилирую=> as <имя файла>
>
>код проверял несколько раз...он правильно написан..ошибок там быть не может
>as настроен на arm ассемблер, настройки которые есть в as для
>arm (-mcpu и -march) нечего не дают
>
Если as - это гнутый ассемблер, то я Вас обрадую - гнутый ассемблер использует синтаксис AT&T, который в корне отличается от того, что вы привыкли видеть в винде (синтаксис Intel). Пример:
Программа на С:
#include <stdio.h>
int main( int argc, char* argv[] )
{
printf("Hello\n");
return 0;
}
То, во что ее превратил компилятор:
.file "1.c"
.section .rodata
.LC0:
.string "Hello\n" // Это вместо db 'hello',0
.text
.globl main
.type main, @function
main:
pushl Кp // Все регистры пишутся с символа процент
movl %esp, Кp // в команде мов добавляется указатель размера аргументов
subl $8, %esp // все числа начинаются с символа доллара
andl $-16, %esp
movl $0, Йx // Загрузить ноль в ЕАХ - порядок аргументов !!!!!
subl Йx, %esp // Вычесть из ЕСП ЕАХ - порядок аргументов !!!!!
subl $12, %esp
pushl $.LC0
call printf
addl $16, %esp
movl $0, Йx
leave
ret
.size main, .-main // Точка - текущий адрес
.section .note.GNU-stack,"",@progbits
.ident "GCC: (GNU) 3.3.4"
Я не разбираюсь в синтаксисе команд АРМа, так что не могу вам привести тот код, который бы заработал, но я думаю, что вы поняли принцип и справитесь сами. Кстати, наверное можно написать это на С, скомпилить для платформы АРМ с ключом -S и посмотреть, что получится. Будьте внимательны с порядком аргументов - сам много раз по привычке путал.