Другие языки программирования и технологии
ассемблер под линукс и под виндовс различаются и чем?
ведь ассемблер язык программирования под процессор, так какая же разница под какой операционной системой программировать под процессор?
Ассемблер в бóльшей степени зависит от процессора. Но это если писать программу, работающую просто так, не получающую входных данных и не выводящую никуда результат своей работы.
Например, программы для процессоров 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 даже для одного и того же компилятора.
Например, программы для процессоров 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 даже для одного и того же компилятора.
Ассемблер не имеет привязки к операционке - это наверное единственный язык напрямую работающий с железом и отличия версий идут относительно процессора т. е. например ZX spectrum, 8080, 80286, 80386, 80486, Pentium I, Pentium I MMX, и т. д.
оличется результатом работы линкера
ну и используемыми системными функциями (если не хочешь получить программу которая никак и ни счем не взаимодействует)
ну и используемыми системными функциями (если не хочешь получить программу которая никак и ни счем не взаимодействует)
Нотации
Linux - Unix - AT&T Labs
DOS - Windows - Intel
Linux - Unix - AT&T Labs
DOS - Windows - Intel
Из названия станет понятно "аппаратные прерывания процессора", кратко "прерывания",
- это прерывания не операционной системы (ОС): Windows или Linux, BSD и MAC.
Разные архитектуры процессоров будут иметь разные "прерывания".
Прерывание - это НЕ ФУНКЦИЯ языка программирования в ОС или встроенная API там же в ОС !!!
- это прерывания не операционной системы (ОС): Windows или Linux, BSD и MAC.
Разные архитектуры процессоров будут иметь разные "прерывания".
Прерывание - это НЕ ФУНКЦИЯ языка программирования в ОС или встроенная API там же в ОС !!!
Похожие вопросы
- Что может ассемблер?
- Почему многие программисты ненавидят ассемблер?Ведь у него куча плюсов!Он позволяет максимально задействовать
- Вопрос по изучению языка Ассемблера под MS DOS. (Нужны советы по программному обеспечению/программированию)
- С помощью команд fpu вычислить площадь круга, исходя из введѐнного диаметра. Ассемблер...
- Ассемблер сегодня и завтра.
- А вот скажите на чём написан windows и linux какие уних есть сходства и чем виндовс лутше линукс или хуже???
- что лучше поставить линукс, мак ос или виндовс
- Чем отличается о. с. линукс от виндовс? В двух словах? ..
- Линукс и профессия
- как сделать чтобы были 2 операционые системы у меня виндовс 7 хочу поставить ещё линукс что бы при етом осталась 7 ка?