Другие языки программирования и технологии

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

ведь ассемблер язык программирования под процессор, так какая же разница под какой операционной системой программировать под процессор?
Ассемблер в бóльшей степени зависит от процессора. Но это если писать программу, работающую просто так, не получающую входных данных и не выводящую никуда результат своей работы.
Например, программы для процессоров 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.

Например:
программа для Windows в AT&T-нотации.
Программа для Linux в Intel-нотации.
И два в одном: одна и та же программа для Linux и Windows в нотации Intel.

Кстати, по последней ссылке наглядный вам пример, как сильно отличается одна и та же программа, написанная для Linux и Windows даже для одного и того же компилятора.
ДР
Дастан Рахметов
51 590
Лучший ответ
Ассемблер не имеет привязки к операционке - это наверное единственный язык напрямую работающий с железом и отличия версий идут относительно процессора т. е. например ZX spectrum, 8080, 80286, 80386, 80486, Pentium I, Pentium I MMX, и т. д.
Serg Lotz
Serg Lotz
44 443
оличется результатом работы линкера
ну и используемыми системными функциями (если не хочешь получить программу которая никак и ни счем не взаимодействует)
Valeri Borta
Valeri Borta
16 534
Нотации
Linux - Unix - AT&T Labs
DOS - Windows - Intel
Из названия станет понятно "аппаратные прерывания процессора", кратко "прерывания",
- это прерывания не операционной системы (ОС): Windows или Linux, BSD и MAC.

Разные архитектуры процессоров будут иметь разные "прерывания".
Прерывание - это НЕ ФУНКЦИЯ языка программирования в ОС или встроенная API там же в ОС !!!