Page 1 of 12

Начинающий

Posted: Sun Jun 22, 2008 1:59 pm
by anton_obuhov
Здраствуйте уважаемые кодеры и кодерши, я только начинаю осваивать Ассемблер и начинаю делать программы маленькие типа Hello Word!
вот собственно код программы

Code: Select all

CSEG segment
 org 100h

begin:

   mov ah, 9
   mov dx, offset message

   int 21h

   int 20h

  message db 'Hello world!$'

CSEG ends

end Begin
Перепишите его под колибри чтобы я разу понял в чем отличие между данным кодом и таким же кодом под KolibriOS

А и кстати опишите процесс написания такой же программы прямо в KolibriOS если такое возможно, если можно по пунктам

ЕСЛИ КОНЕЧНО ВАМ НЕ ТРУДНО!!!
Если я неправильно изложил идею напишите в ЛС

Re: Начинающий

Posted: Sun Jun 22, 2008 3:47 pm
by <Lrz>
1. посмотри эту тему. viewtopic.php?f=9&t=426
2. В большинстве случаев разрабтка программ для Коос ведется из под виндовс, т.к. это удобно, в коос не так развит сервис. Нет некоторых возможностей, которые есть в виндовс. После отладки программы на эмуляторе, окончательная проверка на реальной системе.
3. поставсь себе svn клиент http://kolibrios.org:3000/i-want-svn , далее путь programms\develop\examples\ или так http://www.kolibrios.org/?p=SVN&kind=di ... p/examples
тут располжены примеры простых программа под коос на подобии Hello World. Обучаться ты должен самостоятельно посмотри примеры программ в этой папке.

Code: Select all

;заголовок приложения
use32                      ; транслятор, использующий 32 разрядных команды
    org 0x0                ; базовый адрес кода, всегда 0x0
    db 'MENUET01'       ; идентификатор исполняемого файла (8 байт)
    dd 0x1           ; версия формата заголовка исполняемого файла
    dd start         ; адрес, на который система передаёт управление
                       ; после загрузки приложения в память
    dd i_end        ; размер приложения
    dd i_end        ; Объем используемой памяти, для стека отведем 0х100 байт 
    dd i_end+0x100 ; расположим позицию стека в области памяти, сразу за телом программы. Вершина стека в диапазоне памяти, указанном выше
    dd 0x0,0x0                ; указатель на строку с параметрами.
                 ;    если после запуска неравно нулю, приложение было
                 ;    запущено с параметрами из командной строки

                 ;    указатель на строку, в которую записан путь,
                 ;    откуда запущено приложение
;Область кода
align 4
start:                          ;Точка входа в программу
        mov  eax,40          ;установить маску для ожидаемых событий
        mov  ebx,0x25        ;система будет реагировать только на сообщение о перерисовке,нажата кнопка, определённая ранее, событие от мыши (что-то случилось - нажатие на кнопку мыши или перемещение; сбрасывается при прочтении)
        int 0x40
red_win:
        call draw_window     ;первоначально необходимо нарисовать окно
still:                       ;основной обработчик 
        mov  eax,10          ;Ожидать события
        int 0x40            ;ожидать событие в течение 2 миллисекунд
  
        cmp al,0x1    ;если изменилось положение окна
        jz  red_win
        cmp al,0x3    ;если нажата кнопка то перейти
        jz  button
        jmp still    ;если ничего из перечисленного то снова в цикл
button:
         or eax,-1       ;в eax,-1 - 5 ,байтов у нас же только 3  выйти 
         int 0x40         ;далее выполняется выход из программы

draw_window:                ;рисование окна приложения
    mov eax,12                ;в регистр внести значение = 12
    mov ebx,1                 ;присвоить 1
    int 0x40

    xor  eax,eax              ;обнулить eax
    mov  ebx,50*65536+180     ;[координата по оси x]*65536 + [размер по оси x]
    mov  ecx,30*65536+100     ;[координата по оси y]*65536 + [размер по оси y]
    mov  edx,0xb3AABBCC        ; color of work area RRGGBB,8->color gl
    mov  edi,hed
    int 0x40                 ;нарисовать окно приложения
       
    mov eax,12                ;Функция 12 - начать/закончить перерисовку окна.
    mov ebx,2                 ;Подфункция 2 - закончить перерисовку окна.
    int 0x40
    ret

hed db 'Hello World',0        ;заголовок приложения
align 16
rb 0x100 ; резерв памяти для стека.
i_end:

Re: Начинающий

Posted: Sun Jun 22, 2008 4:11 pm
by anton_obuhov
Могу ли я писать на асме ,а потом чтобы кто нибудь эту программу ну точнее код портировал на операционную систему колибри, если возможно можно аську или мыло данного человека, Просто понимаете нет документации по созданию пограмм для колибри ,так как я посмотрел самый простой пример создание сообщение Hello Word ,код был раза в 4 больше моего если кто может взятся и объеснить начинающему по какому принципу строится программа на ассемблере в данной операционной системе и попросту объяснить основы то я буду очень блвгодарен

Re: Начинающий

Posted: Sun Jun 22, 2008 5:17 pm
by <Lrz>
Я вижу некоторое недопонимание...
Самое лучше образование - это самообразование.Тут ни кто не будет учить тебя, строить с тобой уроки, разбирать что-либо. Т.к. все как правило работают или учаться, и просто не до тебя. Итак, тебе нужно найти самоучитель для Доса, и поразбираться с ним на ассемблере. там все чуть проще. Может для этих целей подойти книжка по ассмеблеру Калашникова (была замечена тут http://www.cwer.ru/assembler_eto_prosto ). после того как ты освоишь 30 уроков от самого 0 до написания оболочки аля нортон коммандер, тебе многие вещи станут более понятны... ;)

Re: Начинающий

Posted: Sun Jun 22, 2008 5:21 pm
by Leency
Ассемблер хорошо, а Си-- тоже неплохо :)
Там всё куда проще. Если интересно, брать тут download/file.php?id=242
Там с примерами и маньюалом.

Re: Начинающий

Posted: Sun Jun 22, 2008 10:21 pm
by ДедОк
никогда не пробовал писать под Виндой, пишу свой код исключительно в Колибри...
Автор, код длиннее, потому, что в Досе, ты только выводишь функцией стоку на экран, а тут ты ещё и рисуешь окно, формируешь поток, определяешь реакцию проги на мышь, клаву, и проч... оживляешь кнопку с крестиком..;) сам код вывода текста на экран помещается в одну строчку кода всего, и при , этом обладает намного большей функциональностью, чем досовский код... стукни в Асю, вечерами иногда там бываю, поговорим...:)

Re: Начинающий

Posted: Wed Jun 25, 2008 3:08 pm
by Ghost

Code: Select all

include 'macros.inc'
include 'debug.inc'
MEOS_APP_START
CODE
   print 'Hello world!'
   mcall -1
DATA
UDATA
MEOS_APP_END
Ребята, не сбивайте человека полумерками, ассемблер - отлично, C/C++ - хорошо, C-- только людей пугать.

Re: Начинающий

Posted: Tue Nov 18, 2008 2:17 am
by IgorA
После просмотра программ: checkbox, radiobutton, editbox мне пришла идея создавать коды для этих (и возможно других) элементов управления, используя графический интерфейс.
Я пишу программу на BC++5.02 (извините за старье) для Win. Эта программа создает fasm код для Kolibri (на основе ранее введенных кусков кода, но некоторые части генерируются автоматом).
Возможно мне будет нужна помощь. Если кому интересно пишите (исходники пока не ложу в связи с сыростью програмки).
Привожу экран программы, пока ели как генерируется код для элементов check_box:

Re: Начинающий

Posted: Tue Nov 18, 2008 9:37 am
by <Lrz>
Если по компонентам, то это скорее всего ко мне )). А какие компоненты еще существуют у тебя? Можно более подробно?

Re: Начинающий

Posted: Tue Nov 18, 2008 10:37 am
by Veliant
тоже когда то делал контролы...TButton, TCheckBox, TProgressBar, TRadioButton, TStatusBar и малые зачатки TWebBrowser

Re: Начинающий

Posted: Tue Nov 18, 2008 12:13 pm
by IgorA
<Lrz>
А какие компоненты еще существуют у тебя? Можно более подробно?
Существует пока только check_box, но в ближайшее время хочу добавить edit и option.
Идея программы такова: есть разные блоки (текстовые, блоки элементов, структур, переменных, ...). Из этих блоков создается как-бы макет программки. При запуске можно редактировать этот макет (добавлять, удалять контролы, менять их свойства ...). Потом каждый блок по своим правилам обрабатывается и в результате получается рабочий код программы.
Т. е. получается что-то наподобие AppExpert (для BC++) или MFC AppWizard (VC++). А дальше программист сам дописывает нужные ему действия, и тут связь файлов *.asm с моей программой прерывается.
Veliant
Очень интересно будет посмотреть твои примеры, может их я тоже когда-нибудь добавлю к себе. (А пока программа находиться на начальной стадии разработки и про включение многих элементов речь пока не идет)

Re: Начинающий

Posted: Tue Nov 18, 2008 12:19 pm
by tsdima
IgorA wrote:Идея программы такова: есть разные блоки (текстовые, блоки элементов, структур, переменных, ...). Из этих блоков создается как-бы макет программки. При запуске можно редактировать этот макет (добавлять, удалять контролы, менять их свойства ...). Потом каждый блок по своим правилам обрабатывается и в результате получается рабочий код программы.
Очень похоже на то, как это делается в HiAsm (прошу не считать это рекламой, хотя и выглядит именно так) :)
Может объеденим усилия?

Re: Начинающий

Posted: Tue Nov 18, 2008 12:45 pm
by <Lrz>
Все компоненты включены в библиотеку box_lib.obj, как я понял, ей уже присвоен статус системной, т.е. имеет смысл сделать поддержку библиотеки, и работать в дальнейшем с ней. А вообще, что-то подобное в свое время писал мистификатор, нужно поднять ссылки, у него была программа Denvy на Delphi написана /* поправьте меня если я ошибся с названием */.

Re: Начинающий

Posted: Tue Nov 18, 2008 5:12 pm
by s1n
<Lrz>,
ты прав... но там вроде альфа(или бета) версия... мистификатор пропал...

тут забирать: Denvy.7z
тема: viewtopic.php?f=9&t=352

Re: Начинающий

Posted: Tue Nov 18, 2008 6:44 pm
by IgorA
s1n
посмотрел ту программку, что-то похожее делаю и я
компоненты включены в библиотеку box_lib.obj
если что-то будет включено в систему, то я его включу
Выдам пробный экземпляр моей программки: