The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Assembler в Linux"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Assembler в Linux" 
Сообщение от Дмитрий emailИскать по авторуВ закладки(??) on 14-Янв-06, 17:33  (MSK)
Здравствуйте!!
У меня возникла маленькая проблемка с компиляцией файла на ассемблере в 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) нечего не дают

помогите plz ....может я что-то делаю не так....
как вообще компилируется ассемблерный код? я сталкиваюсь первый раз с этим..
Может написать makefile? но тогда с какими настройками....Есть вообще доки по синтаксису makefile'а?
Заранее спасибо за любую помощь!!!

p/s: самое интересное, что команды smull и mov отрабатываются а комманды которые игнорируються должны быть
з.з.ы:Для тех, кто писал под ARM-->Или эти комманды при программировании под MustDie?

  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]

1. "Assembler в Linux" 
Сообщение от jd Искать по авторуВ закладки(??) on 15-Янв-06, 16:06  (MSK)
Под ARM ничего не писал, но по-моему очевидно, что это (area, export,align) не инструкции процессора, а директивы компилятора, которые, разумеется, у каждого компилятора могут быть свои.
Так что нужно изучать документацию по вашему компилятору.
  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Assembler в Linux" 
Сообщение от dimus Искать по авторуВ закладки(??) on 17-Янв-06, 11:24  (MSK)
>Здравствуйте!!
>У меня возникла маленькая проблемка с компиляцией файла на ассемблере в 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 и посмотреть, что получится. Будьте внимательны с порядком аргументов - сам много раз по привычке путал.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ]




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру