Создание приложений на ассемблере для Menuet OS — Архив WASM.RU

Все статьи

Создание приложений на ассемблере для Menuet OS — Архив WASM.RU

Это моя первая статья для RMX ("Raza Mexicana" - мексиканский электронный журнал, из которого была переведена статья - прим.пер.), поэтому не судите меня строго. В данной статье я собираюсь объяснить, как писать приложения на 32-х битном ассемблере для маленькой и неприхотливой системы Menuet. Но сначала рассмотрим самое главное:

Что такое MenuetOS?

Это маленька операционная система, которая влезает на дискету и написана полностью на 32-х битном ассемблере, очень быстрая и маленькая (но функциональная) с очень лёгким графическим интерфейсом, не говоря уже о том, что в ней есть текстовый редактор, график процессора и так далее.

Самое интересное в этой оси то, что она отдаётся по лицензии GPL (www.gnu.org), поэтому мы можем посмотреть её код, модифицировать и так далее. Дело в том, что это прекрасная возможность научиться программировать на 32-х битном ассемблере, а затем применить свои знания для более выгодных дел :). Официальная страница этой интересной операционной системы располагается по адресу www.menuetos.org, где вы можете посмотреть скриншоты, скачать её, посмотреть FAQ и т.д.

Инсталлируем MenuetOS...

Это самое простое... =), нужно только скачать програмку под названием MSETUP.EXE и установить её под виндами на чистую дискету, после чего загрузиться с неё, и тогда перед вами появится навороченный графический интерфейс (хе-хе-хе).

Чтобы установить MenuetOS под никсами, вам нужно сделать в консоли следующее:

dd if=MSETUP.EXE of=mfloppy.img ibs=1000 obs=1000 skip=20

После этого образ операционной системы окажется в файле mfloppy.img и всё, что остаётся сделать, это скопировать образ на дискету:

dd if=mfloppy.img of=/dev/fd0

и готово.

Достоинством данной OS является то, что не надо ничего модифицировать на своём жёстком диске, потому как всё происходит в оперативной памяти и не надо делать дополнительные партиции, ничего...

Введение в 32-х битный ассемблер

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

Краткое введение в программирование на ассемблере - 0.02

В ассемблере есть много команд, которые в действительности не являются необходимыми для создания наших программ.

Есть шесть регистров, которые в Menuet можно рассматривать как переменные: eax, ebx, ecx, edx, esi, edi.

Каждый из этих регистров может хранить 32-х битное число.

Сохранить число в регистре можно следующим образом:

mov eax,10      ; сохраняем десятиричное 10 в eax
mov ebx,2000000 ; десятиричное 2000000 в ebx
mov ecx,0       ; ноль в ecx
mov edx,11b     ; двоичное 11 aвedx (десятиричное 3)
mov esi,0xFF    ; шестнадцатиричное FF в esi (десятиричное 255)
mov edi,ebx     ; и можем присвоить значение одного регистра другому...

Как вы уже заметили, комментарии можно помещать после ";".

Также мы можем складывать и вычитать:

add eax,ebx
add esi,eax
add eax,100
sub ecx,edx
sub edx,50
sub edi,0xF

Также мы можем делать умножение и деление - прочтите о командах mul, div, imul, idiv в файле CMD.TXT на дискете с операционной системой (на английском).

Безусловные переходы можно делать так:

       jmp haz_esto

       ; код

   haz_esto: ; Метки обозначаются ':'

       ; код продолжается

Para comparar los registros entre si se hace esto:

Чтобы сравнить регистры, нужно сделать следующее:

       cmp eax,ebx ; Сначала сравниваем с помощью 'cmp'

       jb EAX_ES_MENOR_EBX ; Потом проверяем результат

   ; или
       jg EAX_ES_MAYOR_QUE_EBX
   ; или
       je EAX_ES_IGUAL_A_EBX
   ; или
       jne EAX_NO_ES_IGUAL_A_EBX

   ; Здесь задаём следующие метки:

   EAX_ES_MENOR_EBX:

     ; какой-то код

   EAX_ES_MAYOR_QUE_EBX:
     
     ; какой-то код

OK, у нас уже есть следующие основные функции:

  • - Сохранение переменных
  • - Изменение переменных
  • - Безусловные переходы
  • - Условные переходы

Задавать числа можно следующим образом:

db 0,1,2       ; заданы байты 0,1,2
dw 0,300,65000 ; заданы слова 0,300,65000
dd 1000000     ; задано двойное слово 1000000

; Строка

db 'Здорово, мексиканский народ!' ; Задана ASCII-строка: 
                                  ; Здорово, мексиканский народ

В Menuet системные функции вызываются командой 'int 0x40'.

Например, кнопка на окно помещается следующим образом:

mov eax,8            ; Функция, задающая кнопку
mov ebx,100*65536+10 ; Координата по x - 100, а ширина кнопки - 10
mov ecx,50*65536+8   ; Координата по y - 50, а высота кнопки - 8
mov edx,10           ; Id. Это число индендифицирует кнопку.
mov esi,0x000099     ; Цвет (синий)
int 0x40             ; Вызываем системную функцию и у нас есть 
                     ; кнопка ;-)

Просто, не правда ли?

Скомпилировать приложение можно выбрав menu->programing->fasm и указав имя файла с исходником на ассемблере и файла, который должен получиться.

Здесь можно найти исходник рабочего приложения для MenuetOS с комментариями (на языке оригинала - прим.пер.)

2002-2013 (c) wasm.ru