assembler linux



Автор Андрей Меньшаков задал вопрос в разделе Другие языки и технологии

ассемблер под линукс и под виндовс различаются и чем? и получил лучший ответ

Ответ от Миоко Таканава[гуру]
Ассемблер в бóльшей степени зависит от процессора. Но это если писать программу, работающую просто так, не получающую входных данных и не выводящую никуда результат своей работы.
Например, программы для процессоров Intel/AMD и ARM будут разительно отличаться друг от друга, даже написанные для родственных операционных систем: Linux на IBM PC-совместимом и Android (если не ошибаюсь, ОС на базе Linux-ядра) .
А если пишется программа, которая получает откуда-то входные данные и выводит результаты работы на какое-либо устройство, то неизбежно придётся обращаться к услугам операционной системы.
К слову сказать, в MS DOS это делать не обязательно. Можно напрямую взаимодействовать с аппаратурой. Эта операционная система не протестует против прямой работы с оборудованием.
Но в современных ОС: и в Windows, и Linux прямое обращение к ресурсам железа из пользовательских программ невозможно из-за разграничения прав доступа.
Поэтому для общения с пользователем и с внешними устройствами используются системные вызовы. В Windows – это прерывание с номером 2Eh, в Linux – 80h (в MS DOS для системных нужд используется прерывание 21h).
Прикладные программы Windows в подавляющем большинстве не используют системные вызовы, обращаясь к операционной системе с помощью функций API, находящихся в системных динамических библиотеках (DLL). В Linux тоже часто используют библиотечные функции из файлов c расширением .so вместо и вместе с системными вызовами.
А API-функции в разных операционных системах в общем случае имеют разные имена и разные соглашения о передаче параметров и возвращении результата выполнения. Для ассемблера это выливается в загрузке аргументов функций для каждой ОС в разные регистры или размещение в стеке в разном порядке. При использовании системных вызовов, кстати, тоже различие не только в номере прерывания, но и в различном назначении регистров.
Различается синтаксис программ, написанных для разных компиляторов. Главным образом различается написание директив и макросов, но это не является отличительной особенностью программ для той или иной операционной системы.
А различные нотации написания команд процессора (Intel и AT&T) с появлением кроссплатформенных компиляторов – это уже история и не зависит от ОС. GAS и YASM поддерживают обе нотации и в Windows, и в Linux. FASM и NASM в обеих операционках поддерживают только нотацию Intel.
Например:
И два в одном:
Кстати, по последней ссылке наглядный вам пример, как сильно отличается одна и та же программа, написанная для Linux и Windows даже для одного и того же компилятора.

Ответ от Алексей Меркулов[гуру]
Ассемблер не имеет привязки к операционке - это наверное единственный язык напрямую работающий с железом и отличия версий идут относительно процессора т. е. например ZX spectrum, 8080, 80286, 80386, 80486, Pentium I, Pentium I MMX, и т. д.

Ответ от Александр Котов[гуру]
оличется результатом работы линкера
ну и используемыми системными функциями (если не хочешь получить программу которая никак и ни счем не взаимодействует)

Ответ от Антон ФАГ[гуру]
Нотации
Linux - Unix - AT&T Labs
DOS - Windows - Intel

Ответ от 22 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: ассемблер под линукс и под виндовс различаются и чем?
GNU Assembler на Википедии
Посмотрите статью на википедии про GNU Assembler
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*