Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler: Linux
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.52/23: Рейтинг темы: голосов - 23, средняя оценка - 4.52
bug
5 / 5 / 0
Регистрация: 27.10.2009
Сообщений: 34
1

Ассемблирование в LInux

21.12.2009, 00:36. Просмотров 4313. Ответов 19
Метки нет (Все метки)

Как писать и компилировать на ассемблере в Linux?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.12.2009, 00:36
Ответы с готовыми решениями:

Перенос программы под Linux: номера системных вызовов в DOS и Linux не совпадают
Здравствуйте, уважаемые программисты всея форума! Доброго вам времени суток! =)...

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

Asm в linux
Доброе время суток! Подскажите как перевести код так,чтоб можно было...

Взаимодействие с Linux
Модератор, закрепи тему, пожалуйста. :) Сделал перевод малюсенькой статьи. А...

Fasm + linux + ide
Господа! В данный момент приходится кодить на fasm под Linux (Debian). Хотелось...

19
Goodwin98
2522 / 818 / 10
Регистрация: 31.05.2009
Сообщений: 1,672
21.12.2009, 00:48 2
Писать в редакторе, компилировать компилятором, линковать линкером. Все как в винде и досе.
0
bug
5 / 5 / 0
Регистрация: 27.10.2009
Сообщений: 34
21.12.2009, 16:29  [ТС] 3
А как запустить компиляцию из строки (я просто не знаю).
Вот например в С: $ gcc file_name.c -o file_name1.c
А на ассемблере как. Я не студент и подсказка нужна только потому, что спросить не у кого. Я не люблю спрашивать, кроме крайней необхрдимости. Спасибо!
0
Gravity
569 / 563 / 64
Регистрация: 29.01.2009
Сообщений: 1,274
21.12.2009, 16:30 4
Bash
1
2
nasm -f elf -o t.o t.s
ld -o t t.o
При условии, что в t.s код на интел-синтаксисе и установлен nasm.
0
bug
5 / 5 / 0
Регистрация: 27.10.2009
Сообщений: 34
21.12.2009, 16:37  [ТС] 5
В любых ли дистрибутивах прилагается nasm? Я сейчас использую Mandriva Linux 2008. Я вообще почему спрашиваю. Мне Linux привычнее. В ассемблере я новичок, но очень хочу изучить. В принципе мне всё равно где начинать, в Windows или Linux. Но в Винде пока всё соберешь в кучу. А Linux обычно в себе содержит всё, что надо (нужно только знать, где это найти).
0
Gravity
569 / 563 / 64
Регистрация: 29.01.2009
Сообщений: 1,274
21.12.2009, 16:44 6
В линуксе, как правило, все находится в репозиториях дистрибутива, поэтому далеко бегать не надо. В крайнем случае можно найти исходники и собрать из них.
0
Goodwin98
2522 / 818 / 10
Регистрация: 31.05.2009
Сообщений: 1,672
21.12.2009, 16:52 7
Если вы собираетесь программировать на асме под линуксом, может быть вам сразу начинать с AT&T синтаксиса? В этом случае можно начать делая асм вставки в сишном коде и компилируя с помощью gcc.
0
rangerx
1944 / 1553 / 478
Регистрация: 31.05.2009
Сообщений: 2,913
21.12.2009, 16:54 8
В любом случае в каждом дистре должен быть gas(команда as), но он использует AT&T-синтаксис, который намного менее распространён, чем интеловский.
P.S. Хм... у меня оказывается есть nasm Хотя может я сам его и поставил, не помню уже
0
bug
5 / 5 / 0
Регистрация: 27.10.2009
Сообщений: 34
21.12.2009, 17:05  [ТС] 9
Дело в том, что учусь по "букварям", а там в основном всё рассматривается через призму Windows. А поскольку нет малейших навыков в ассемблере, то подскажите более конкретно набор инструментов для создания программы. О синтаксисе AT&T я ничего не знаю. В от в одной книге пишут: "Скачайте MASM или TASM, линковщик такой-то, отладчик такой-то. Уже в другой книге "не гарантируют, что не будет ошибок, если если использовать TASM". Эта неразбериха просто угнетает. Неужели действительно так трудно стать на позицию новичка и объяснить просто, что если хотите сделать программу, вам надо то-то и то-то, а всё остальное не от Бога. И потом, пишу (для Винды), "надо компилировать только в DOSе. Это как, должна стоять ОС DOS на компе, или эмулятор поверх Win XP? Очень много вопросов. Не хочется показаться тупым, но честно говоря, книги достаточной ясности не внесли.
0
Goodwin98
2522 / 818 / 10
Регистрация: 31.05.2009
Сообщений: 1,672
21.12.2009, 17:11 10
Боюсь, что учебники для для доса/виндоса не помогут програмированию на асме в линуксе. Потому как оно отличается для каждой из ОС.
Цитата Сообщение от bug Посмотреть сообщение
Это как, должна стоять ОС DOS на компе, или эмулятор поверх Win XP?
В винде есть встроеный эмулятор доса его вполне хватает для многих задач.
1
bug
5 / 5 / 0
Регистрация: 27.10.2009
Сообщений: 34
21.12.2009, 17:16  [ТС] 11
То есть, не получится как с С/С++, что код одинаковый (в основном), отличается компиляция?
0
rangerx
1944 / 1553 / 478
Регистрация: 31.05.2009
Сообщений: 2,913
21.12.2009, 17:20 12
Здесь простые примеры(+какие нужны инструменты и как компилировать) для gas и nasm под Lunix
http://la.kmv.ru/howto/quickstart.html
1
Goodwin98
2522 / 818 / 10
Регистрация: 31.05.2009
Сообщений: 1,672
21.12.2009, 17:21 13
Если вы будете писать целиком программу на асме, то нет.
Хотя бы даже потому что, даже, чтобы на экран вывести надпись в досе используется 21h прерывание, в виндосе - апи функции, а в линуксе - сервис int 80h. Да еще и синтаксис у каждой программы-ассемблера немного отличается.
Другое дело, если писать на нем не целиком программу, а только как вставки, например, для вычисления чего-нибудь и без вызова сервисов, то этот код должен будет работать на всех x86 машинах.
0
bug
5 / 5 / 0
Регистрация: 27.10.2009
Сообщений: 34
21.12.2009, 17:40  [ТС] 14
First of all you need assembler (compiler) -- nasm or gas. Вот, опять-таки, какой из них лучше или как правильно спросить, есть ли разница какой применять, или это в зависимости от целей?
0
Goodwin98
2522 / 818 / 10
Регистрация: 31.05.2009
Сообщений: 1,672
21.12.2009, 17:43 15
nasm - синтаксис Intel
Assembler
1
2
3
4
5
        mov     edx,len ;third argument: message length
        mov     ecx,msg ;second argument: pointer to message to write
        mov     ebx,1   ;first argument: file handle (stdout)
        mov     eax,4   ;system call number (sys_write)
        int     0x80    ;call kernel
gas - синтаксис AT&T
Assembler
1
2
3
4
5
    movl    $len,%edx   # third argument: message length
    movl    $msg,%ecx   # second argument: pointer to message to write
    movl    $1,%ebx     # first argument: file handle (stdout)
    movl    $4,%eax     # system call number (sys_write)
    int $0x80       # call kernel
Это две формы записи одного и того же кода.
0
bug
5 / 5 / 0
Регистрация: 27.10.2009
Сообщений: 34
21.12.2009, 18:02  [ТС] 16
Значит, синтаксис Intel в nasm более универсален? Если функционально это ни на что не влияет, то наверное лучше изучать его. Тогда можно будет использовать его и для Linux Windows при необходимости. Или я не так понял?
0
Evg
Эксперт CАвтор FAQ
19353 / 7202 / 538
Регистрация: 30.03.2009
Сообщений: 20,135
Записей в блоге: 30
21.12.2009, 18:28 17
Цитата Сообщение от bug Посмотреть сообщение
А как запустить компиляцию из строки (я просто не знаю).
Вот например в С: $ gcc file_name.c -o file_name1.c
А на ассемблере как. Я не студент и подсказка нужна только потому, что спросить не у кого. Я не люблю спрашивать, кроме крайней необхрдимости. Спасибо!
gcc t.c -S -o t.s - из файла .c получаешь файл .s (ассемблерный)
gcc t.s -c -o t.o - получаешь объектный файл
gcc t.o -o a.out - получаешь исполняемый файл

Добавлено через 5 минут
Цитата Сообщение от bug Посмотреть сообщение
Значит, синтаксис Intel в nasm более универсален? Если функционально это ни на что не влияет, то наверное лучше изучать его. Тогда можно будет использовать его и для Linux Windows при необходимости. Или я не так понял?
Без надобности лучше эти дела не перемешивать: под виндами делать так, как принято у виндузовщиков, под линухом писать так, как принято у линуксоидов. В своё время приходилось компилить какую-то программу, где буквально 10 строк они написали на ассемблере с каким-то экзотическим синтаксисом. Т.е. чтобы скомпилять эту программу, мне понадобилось ставить этот идиотский ассемблер, тот в свою очередь захотел какие-то библиотеки (тоже идиотские), эти библиотеки внутри себя содержали какой-то (идиотский) скрипт, требующий какой-то (идиотский) тул. И весь это секс только потому, что кто-то поленился 10 строк кода перевести на "принятый" в линухе формат ассемблерного написания
1
bug
5 / 5 / 0
Регистрация: 27.10.2009
Сообщений: 34
21.12.2009, 19:12  [ТС] 18
Это же, соответственно и исполняемые файлы будут работать только в соответствующих ОС?
0
Goodwin98
2522 / 818 / 10
Регистрация: 31.05.2009
Сообщений: 1,672
21.12.2009, 19:30 19
А вы видели программы, которые могут работать везде ?
0
Evg
Эксперт CАвтор FAQ
19353 / 7202 / 538
Регистрация: 30.03.2009
Сообщений: 20,135
Записей в блоге: 30
21.12.2009, 20:27 20
Цитата Сообщение от bug Посмотреть сообщение
Это же, соответственно и исполняемые файлы будут работать только в соответствующих ОС?
Естественно. Когда ты пишешь программу на языке программирования, то вся платформо-зависимость спрятана в библиотеках
0
21.12.2009, 20:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.12.2009, 20:27

Выделение памяти в linux
Здравствуйте. Вопрос, вроде, простой. Как выделить память в linux'e? (аналог...

Подключение ядра Linux
В общем препод дал задание, написать загрузчик и к нему же подключить ядро,...

Подключаемые файлы в Linux
Здравствуйте. Я новичок, хочу познакомится с nasm в linux. Читаю книгу и там в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru