Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Сб июн 24, 2017 9:52 am

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 7 сообщений ] 
Автор Сообщение
 Заголовок сообщения: Fasm на Колибри ос для новичков!
СообщениеДобавлено: Пт июл 10, 2009 6:49 am 
Не в сети

Зарегистрирован: Пт июл 10, 2009 6:44 am
Сообщения: 2
Не моглибы дать пример легкой программы в несколько строчек и комментарии к ней, и обьяснить как работает фасм в колибри ос! А то поставил себе эту операционку , а фака по основе нет! Или хотя бы маленькие примеры с обьяснениями в каждой строчке!


Вернуться к началу
 Заголовок сообщения: Re: Fasm на Колибри ос для новичков!
СообщениеДобавлено: Пт июл 10, 2009 8:15 am 
Не в сети
Kernel Optimizer
Аватара пользователя

Зарегистрирован: Пн янв 16, 2006 7:58 pm
Сообщения: 657
viewtopic.php?f=2&t=1082


Вернуться к началу
 Заголовок сообщения: Re: Fasm на Колибри ос для новичков!
СообщениеДобавлено: Пт июл 10, 2009 8:32 am 
Не в сети

Зарегистрирован: Пт июл 10, 2009 6:44 am
Сообщения: 2
Нет, мне нужны очень маленькие примеры, бувально в пару строк с комментариями к каждой строке, а там очень большие программы!


Вернуться к началу
 Заголовок сообщения: Re: Fasm на Колибри ос для новичков!
СообщениеДобавлено: Пт июл 10, 2009 9:16 am 
Не в сети
Аватара пользователя

Зарегистрирован: Вт янв 24, 2006 8:50 am
Сообщения: 249
хм... <Lrz>, дал очень правильную ссылку.. посмотри второе сообщение сверху... там самый минимум программы... с описанием для каждой строчки...
код можно уменьщить за счет макросов.. нон путаницы будет еще больше... так что легче разобраться в том коде...


Вернуться к началу
 Заголовок сообщения: Re: Fasm на Колибри ос для новичков!
СообщениеДобавлено: Пт июл 10, 2009 9:18 am 
Не в сети
Kernel Optimizer
Аватара пользователя

Зарегистрирован: Пн янв 16, 2006 7:58 pm
Сообщения: 657
Нет, там очень маленькие программы, огромные программы это программы от 2 тыс. строк кода и выше.
Программ в 2-4 строчки кода на ассемблере для колибри не существует.


Вернуться к началу
 Заголовок сообщения: Re: Fasm на Колибри ос для новичков!
СообщениеДобавлено: Пт июл 10, 2009 11:36 am 
Не в сети
Аватара пользователя

Зарегистрирован: Пт янв 27, 2006 3:06 pm
Сообщения: 1070
Исправил и подробно разжевал пример по ссылке выше, а вообще, прежде чем что-то рекомендовать новичкам лучше лишний раз убедиться в правильности кода:
Код:
;заголовок приложения (в любой программе для колибри выглядит примерно так)
use32                     ; сообщим фасму, что собираемся использовать 32 битные команды
    org 0x0               ; базовый адрес кода (всегда 0x0)
    db 'MENUET01'         ; идентификатор исполняемого файла Колибри (наследие от предка - MenuetOS - всегда 'MENUET01')
    dd 0x1                ; версия формата заголовка исполняемого файла (всегда 0x1)
    dd start              ; указывает откуда начинается сам код программы
    dd i_end              ; указывает, где этот код заканчивается
    dd i_end              ; объем используемой памяти (здесь объем памяти равен объему кода, потому строка указывает на тот же адрес, что и предыдущая)
    dd i_end+0x100        ; вершина стека (стек растет снизу вверх от указанной величины в сторону данных программы, здесь выбран размер стека 0x100)
    dd 0x0,0x0            ; через запятую: указатель на строку с параметрами и указатель на строку, куда помещается путь к данной программе на диске
                          ; тут вбиты нули - это означает, что мы не отслеживаем в программе эти данные.
;----------------------------------------------------------------------------------------

align 4                   ; выравнивание кода
start:                    ; здесь начинается сама программа
;        mov  eax,40      ; вызов системной функции 40: установить маску для ожидаемых событий (полный список функций см. в sysfuncr.txt описание событий в конце документа)
;        mov  ebx,0x7     ; программа будет реагировать только на события, которые мы разрешим этой функцией.
;        int 0x40         ; По умолчанию ( если эту функцию не вызывать) программе будут приходить сообщения о нажатии кнопки в программе,
                          ; о необходимости перерисовать окно и о нажатии какой-либо клавиши на клавиатуре,
                          ; что достаточно для этой программы, поэтому вызов функции закомментирован)

red_win:                  ; рисуем окно программы
        call draw_window  ; вызов процедуры draw_window (см. ниже)

still:                    ; нарисовали - переходим в основной цикл программы
        mov eax,10        ; функция 10: ждем события, которые мы выше определили функцией 40
        int 0x40
                          ; событие произошло, теперь проверяем, какое именно
        cmp al,0x1        ; если система говорит, что нужно перерисовать окно (изменились его размер или положение)
        jz  red_win       ; перепрыгиваем на процедуру red_win (перерисовываем окно) и ждем события дальше
        cmp al,0x3        ; если была нажата кнопка в программе,
        jz  button        ; то прыгаем на процедуру button

key:                      ; если это и не кнопка и не перерисовка, значит остается одно - клавиша на клавиатуре
        mov  eax,2        ; функция 2: считываем код нажатой клавиши и забываем, потому как мы не используем клавиатуру в этой программе
        int  0x40
        jmp still         ; сделали свое дело и опять возвращаемся в основной цикл программы и ждем событий

button:                   ; процедура обрабоки кнопок в программе
        mov eax,17        ; функция 17: получить номер нажатой кнопки
        int  0x40
        shr  eax,8        ; сдвигаем регистр eax на 8 бит вправо, чтобы получить номер нажатой кнопки

        cmp eax,1
        jne  no_exit      ; если это не кнопка 1 (зарезервирована системой как кнопка закрытия программы), пропускаем 2 следующие строчки кода

        or   eax,-1       ;(равносильно команде mov eax,-1, но более оптимально - функция -1: завершение программы)
        int  0x40

 no_exit:                  ; и переходим сюда, где проверяем, какая же все таки кнопка была нажата (в этой программе других кнопок нет,
        jmp  still        ; поэтому возвращаемся в основной цикл программы и опять ждем событий)

draw_window:              ; процедура отрисовки окна приложения
        mov eax,12        ; функция 12,
        mov ebx,1         ; подфункция 1: сообщить системе, что мы хотим нарисовать окно
        int 0x40

       xor  eax,eax             ; обнуляет регистр eax (по сути - то же, что и mov eax,0, но более оптимально) - функция 0: нарисовать окно
       mov  ebx,50*65536+180    ; [координата окна по оси x]*65536 + [размер по оси x]
       mov  ecx,30*65536+100    ; [координата по оси y]*65536 + [размер по оси y]
       mov  edx,0x33AABBCC      ; цвет рабочей области окна RRGGBB, первые 2 цифры (33) определяют тип и параметры окна,
                                ; тут - 3 тип (окно со скином изменяемого размера) и координнаты окна отсчитываются он клиентской области
       mov  edi,hed             ; заголовок программы
       int 0x40
       
; здесь рисуются все основные элементы программы, если они есть, в нашем случае это просто пустое окно

       mov eax,12          ; функция 12,
       mov ebx,2           ; подфункция 2 - сообщить системе, что мы закончили отрисовку окна.
       int 0x40
    ret

hed db 'Hello World',0     ; название программы

i_end:


Последний раз редактировалось Heavyiron Вт июл 14, 2009 12:38 pm, всего редактировалось 1 раз.

Вернуться к началу
 Заголовок сообщения: Re: Fasm на Колибри ос для новичков!
СообщениеДобавлено: Вт июл 14, 2009 8:32 am 
Не в сети

Зарегистрирован: Пн мар 27, 2006 6:33 am
Сообщения: 526
gost6678 писал(а):
Нет, мне нужны очень маленькие примеры, бувально в пару строк с комментариями к каждой строке, а там очень большие программы!


Возможно полезная ссылка на ресурсы по asm на sourceforge

P.S. Есть ли отдельный топик где собраны ресурсы по asm?

Кто нибудь пробовал решить задачу создания конвертилки:
например: Asm -> Си
( или в какой нибудь высокоуровневый мнемокод? )
Это могло бы помочь лучше контролировать структуру Asm кода.
Возможно было бы и обратное однозначное преобразование.
Есть коммерческий продукт Relogix созданный для преобразования Asm в С.

Могу сделать простую конвертилку Asm -> блок схема ( результат в dot форме )
Вложение:
sci.dot.jpg
sci.dot.jpg [ 185.63 КБ | 5156 просмотров ]
Вложение:
sciex.txt [1.9 КБ]
193 скачивания


Вложения:
sci_dot.txt [4.43 КБ]
189 скачиваний
Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 7 сообщений ] 

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB