Board.KolibriOS.org

Official KolibriOS board
It is currently Wed Jan 27, 2021 2:29 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 166 posts ]  Go to page Previous 1 2 3 4 512 Next
Author Message
 Post subject: Re: Начинающий
PostPosted: Sat Dec 06, 2008 9:27 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Mar 20, 2006 10:44 am
Posts: 558
ИМХО если ассемблер изучать первым - на другие языки появлется трезвый взгляд, понимаеш откуда ноги растут (ну если не смотреть на языки сверх высокого уровня).


Top
   
 Post subject: Re: Начинающий
PostPosted: Sun Dec 07, 2008 9:10 pm 
Offline
User avatar

Joined: Thu Mar 29, 2007 3:02 am
Posts: 249
Ассемблер не сложнее других языков, просто он не для ленивых, так как не содержит вторичного иструментария, всё ручками надо писать... но и такой мощности у других языков нет, если не пользоваться вставками, опять - таки на Асме... кроме того, он заставляет изучать железо компа, принцип его работы, что, позволяет писать эффективнее, и лучше... но немного, дольше... :D

_________________
*****:
;дух машины, мой бубен сильнее твоей тупости

*****:


Top
   
 Post subject: Re: Начинающий
PostPosted: Mon Dec 15, 2008 2:23 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5387
Можно как-то без лишних телодвижений организовать OnMouseDown на какой-то кнопке? Сейчас это происходить проверкой координат и нажата ли левая клавиша мыши (что громоздко и неудобно).


Attachments:
File comment: Хорошо сделано, но в сырцах я ничё не понял. Положить в /sys/gui/
gui.zip [11.99 KiB]
Downloaded 172 times

_________________
Звиздеть не мешки ворочать
Top
   
 Post subject: Re: Начинающий
PostPosted: Tue Dec 16, 2008 10:25 am 
Offline

Joined: Fri Nov 21, 2008 8:16 am
Posts: 180
Кирилл, подробности нужны
Запускать чего-то без понимания, чего следует ожидать, и класть 100К туда, где нет места - не наш метод ведь :)


Top
   
 Post subject: Re: Начинающий
PostPosted: Tue Dec 16, 2008 11:38 am 
Offline
Kernel Developer
User avatar

Joined: Mon Nov 28, 2005 8:00 pm
Posts: 1600
Leency wrote:
Можно как-то без лишних телодвижений организовать OnMouseDown на какой-то кнопке? Сейчас это происходит проверкой координат и нажата ли левая клавиша мыши (что громоздко и неудобно).

Нет, нельзя. Только отслеживая события от мыши и при каждом чихе проверяя координаты и клавиши мыши.

_________________
Ушёл к умным, знающим и культурным людям.


Top
   
 Post subject: Re: Начинающий
PostPosted: Tue Dec 16, 2008 2:32 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5387
Я так и думал... а жаль, т.к. код кнопки прокрутки вверх такой (реагирует на MouseDown):
Code:
               if (m.x>=Form.width-21) && (m.x<=Form.width-6) && (m.y>40) && (m.y<57)
               {
                  IF (m.lkm==1) DrawRegion_3D(onLeft(21,0),41,14,14,0xC7C7C7,0xFFFFFF);
                  while (m.lkm==1) && (za_kadrom>0)
                  {
                     Pause(10);
                     za_kadrom--;
                     List_ReDraw();
                     m.get();
                  }
                  DrawRegion_3D(onLeft(21,0),41,14,14,0xFFFFFF,0xC7C7C7);
               }

А код кнопки "Close" в окне Эбаута такой (реагирует на MouseUp + проверяет над кнопкой ли это произошло):
Code:
      IF (mm.x>90) && (mm.x<90+70) && (mm.y>190) && (mm.y<190+22)
      IF (mm.lkm) {DrawRegion_3D(91,191,68,20,0xC7C7C7,0xFFFFFF); letitclose=1;}
      ELSE {IF (letitclose) {DrawRegion_3D(91,191,68,20,0xFFFFFF,0xC7C7C7); Pause(7); ExitProcess();}}
      ELSE IF (letitclose) {letitclose=0; DrawRegion_3D(91,191,68,20,0xFFFFFF,0xC7C7C7);}

У меня только одна идея о том, как не писать для каждой кнопки столько кода: при создании FlatButton её координаты записывать в массив и при нажатии лкм в цикле проверять координаты не было ли нажатие над какой-то из кнопок.

_________________
Звиздеть не мешки ворочать


Top
   
 Post subject: Re: Начинающий
PostPosted: Thu Feb 19, 2009 3:38 pm 
Offline

Joined: Thu Feb 19, 2009 1:03 pm
Posts: 2
anton_obuhov wrote:
Здраствуйте уважаемые кодеры и кодерши, я только начинаю осваивать Ассемблер и начинаю делать программы маленькие типа Hello Word!
вот собственно код программы
Code:
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 если такое возможно, если можно по пунктам

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



Перед изучением ассемблера необходимо ознакомится с структурой и принципом работы процессора.
Для перехода на написание собственных ОС необходимо изучить программирование (на ассемблере) в защищенном режиме.Любая прога для защищенного режима уже несет начальныен навыки для написания многозадачной ОС.пратически в любой книге по ассемблеру содержится раздел посвященный защищенному режиму.


Top
   
 Post subject: Re: Начинающий
PostPosted: Sat Mar 21, 2009 8:17 pm 
Offline

Joined: Wed Mar 18, 2009 10:52 pm
Posts: 9
<Lrz> wrote:

Code:
align16

Я крут, я нашел МегаБаг! :lol:
Пробел пробелали.
Кстати, код отсюда http://diamondz.land.ru/hll/hll.htm (параграф про fasm) fasnw отказался компилить. Грит, Illegal instruction" MEOS_APP_START . Пытался указать абсолютный путь к macros.inc, та же песня.
Я, конечно, тот еще спец...


Top
   
 Post subject: Re: Начинающий
PostPosted: Tue Apr 21, 2009 2:04 pm 
Offline

Joined: Thu Feb 19, 2009 12:57 pm
Posts: 68
Flinta
Только что попробовал.
fasm пишет вот что:
Code:
flat assembler  version 1.67.38  (1247114 kilobytes memory)
test.asm [29]:
header  db      'HelloWorld test',0
c:/fasm/kolibri_sdk/macros.inc [327] header [4]:
  db 'MENUET',a
error: invalid argument.

Суть происходящего в том, что в файле macros.inc присутствует определение макроса header. В строке "header db 'HelloWorld test',0" fasm думает, что header - это макрос, а на самом деле это имя.
Решение: в компилируемом файле все header заменить на любое другое свободное имя, например head, и вуаля!


Top
   
 Post subject: Re: Начинающий
PostPosted: Tue Apr 21, 2009 8:22 pm 
Offline
User avatar

Joined: Mon Apr 16, 2007 6:38 pm
Posts: 1222
a

purge header

нельзя? или макрос реально нужен?

_________________
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!


Top
   
 Post subject: Re: Начинающий
PostPosted: Tue Apr 21, 2009 8:51 pm 
Offline

Joined: Thu Feb 19, 2009 12:57 pm
Posts: 68
"...или так."
Можно конечно. Надо запомнить :)


Top
   
 Post subject: Re: Начинающий
PostPosted: Wed Jun 24, 2009 12:26 pm 
Offline

Joined: Thu Feb 19, 2009 1:03 pm
Posts: 2
anton_obuhov wrote:
А и кстати опишите процесс написания такой же программы прямо в KolibriOS если такое возможно, если можно по пунктам

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

Короче вызов производится через int 40 h

Перед вызовом следует указать в eax номер системной функции.
Многие функции требуют задания параметров. Параметры передаются в других регистрах (ebx,ecx,edx и т.д.) Число и тип параметров указаны в документации на каждую функцию.
Многие системные функции возвращают результат работы в регистре eax, а некоторые устанавливают и другие регистры. Наличие/отсутствие возвращаемого значения указано в документации на каждую функцию.
Все регистры, кроме тех, в которых возвращается значение, сохраняются. (Включая регистр флагов eflags).
http://www.kolibrios.org/?p=Documentati ... mFunctions найди нужную и вставть соответствующие параметры.Эти фунции типа как API для windows.Думаю все понятно.


Top
   
 Post subject: Re: Начинающий
PostPosted: Tue Aug 25, 2009 1:10 pm 
Offline

Joined: Tue Apr 14, 2009 7:33 am
Posts: 83
Кто нибудь переводил СИшный код ассемблер? Есть примеры в сырце КОС? Если есть скажите пожалуйста как зовут программу. И ссылочку на СИшный вариант дайте пожалуйста. А то что-то у меня не получается толком переводить. Асобенно с & и * проблемы.

Вот например:
Typedef struct MyStruct
{int x
int y}

void MyProc (MyStruct* MyS) //объявляется так
{....}

....
MyProc (&My1)// вызывается так
это значит что переменная My1 после выполнения процедуры изменится, так?


Top
   
 Post subject: Re: Начинающий
PostPosted: Tue Aug 25, 2009 1:18 pm 
Offline
Mentor
User avatar

Joined: Tue Jan 15, 2008 11:27 am
Posts: 756
Yaskhan wrote:
переменная My1 после выполнения процедуры изменится, так?

Изменится. При вызове MyProc (&My1) процедуре передаётся адрес структуры My1, с которым и работает процедура. Если объявить не void MyProc (MyStruct* MyS), а void MyProc (MyStruct MyS), то компилятор создаст локальную область размером sizeof(MyStruct) и при вызове MyProc (My1) скопирует в неё значения из My1. Структура My1 при этом не изменится (если, конечно, My1 не глобальная переменная). Хотя и это является спорным вопросом - многое зависит от компилятора. Передавать глобальные переменные таким образом считается плохим тоном, к тому же если переменная глобальная, то лучше писать ::My1.


Top
   
 Post subject: Re: Начинающий
PostPosted: Tue Aug 25, 2009 1:23 pm 
Offline

Joined: Tue Apr 14, 2009 7:33 am
Posts: 83
Значит в ассемблерном варианте эта процедура должна возвращать знаение в какомто регистре? Или както по другому?
Дайте лучше примерчик перевода в КОС пожалуйста!


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 166 posts ]  Go to page Previous 1 2 3 4 512 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited