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

Но далеко не всё так плохо как кажется! В KolibriOS есть готовый редактор кода с подсветкой CEdit, и он поддерживает подсветку для нескольких языков программирования. Но я не уверен что он умеет компилировать под все эти языки. Но как минимум текст набрать можно. Fasm поддерживается полностью и собирать/запускать/отлаживать приложения можно "используя" данный редактор (не совсем, редактор запускает отдельно компилятор и так же запускает отдельно отладчик), что и позволяет полноценно разрабатывать программы.

Я бы хотел сразу предупредить, практически ни какого обучения в статье не будет. Всё рассчитано на то, что вы уже хотя бы немного знаете ассемблер x86 и уже создавали простые программы под данную архитектуру (под Windows, Dos, Linux, а так может и MacOS).

Возникающие вопросы

В: Зачем изучать ассемблер, особенно x86 в настоящее время?
(ответ не мой, данный ответ ходит на просторах интернета не один год)
О: Если вы задаётесь таким вопросом, то вам это не нужно (ответ не мой, данный ответ ходит на просторах интернета не один год).

В: Почему я решил использовать ассемблер именно в KolibriOS, а не в Windows или Dos? Или в крайнем случае, Linux. Ведь под них материала на порядок больше.
О: Я уже тренировался под перечисленные ОС, меня интересует что-то новое. А так же это позволяет немного вникнуть в разработку под разные ОС, а значит больше понимание как работать с разными ОС. Где искать информацию, не сильно прибегая к поискам по интернету (хотя это основной ресурс на сегодняшний день). Использование разных ОС позволяет быстрее ориентироваться в технической литературе и справочном материале.

В: Стоит ли новичку заниматься ассемблером и изучать его используя KolibriOS?
О: Я думаю не стоит (но это моё субъективное мнение), новичку лучше изучить ассемблер используя те ОС для которых больше информации по ассемблеру, а это Windows, Dos и Linux.

В: Стоит ли новичку использовать Fasm для изучения ассемблера.
О: Да, Fasm это очень неплохой выбор для изучения ассемблера. Для Fasm есть достаточно материала и очень много его на русском языке.

В: Почему ассемблер на архитектуру X86? Почему не актуальные сейчас Arm32/64?
О: Выбирать вам под какую архитектуру вы будете разрабатывать приложения! Новичку лучше изучать тот материал, где больше всего информации, дабы не искать информацию по всему интернету и не путать самого себя. В дальнейшем, изучив одну архитектуру, вам будет проще перейти на другую.

В: Какой ассемблер лучше всего использовать для новичка? Nasm, Fasm, Tasm, Wasm или ещё какой?
О: Новичку лучше всего найти полноценные уроки по ассемблеру. Не надо выбирать ассемблер, обычно уроки включают в себя подготовку к программированию на ассемблере и потому именно уроки определяют начальный выбор ассемблера. В дальнейшем, изучив ассемблер и оболочку для него, вам проще будет переходить на другой ассемблер.

Если у вас возникло желание изучить ассемблер используя Fasm, то для вас я могу порекомендовать посмотреть материал на этих сайтах:

Запускаем KolibriOS

Вы можете пропустить эту часть, если у вас уже всё готово к программированию в KolibriOS.

Для информации, я использую Linux и Qemu! Потому встречающиеся команды для Windows могут отличаться наличием в конце файла ".exe". Так же все действия вы можете сделать по своему и используя другой эмулятор!

Для начала запустим систему, как я уже описывал в видео, либо какими-то своими способами, например установкой на свой компьютер (я, кстати, использовал этот способ, работало всё достаточно хорошо).

Следующий шаг, а нет... стоп... это должен быть первый шаг... если вы используете KolibriOS на виртуальной машине. Мы должны создать для себя дополнительный жесткий диск, где мы будем хранить информацию (ваши программы). Открываем терминал, пишем в нём:
qemu-img create -f raw kol.img 500M
и... запускаем другой эмулятор с указанием только что созданного диска. Почему? Потому что KolibriOS не умеет сама форматировать диски, а нам надо его отформатировать в Fat32. Я использую для этого эмулятор Windows 7 и там форматирую этот диск. Windows может не видеть этот диск в проводнике и вам надо будет ещё заставить увидеть данный жёсткий диск и отформатировать его. После этого выходим из эмулятора и "подцепляем" отформатированный жёсткий диск к KolibryOS, например добавив в файл ".sh" (в Windows в файл ".bat") строчку:
- hdb kol.img \

Если вы можете создать отформатированный образ диска другим путём, то ни чего зазорного в этом нет. Я лишь привёл пример как это можно сделать.

Ссылка на видео, где я подготавливаю запуск KolibriOS, запускаю её и создаю очередное тестовое приложение (точнее я его уже создал, пробегаюсь по коду, да пытаюсь доработать).

Ну что ж, будем надеяться что у вас к этому моменту уже запущена KolibriOS и мы переходим непосредственно к созданию кода. ... почти ...

Откройте CEdit, зайдите во вкладку "tools" и там выберите "system functions".

Будет открыт файл с системными функциями данной ОС. Важно понимать, что под большинство ОС есть свои системные функции и вы должны уметь пользоваться документацией. Это полезно как минимум для упрощения создания вами программ и для того чтоб не изобретать каждый раз велосипед. Ведь многая функциональность уже реализована и её надо просто использовать (где-то больше, где-то меньше).

Теперь зайдите во вкладку "language" и выберите "Fasm" (как я понимаю это подсветка синтаксиса), а так же во вкладке "tools" выберите "board" - откроется дополнительное окно. Сейчас это окно вам не нужно, но при сборке/запуске приложения там будет показываться отладочная информация, которая поможет вам в случае если у вас возникнут ошибки в программе, при ошибках информация будет выведена именно туда. Достаточно удобно что в KolibriOS уже всё подготовлено для программирования. Вот теперь точно можно начинать писать программу. :-)

include "macros.inc"

MEOS_APP_START

CODE
; основной цикл
main_loop:
    call draw_window
    mcall 10 ; ожидание события.
    dec eax  ; 1 - перерисовка окна.
    jz  main_loop
    dec eax  ; 2 - обработка клавиатуры.
    jnz no_key
    call key
no_key:
    dec eax  ; 3 - обработка созданных кнопок.
    jnz no_button
    call button_press
no_button:
    jmp main_loop

key:
    mcall 2  ; получаем код нажатой клавиши.
    ; здесь мы должны сделать обработку клавиатуры.
    ret
button_press:
    mcall 17 ; получить код нажатой кнопки.
    cmp ah, 2; 2 - это код созданной нами кнопки.
    jne no_close
    mcall -1 ; закрываем программу, если была нажата созданная нами кнопка.
no_close:
    ret

draw_window:
    mcall 12, 1 ; начинаем перерисовку окна.
      ; настройки окна
    mcall 0, <30,500>, <100,300>, 0x33808080, , header
      ; рисуем строку
    mcall 4, <200,20>, 0x800000FF, string
      ; рисуем кнопку. Обратите внимание на цифру 2, это и есть идентификатор кнопки.
    mcall 8, <400, 80>, <250, 20>, 2, 0x0000FF00
      ; рисуем линию. Просто для примера.
    mcall 1, 0, 0, 0x00FF0000
    mcall 1, 1, 1, 0x00FF0000
    mcall 1, 2, 2, 0x00FF0000
    mcall 1, 3, 3, 0x00FF0000
    mcall 12, 2 ; завершаем прорисовку окна.
    ret

DATA
header db 'test',0
string db 'It is text.',0
UDATA
MEOS_APP_END

пришло время проверить код. Пробуйте запустить программу. А лучше дополнить её ещё каким-нибудь кодом, для прокачки вашего скилла.

Я постарался всё прокомментировать и надеюсь всё правильно скопировал. Но если нет, то думаю вы сами сможете исправить ошибки. Судя по моему видео, у меня всё работало. )))

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

Внимание, важно! При компиляции и запуске вашего приложения в KolibriOS вы можете получить не тот результат которого ожидали! Всё дело в том, что надо обязательно сохранять ваши изменения в коде. Компилятор использует файл с диска и не сохраняет ваши изменения автоматически когда вы собираете ваше приложение.

Обратите внимание на вызовы mcall - это системные вызовы и вам надо будет смотреть документацию по данным вызовам и смотреть что делают эти вызовы. Со временем, понятно дело что вы сможете многое запомнить, а что-то выбросить (для себя) и использовать только то, что нужно вам.

Так же обратите внимание на созданную кнопку. Она без текста... текст, видимо, надо писать туда самим.

Так же, если вас заинтересовала данная тема, то советую вам заглянуть на GitHub и зайти в папку programs/develop/examples. Там лежит достаточно немало примеров по программированию под KolibriOS, только есть большая вероятность что их немного придётся модифицировать. А вообще я бы посоветовал заглянуть в папку programs по той причине, что там лежит много, очень много разного кода и макросов (и возможно не только). Вполне возможно это всё вас заинтересует.

Давайте подводить итоги

На данный момент, к большому сожаленью, ассемблером на KolibriOS практически ни кто не пользуется. Что ещё хуже, это то, что даже программ на ассемблере практически не создаётся (мне даже интересно, есть ли люди, которые программируют до сих пор на ассемблере под данную ОС?). Данная ОС была рекламирована как сделанная на ассемблере, но в данный момент больше похоже, что многое создаётся с помощью ЯВУ, хотя возможности Fasm-а достаточно неплохо прокачаны.

Но давайте о хорошем! Fasm достаточно хорошо прокачан для данной ОС! Есть не мало документации и даже на русском языке. Текстовый редактор с подсветкой синтаксиса и даёт возможность запускать и отлаживать приложения. Так же, возможность запуска и отладки имеет редактор TinyPad! Создание окна и прорисовка его делается небольшими подпрограммами, что достаточно большой плюс, ведь в настоящие дни чтоб сделать нативное окно надо приложить очень много усилий и достаточно не мало изучить (вы бы знали сколько времени мне пришлось изучать документацию MacOS, для того чтоб там нормально сделать нативное окно и его обработку). Получаются очень маленькие приложения, вы представляете что тот код, который я предлагаю вашему обозрению, делает рабочий код на 300 байт?! БАЙТ!!! :-)

Я думаю, что KolibriOS - это очень удобный рабочий инструмент для обучения, тестирования и наработки ваших способностей. Используя данную ОС посредством виртуальной машины, вы можете тестировать определённый код, без опасения что это навредит вашему компьютеру (а для новичков это достаточно важный фактор). И так же я думаю, что я как раз этим пользоваться и буду. Ведь я потрачу немного времени (уже потратил) на заготовку, в которую буду просто вставлять код, который хочу протестировать. И возможно ещё что-нибудь закину на Хабр. :-)

Всем успехов!!!

Комментарии (7)


  1. DimPal
    15.03.2024 15:24
    +1

    Всякий инструмент хорош если применён по назначению. ЯВУ дают дают более надежный код, т.к. помогают уменьшить количество ошибок (плюс бывают статические анализаторы). Код на ассеблере это круто конечно, но не всегда быстрее кода на С/С++ (вопросы оптимизации по скорости сложные и запутанные). А уж если к производительности больших требований нет (код работает, например, один раз на старте) использование ЯВУ сам доктор прописал.


    1. SIISII
      15.03.2024 15:24
      +1

      Одно дело -- "коммерческое" программирование, а другое -- изучение для общего развития.


    1. Seenkao Автор
      15.03.2024 15:24

      В прошлой статье писал человеку про оптимизацию. Что сейчас довольно сложно вникать в неё, потому что одна оптимизация может нивелировать другую. И с одной стороны вроде улучшаешь код, а с другой наоборот.

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


  1. Kil1J0y
    15.03.2024 15:24

    С/С++ плохо работает с памятью. Из за этого перешёл на rust было сложно по началу полностью уйти от С . Java конечно хороша пока не упирается вопрос в производительность..

    Ну а ассемблер это бог скорости надёжности и размера готовой программы/драйвера.


    1. V_asily
      15.03.2024 15:24
      +6

      C/C++ прекрасно работают с памятью, проблема в пишущем код...


  1. kinall
    15.03.2024 15:24

    В: Зачем изучать ассемблер, особенно x86 в настоящее время? (ответ не мой, данный ответ ходит на просторах интернета не один год) О: Если вы задаётесь таким вопросом, то вам это не нужно (ответ не мой, данный ответ ходит на просторах интернета не один год).

    А если я спрошу не "зачем это мне", а "зачем это вам"?


    1. Seenkao Автор
      15.03.2024 15:24

      Я думаю, что KolibriOS - это очень удобный рабочий инструмент для обучения, тестирования и наработки ваших способностей. Используя данную ОС посредством виртуальной машины, вы можете тестировать определённый код, без опасения что это навредит вашему компьютеру (а для новичков это достаточно важный фактор). И так же я думаю, что я как раз этим пользоваться и буду. Ведь я потрачу немного времени (уже потратил) на заготовку, в которую буду просто вставлять код, который хочу протестировать.