1. Вы находитесь в архивной версии форума xaker.name. Здесь собраны темы с 2007 по 2012 год, большинство инструкций и мануалов уже неактуальны.
    Скрыть объявление

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

Тема в разделе "Assembler", создана пользователем [ABBADON], 1 янв 2007.

  1. [ABBADON]

    [ABBADON] Новичок

    Регистрация:
    29 дек 2006
    Сообщения:
    81
    Симпатии:
    20
    Баллы:
    0
    В данной статье я собираюсь объяснить, как писать приложения на 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'. 
    
    Например, кнопка на окно помещается следующим образом: 
    
    [code]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 и указав имя файла с исходником на ассемблере и файла, который должен получиться.

    автор: GnuOwned
    сайт: wasm.ru
     
    Последнее редактирование: 1 янв 2007
    1 человеку нравится это.

Поделиться этой страницей