Создание приложений на ассемблере для Menuet OS — Архив WASM.RU
Это моя первая статья для RMX ("Raza Mexicana" - мексиканский электронный журнал, из которого была переведена статья - прим.пер.), поэтому не судите меня строго. В данной статье я собираюсь объяснить, как писать приложения на 32-х битном ассемблере для маленькой и неприхотливой системы Menuet. Но сначала рассмотрим самое главное:
Что такое MenuetOS?
Это маленька операционная система, которая влезает на дискету и написана полностью на 32-х битном ассемблере, очень быстрая и маленькая (но функциональная) с очень лёгким графическим интерфейсом, не говоря уже о том, что в ней есть текстовый редактор, график процессора и так далее.
Самое интересное в этой оси то, что она отдаётся по лицензии GPL (www.gnu.org), поэтому мы можем посмотреть её код, модифицировать и так далее. Дело в том, что это прекрасная возможность научиться программировать на 32-х битном ассемблере, а затем применить свои знания для более выгодных дел . Официальная страница этой интересной операционной системы располагается по адресу www.menuetos.org, где вы можете посмотреть скриншоты, скачать её, посмотреть FAQ и т.д.
Инсталлируем MenuetOS...
Это самое простое... =), нужно только скачать програмку под названием MSETUP.EXE и установить её под виндами на чистую дискету, после чего загрузиться с неё, и тогда перед вами появится навороченный графический интерфейс (хе-хе-хе).
Чтобы установить MenuetOS под никсами, вам нужно сделать в консоли следующее:
Код (Text):
dd if=MSETUP.EXE of=mfloppy.img ibs=1000 obs=1000 skip=20После этого образ операционной системы окажется в файле mfloppy.img и всё, что остаётся сделать, это скопировать образ на дискету:
Код (Text):
dd if=mfloppy.img of=/dev/fd0и готово.
Достоинством данной OS является то, что не надо ничего модифицировать на своём жёстком диске, потому как всё происходит в оперативной памяти и не надо делать дополнительные партиции, ничего...
Введение в 32-х битный ассемблер
Это краткая выжимка из документации, поставляющейся с Menuet'ом, на тот случай, если вы не знаете английского или не очень хорошо понимаете его. Итак, приступим.
Краткое введение в программирование на ассемблере - 0.02
В ассемблере есть много команд, которые в действительности не являются необходимыми для создания наших программ.
Есть шесть регистров, которые в Menuet можно рассматривать как переменные: eax, ebx, ecx, edx, esi, edi.
Каждый из этих регистров может хранить 32-х битное число.
Сохранить число в регистре можно следующим образом:
Код (Text):
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 ; и можем присвоить значение одного регистра другому...Как вы уже заметили, комментарии можно помещать после ";".
Также мы можем складывать и вычитать:
Код (Text):
add eax,ebx add esi,eax add eax,100 sub ecx,edx sub edx,50 sub edi,0xFТакже мы можем делать умножение и деление - прочтите о командах mul, div, imul, idiv в файле CMD.TXT на дискете с операционной системой (на английском).
Безусловные переходы можно делать так:
Код (Text):
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, у нас уже есть следующие основные функции:
- - Сохранение переменных
- - Изменение переменных
- - Безусловные переходы
- - Условные переходы
Задавать числа можно следующим образом:
Код (Text):
db 0,1,2 ; заданы байты 0,1,2 dw 0,300,65000 ; заданы слова 0,300,65000 dd 1000000 ; задано двойное слово 1000000 ; Строка db 'Здорово, мексиканский народ!' ; Задана ASCII-строка: ; Здорово, мексиканский народВ Menuet системные функции вызываются командой 'int 0x40'.
Например, кнопка на окно помещается следующим образом:
Код (Text):
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 с комментариями (на языке оригинала - прим.пер.) © GnuOwned / RMX#13, пер. Aquila
Создание приложений на ассемблере для Menuet OS
Дата публикации 23 авг 2003