Как сделать ос на ассемблере

Добавил пользователь Евгений Кузнецов
Обновлено: 04.10.2024

Разрабатывать операционную систему целиком на ассемблере - это утопия. Ничего серьезного из этого не получится. Можно, конечно, попытаться написать на ассемблере ядро. Это может даже вполне получиться. Но со временем понимаешь, что это не самый оптимальный путь развития, так как это:

  • Непереносимо.
  • Громоздко.
  • Трудно в сопровождении.

Некоторые мотивируют это тем, что, дескать, повышается производительность. Это миф.

Но, с другой стороны, любой уважающий себя программист, тем более системный, должен знать ассемблер. Это знание позволяет лучше понимать, как работают программы.

Поэтому не смею никого отговаривать. Единственное, о чем напомню: даже отдельное ядро - это весьма большой проект. Это сотни килобайт исходных текстов и сотни тысяч строк кода. Чтобы во всем этом не запутаться, вырабатывайте в себе и в своих исходных текстах строгий стиль. Исходники должны или говорить, или быть подробно прокомментированы.

Свое ядро я потом все-таки перепишу на SadKo

Лично я считаю, что ОС на ассемблере годится лишь для развития навыков написания ОС, хороший способ разобраться в том, как функционирует та или иная аппаратура, и каково её взаимодействие с прикладным программным обеспечением. Однако по мере роста ядра становится всё сложнее и сложнее его модификация. При написании ОС собенно важно то, чтобы любой её компонент подвергался embedded , поэтому грузиться приходилось из flash -памяти и осуществлять сhip-селекты SII

Не соглашусь с уважаемыми участниками обсуждения сразу по нескольким пунктам.

Dron утверждает, что "Разрабатывать операционную систему целиком на ассемблере - это утопия. Ничего серьезного из этого не получится". Однако как быть с системами 1950-70-х годов? Их что, не существовало? Или они не были серьёзными?

Глупо спорить с тем, что ОС на ассемблере является непереносимой. Однако следует заметить, что и ОС на ЯВУ нельзя просто так "в лоб" перенести на ЭВМ иной архитектуры: в любом случае потребуются переделки, связанные с особенностями аппаратуры управления памятью, прерываниями и вводом-выводом.

Громоздкость и трудность сопровождения ПО на ассемблере, с моей точки зрения, серьёзно преувеличиваются. Фактически при чётком соблюдении принципа "разделяй и властвуй" и при должном документировании проекта сопровождать ПО на ассемблере если и сложнее, чем на ЯВУ, то ненамного.

Заявление "Некоторые мотивируют это тем, что, дескать, повышается производительность. Это миф" также ошибочно. Самый оптимальный код, а значит, наивысшая производительность, может быть получен только на ассемблере: никакой оптимизирующий транслятор не выполнит свою работу лучше человека. Другое дело, что сам по себе факт написания программы на ассемблере ещё не гарантирует, что она будет более "скорострельной", чем созданная на ЯВУ, поскольку ручная оптимизация -- работа весьма трудоёмкая и требующая очень хорошего понимания не только системы команд, но и ряда технических аспектов, например, того, как работает кэш-память процессора.

Ещё один мой "кирпичик в огород" Dron'а касается "сотен тысяч строк" исходного кода. Всё зависит от ОС и, опять-таки, кривизны рук (и мозгов) тех, кто её делал. Например, даже в ранних версиях OS/360 было что-то вроде 2 млн. строк на ассемблере; правда, в состав этой ОС, а значит, в указанное число входят и утилиты, и трансляторы -- а они занимают немало. Действительно, такой громадный объём написать очень сложно, а в одиночку -- нереально. Однако можно привести и противоположный пример. Одна из самых развитых ОС для PDP-11 (наш аналог -- СМ-3/4/1300/1600/1420/1425) -- RSX-11M, у нас "перекрещённая" в ОС-РВ (т.е. операционная система реального времени). Это полноценная многозадачная многопользовательская система, обладающая практически всеми необходимыми функциями API, включая межзадачное взаимодействие, управление памятью и т.п. В один момент времени с ней может работать сразу несколько человек (с разных терминалов, естественно), причём, понятное дело, система не даёт им вредить друг другу, т.е. реализована многопользовательская защита. Так вот, ядро этой системы занимает несколько десятков килобайт (подчёркиваю: не мегабайт, а килобайт -- меньше, чем значительно более примитивная MS DOS). Отсюда легко установить и объём исходного кода ядра: несколько десятков тысяч строк на ассемблере (PDP-11 -- 16-разрядная машина, коды команд имеют длину 2, 4 и 6 байт). Написать ядро подобного уровня в одиночку вполне реально за разумный срок.

Что касается сложности рефакторинга, о котором говорит SadKo, то здесь также всё зависит от "кривизны" реализации. Главное -- это чёткое разделение функций разных модулей системы, документирование, недопущение "паразитных связей" и т.п. Но если не придерживаться этих принципов, никакой ЯВУ не спасёт.

В общем, моё мнение таково: реализация ядра ОС на ассемблере не только технически возможна, но и вполне уместна, только надо чётко определиться с тем, что должно входить в ядро, а что -- нет, и не допускать его "разбухания" за разумные пределы. А вот программирование всей ОС в наше время целиком на ассемблере -- это уже перебор. Например, я не вижу смысла реализовывать команды типа dir или copy на ассемблере: их скорость возрастёт крайне незначительно, объём серьёзно тоже не уменьшится, так не проще ли написать их на ЯВУ?

Меня не интересует grub, меня не интересует код на Си или любом другом языке, кроме ассемблера.

Меня интересует, как написать код, даже не ОС, просто код на ассемблере, которые выводит строку на экран.

Я знаком с ассемблером, я знаком с тем, как работает загрузка операционной системы, я знаю про "магические" 511ый и 512ый байты загрузочного устройства, но я не понимаю, какой пакет ассемблера использовать, какие директивы указывать, с какими флагами компилировать, а главное - как полученный результат записать на флешку так, чтобы флешка стала загрузочной?


А это зависит от используемого вами ассемблера и линкера. И вообще от ОС под которой работаете. Можете поискать для вашего компилятора что нибудь вроде "сборка bin образа", не забудьте еще org 7c00h, потому что загрузчик будет в ОЗУ по этому адресу. А писать под linux например просто dd if=файл of=/dev/ваша-флешка , под винду конечно утилиты разные есть. Если что гугл по фразе "пишем загрузчик ос на ассемблере" дает много полезных статей, в том числе и по компиляции/сборке/записи

@Mike, спасибо за ответ, но мне интересно так же, как самому что то записывать на флешку не по правилам файловой системы, а так, как мне захочется. Захочел - написал в первый байт флшеки, захотел - написал в последний.

Записывать откуда ? В каком режиме находиться процессор ? Под чем в это время выполняется ваша программа ? Если программа записи под ОС, выполняющейся в защищенном режиме (все современные ОС), то это делается исключительно по правилам ОС, с помощью их функций, потому как ОС не даст вам прав использовать устройства на прямую. Если же вы вдруг под чистым старым BIOS (в реальном режиме) или DOS, то вы можете использовать прерывание int 13h (ну или напрямую работать с контроллером устройства хранения)

@Mike, в целом, первая причина того, почему мне нужно это сделать - это именно ограничения ОС. Ощущение чего то нечистого. Постоянно требуют использовать уже кем то написанный код, а это удручает. Поэтому я хочу писать что то полностью свое, чтобы использовать все возможности ассемблера, а не "У нас прерывания запрещены, извините за не удобства, воспользуйтесь готовыми функциями"

А иначе в современном мире нельзя, потому что если позволить программам работать напрямую с железом то получим времена DOS, когда каждый день рождалась сотня другая новых вирусов, которые при этом старались удалить все файлы или выжечь видеокарту/монитор или еще что нибудь. Современные ОС заботятся о том, что бы проверить права доступа программы и не позволить ей влиять на другие программы и делать что нибудь вредное для системы в целом.

В этой небольшой статье по шагам объяснено, как написать простенькую многозадачную операционную систему. Причем эта ОС будет работать даже на XT(8086). На работоспособную и полезную ОС это не тянет, а вот понят принципы системного программирования поможет.

Если вы ни разу не видели ассемблера, то думаю, что вам здесь делать просто не чего.

    - реализация многозадачности (все прерывания) - команды OS - просто общие данные. - работа с дискетой без DOS (вот глюк) - аналог int 21h в MS-DOS - главный модуль - компилить его. - распределение ресурсов (семафоры) - работа с памятью - всевозможные утилиты. - Загрузчик - размещается в boot-секторе.

Все компоненты ОС (kernel, commands, i/o subsystem) написаны
на ассемблере с подробными комментариями. Файловая система -
обычный FAT, загружается со стандартной дискетты 1.44 Mb, формат
исполняемых файлов - MS-DOS COM. ОС работает даже на XT (по словам автора)
и на полезную и работоспособную ОС не тянет. Скорее, она призвана помочь
начинающему программисту понять основные принципы системного
программирования.

У многих время от времени возникает идея создать свою операционную систему. Вот и я пришёл к такой мысли Я самоучка, в детстве программировал на асме в ZX-Spectrum, после армии увлёкся сайтостроением, затем форексом(писал советники). Создал большой интернет проект, но средств на раскрутку и найм персонала не было, понятно, почему полез в форекс. Далее сменив работу, постепенно забросил свои проекты. Но данный опыт мне очень сольно помогает в моих новых разработках.
Поначалу захотелось сделать удобную программу подобно 1С, но удобнее и проще. Сделал небольшие модули, мини базу данных custodem(только запись и чтение простых типов данных), публикатор publisher(своего рода веб-сервер), bucinator(передача данных по сети и между модулями базы данных и публикатором), cerebrum(язык программирования подобный PHP для веб сайтов, но проще).

_ Всё это писал на Lazarus, так как делал разные приложения для упрощения своей работы на Delphi, привык к паскалю, а так как Lazarus c кросплатформенной компиляцией и свободно распространяемый, решил написать приложение для работы на нём, но из идеи приложения для работы переросло во что-то большее. Со временем создам сайт проекта, опишу всё более подробно, выложу модули.
Далее на основе этих модулей можно сделать простые приложения для производств(подобно 1С), торговли(подобно торговому терминалу форекс), поликлиник(для карточек пациентов) и др. Это сможет сделать даже школьник, который знает Паскаль, всё можно написать также в Lazarus. Сайты, которые будут размещаться на личных компьютерах.

_ Теперь ближе к теме. Работая над своими проектами я всегда искал единомышленников, но так и не находил, так как живу на периферии и в ближайшем кругу нет программистов которые хотят что-то сами сделать. Также время от времени, возникала мысль о более продуманной системе. Сейчас изучаю ассемблер и есть желание написать свою ОС.

Итак, если тут есть желающие написать свою удобную операционную систему, то предлагаю следующее:собрать команду специалистов
обсудить структуру ОС
распределить задачи
приступить к реализации
Моя идея операционной системы такая:создать драйвера для работы с дисками, видеобуфером, звуком, мышкой и др. периферийных устройств по мере надобности
ядро управления памятью, базу данных, передача данных по сети
интерпретатор языка программирования, напрашивается название EMPEROR , так как на этом языке будут писаться все программы для нашей операционной системы

Язык EMPEROR будет создавать окна, вставлять нужные компоненты в приложении и тд. Это будет очень простой язык, на котором сможет писать кто угодно.

Если соберётся хорошая команда, то думаю за год, максимум два мы создадим СУПЕР операционку Итак, кто согласен участвовать в этом?

Наверняка у многих уже есть наработки. По себе знаю в одиночку такой грандиозный проект не реализовать. Если вы откажитесь от применения своих знаний и наработок в создании работающей ОС, то считайте, вы зря делали, то, что сделали и это окажется никому не нужным, так как чтобы это работало, надо ещё очень многое создать на что у вас не хватит и жизни, это, во-первых. А во-вторых, предлагаю написать лицензионное соглашение по созданию и распространению исходных кодов по принципу свободного распространения, а также договор долевого участия в капитализации операционной системы, то есть распределения дохода от участия разработчиков. В третьих если будет хорошая команда, то эта операционка будет очень быстро написана и доступна всем, на основе чего уже можно будет создавать полезные коммерческие приложения (платёжная система, бизнес приложения, социальные и частные приложения, подробнее о идеях могу рассказать позже).

Кто в деле пишем о своём опыте в той или иной области, например:
Есть опыт в создании больших проектов, создании языка программирования, базы данных, платёжной системы.

Это я о себе В ассемблере у меня на данный момент мало опыта, но думаю наверстаю, указанный опыт может применим в разработке ОС. То есть я хочу заняться созданием ядра ОС. Если вы имеете опыт в работе с дисками, видео, звуком и тд. отписывайтесь кто желает включиться в разработку.

Я и так 9999999$ в наносекунду зарабатываю, но тебе удачи, тс.

а ядро где

img

согласен. но я нулина во всем этом. только пол года изучаю тех отдел)

а ядро где

Всё с нуля писать конечно не вариант, сейчас рассматриваю использование некоторых исходников от Калибри ОС. За вин могут и иск выставить, линукс конечно хорошая вещь но верёвочная как и винда, их столько народу писало, что чёрт ногу сломит. Я сторонник упрощения программ и для конкретной идеи ОС, то есть создания не просто очередной-г**но оболочки к которой надо создавать всё заново, а такую в которой уже практически всё будет, и набросав в блокноте несколько строк можно создать нужное приложение ОС ИНТЕРПРЕТАТОР смекаете о чём речь идёт?

Всё с нуля писать конечно не вариант, сейчас рассматриваю использование некоторых исходников от Калибри ОС. За вин могут и иск выставить, линукс конечно хорошая вещь но верёвочная как и винда, их столько народу писало, что чёрт ногу сломит. Я сторонник упрощения программ и для конкретной идеи ОС, то есть создания не просто очередной-г**но оболочки к которой надо создавать всё заново, а такую в которой уже практически всё будет, и набросав в блокноте несколько строк можно создать нужное приложение ОС ИНТЕРПРЕТАТОР смекаете о чём речь идёт?

так бы и написал, ядра нет пишите сами

Возьми колибри, навтыкай везде свои копирайты и назови bolgen2os.

так бы и написал, ядра нет пишите сами

А есть тут те кто уже пытались, пытаются написать свою ОС? Хотелось бы узнать их мысли о построении ядра и др. Похвалитесь Покажите если что-то уже сделано. Или мысли тех кто хотели бы чтобы у них была такая-то операционка, с такими то возможностями. Есть тут такие?

А есть тут те кто уже пытались, пытаются написать свою ОС? Хотелось бы узнать их мысли о построении ядра и др. Похвалитесь Покажите если что-то уже сделано. Или мысли тех кто хотели бы чтобы у них была такая-то операционка, с такими то возможностями. Есть тут такие?

ты реально думаешь что кто-то выложит наработки ядра , этого никто делать не будет из соображений защиты интеллектуального труда

У многих время от времени возникает идея создать свою операционную систему. Вот и я пришёл к такой мысли Я самоучка, в детстве программировал на асме в ZX-Spectrum, после армии увлёкся сайтостроением, затем форексом(писал советники). Создал большой интернет проект, но средств на раскрутку и найм персонала не было, понятно, почему полез в форекс. Далее сменив работу, постепенно забросил свои проекты. Но данный опыт мне очень сольно помогает в моих новых разработках.
Поначалу захотелось сделать удобную программу подобно 1С, но удобнее и проще. Сделал небольшие модули, мини базу данных custodem(только запись и чтение простых типов данных), публикатор publisher(своего рода веб-сервер), bucinator(передача данных по сети и между модулями базы данных и публикатором), cerebrum(язык программирования подобный PHP для веб сайтов, но проще).

_ Всё это писал на Lazarus, так как делал разные приложения для упрощения своей работы на Delphi, привык к паскалю, а так как Lazarus c кросплатформенной компиляцией и свободно распространяемый, решил написать приложение для работы на нём, но из идеи приложения для работы переросло во что-то большее. Со временем создам сайт проекта, опишу всё более подробно, выложу модули.
Далее на основе этих модулей можно сделать простые приложения для производств(подобно 1С), торговли(подобно торговому терминалу форекс), поликлиник(для карточек пациентов) и др. Это сможет сделать даже школьник, который знает Паскаль, всё можно написать также в Lazarus. Сайты, которые будут размещаться на личных компьютерах.

_ Теперь ближе к теме. Работая над своими проектами я всегда искал единомышленников, но так и не находил, так как живу на периферии и в ближайшем кругу нет программистов которые хотят что-то сами сделать. Также время от времени, возникала мысль о более продуманной системе. Сейчас изучаю ассемблер и есть желание написать свою ОС.

Итак, если тут есть желающие написать свою удобную операционную систему, то предлагаю следующее:собрать команду специалистов
обсудить структуру ОС
распределить задачи
приступить к реализации
Моя идея операционной системы такая:создать драйвера для работы с дисками, видеобуфером, звуком, мышкой и др. периферийных устройств по мере надобности
ядро управления памятью, базу данных, передача данных по сети
интерпретатор языка программирования, напрашивается название EMPEROR , так как на этом языке будут писаться все программы для нашей операционной системы

Язык EMPEROR будет создавать окна, вставлять нужные компоненты в приложении и тд. Это будет очень простой язык, на котором сможет писать кто угодно.

Если соберётся хорошая команда, то думаю за год, максимум два мы создадим СУПЕР операционку Итак, кто согласен участвовать в этом?

Наверняка у многих уже есть наработки. По себе знаю в одиночку такой грандиозный проект не реализовать. Если вы откажитесь от применения своих знаний и наработок в создании работающей ОС, то считайте, вы зря делали, то, что сделали и это окажется никому не нужным, так как чтобы это работало, надо ещё очень многое создать на что у вас не хватит и жизни, это, во-первых. А во-вторых, предлагаю написать лицензионное соглашение по созданию и распространению исходных кодов по принципу свободного распространения, а также договор долевого участия в капитализации операционной системы, то есть распределения дохода от участия разработчиков. В третьих если будет хорошая команда, то эта операционка будет очень быстро написана и доступна всем, на основе чего уже можно будет создавать полезные коммерческие приложения (платёжная система, бизнес приложения, социальные и частные приложения, подробнее о идеях могу рассказать позже).

Кто в деле пишем о своём опыте в той или иной области, например:
Есть опыт в создании больших проектов, создании языка программирования, базы данных, платёжной системы.

Это я о себе В ассемблере у меня на данный момент мало опыта, но думаю наверстаю, указанный опыт может применим в разработке ОС. То есть я хочу заняться созданием ядра ОС. Если вы имеете опыт в работе с дисками, видео, звуком и тд. отписывайтесь кто желает включиться в разработку.

Напиши простейший виджет, который делается на qt за 1 минуту, попробуй повторить на асме. Когда внуки твоих внуков допишут его, можешь задуматься об ОС на асме(ты болен)

Читайте также: