Page 3 of 12

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

Posted: Sat Dec 06, 2008 9:27 pm
by Ghost
ИМХО если ассемблер изучать первым - на другие языки появлется трезвый взгляд, понимаеш откуда ноги растут (ну если не смотреть на языки сверх высокого уровня).

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

Posted: Sun Dec 07, 2008 9:10 pm
by ДедОк
Ассемблер не сложнее других языков, просто он не для ленивых, так как не содержит вторичного иструментария, всё ручками надо писать... но и такой мощности у других языков нет, если не пользоваться вставками, опять - таки на Асме... кроме того, он заставляет изучать железо компа, принцип его работы, что, позволяет писать эффективнее, и лучше... но немного, дольше... :D

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

Posted: Mon Dec 15, 2008 2:23 pm
by Leency
Можно как-то без лишних телодвижений организовать OnMouseDown на какой-то кнопке? Сейчас это происходить проверкой координат и нажата ли левая клавиша мыши (что громоздко и неудобно).

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

Posted: Tue Dec 16, 2008 10:25 am
by Galkov
Кирилл, подробности нужны
Запускать чего-то без понимания, чего следует ожидать, и класть 100К туда, где нет места - не наш метод ведь :)

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

Posted: Tue Dec 16, 2008 11:38 am
by diamond
Leency wrote:Можно как-то без лишних телодвижений организовать OnMouseDown на какой-то кнопке? Сейчас это происходит проверкой координат и нажата ли левая клавиша мыши (что громоздко и неудобно).
Нет, нельзя. Только отслеживая события от мыши и при каждом чихе проверяя координаты и клавиши мыши.

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

Posted: Tue Dec 16, 2008 2:32 pm
by Leency
Я так и думал... а жаль, т.к. код кнопки прокрутки вверх такой (реагирует на MouseDown):

Code: Select all

					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: Select all

		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 её координаты записывать в массив и при нажатии лкм в цикле проверять координаты не было ли нажатие над какой-то из кнопок.

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

Posted: Thu Feb 19, 2009 3:38 pm
by muclear
anton_obuhov wrote:Здраствуйте уважаемые кодеры и кодерши, я только начинаю осваивать Ассемблер и начинаю делать программы маленькие типа 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: Sat Mar 21, 2009 8:17 pm
by Flinta
<Lrz> wrote:

Code: Select all

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

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

Posted: Tue Apr 21, 2009 2:04 pm
by Insolor
Flinta
Только что попробовал.
fasm пишет вот что:

Code: Select all

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, и вуаля!

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

Posted: Tue Apr 21, 2009 8:22 pm
by Gluk
a

purge header

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

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

Posted: Tue Apr 21, 2009 8:51 pm
by Insolor
"...или так."
Можно конечно. Надо запомнить :)

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

Posted: Wed Jun 24, 2009 12:26 pm
by muclear
anton_obuhov wrote:А и кстати опишите процесс написания такой же программы прямо в KolibriOS если такое возможно, если можно по пунктам

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

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

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

Posted: Tue Aug 25, 2009 1:10 pm
by Yaskhan
Кто нибудь переводил СИшный код ассемблер? Есть примеры в сырце КОС? Если есть скажите пожалуйста как зовут программу. И ссылочку на СИшный вариант дайте пожалуйста. А то что-то у меня не получается толком переводить. Асобенно с & и * проблемы.

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

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

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

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

Posted: Tue Aug 25, 2009 1:18 pm
by Albom
Yaskhan wrote:переменная My1 после выполнения процедуры изменится, так?
Изменится. При вызове MyProc (&My1) процедуре передаётся адрес структуры My1, с которым и работает процедура. Если объявить не void MyProc (MyStruct* MyS), а void MyProc (MyStruct MyS), то компилятор создаст локальную область размером sizeof(MyStruct) и при вызове MyProc (My1) скопирует в неё значения из My1. Структура My1 при этом не изменится (если, конечно, My1 не глобальная переменная). Хотя и это является спорным вопросом - многое зависит от компилятора. Передавать глобальные переменные таким образом считается плохим тоном, к тому же если переменная глобальная, то лучше писать ::My1.

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

Posted: Tue Aug 25, 2009 1:23 pm
by Yaskhan
Значит в ассемблерном варианте эта процедура должна возвращать знаение в какомто регистре? Или както по другому?
Дайте лучше примерчик перевода в КОС пожалуйста!