Создание приложений на ассемблере для Menuet OS

Дата публикации 23 авг 2003

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

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

Что такое MenuetOS?

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

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

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

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

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

Код (Text):
  1.  
  2. dd if=MSETUP.EXE of=mfloppy.img ibs=1000 obs=1000 skip=20

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

Код (Text):
  1.  
  2. dd if=mfloppy.img of=/dev/fd0

и готово.

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

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

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

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

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

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

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

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

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

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

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

Код (Text):
  1.  
  2. add eax,ebx
  3. add esi,eax
  4. add eax,100
  5. sub ecx,edx
  6. sub edx,50
  7. sub edi,0xF

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

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

Код (Text):
  1.  
  2.        jmp haz_esto
  3.  
  4.        ; код
  5.  
  6.    haz_esto: ; Метки обозначаются ':'
  7.  
  8.        ; код продолжается
  9.  
  10. Para comparar los registros entre si se hace esto:
  11.  
  12. Чтобы сравнить регистры, нужно сделать следующее:
  13.  
  14.        cmp eax,ebx ; Сначала сравниваем с помощью 'cmp'
  15.  
  16.        jb EAX_ES_MENOR_EBX ; Потом проверяем результат
  17.  
  18.    ; или
  19.        jg EAX_ES_MAYOR_QUE_EBX
  20.    ; или
  21.        je EAX_ES_IGUAL_A_EBX
  22.    ; или
  23.        jne EAX_NO_ES_IGUAL_A_EBX
  24.  
  25.    ; Здесь задаём следующие метки:
  26.  
  27.    EAX_ES_MENOR_EBX:
  28.  
  29.      ; какой-то код
  30.  
  31.    EAX_ES_MAYOR_QUE_EBX:
  32.      
  33.      ; какой-то код

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

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

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

Код (Text):
  1.  
  2. db 0,1,2       ; заданы байты 0,1,2
  3. dw 0,300,65000 ; заданы слова 0,300,65000
  4. dd 1000000     ; задано двойное слово 1000000
  5.  
  6. ; Строка
  7.  
  8. db 'Здорово, мексиканский народ!' ; Задана ASCII-строка:
  9.                                   ; Здорово, мексиканский народ

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

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

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

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

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

Здесь можно найти исходник рабочего приложения для MenuetOS с комментариями (на языке оригинала - прим.пер.) © GnuOwned / RMX#13, пер. Aquila


0 1.286
archive

archive
New Member

Регистрация:
27 фев 2017
Публикаций:
532