Начинающий
-
ИМХО если ассемблер изучать первым - на другие языки появлется трезвый взгляд, понимаеш откуда ноги растут (ну если не смотреть на языки сверх высокого уровня).
Ассемблер не сложнее других языков, просто он не для ленивых, так как не содержит вторичного иструментария, всё ручками надо писать... но и такой мощности у других языков нет, если не пользоваться вставками, опять - таки на Асме... кроме того, он заставляет изучать железо компа, принцип его работы, что, позволяет писать эффективнее, и лучше... но немного, дольше...
*****:
;дух машины, мой бубен сильнее твоей тупости
*****:
;дух машины, мой бубен сильнее твоей тупости
*****:
Можно как-то без лишних телодвижений организовать OnMouseDown на какой-то кнопке? Сейчас это происходить проверкой координат и нажата ли левая клавиша мыши (что громоздко и неудобно).
- Attachments
-
-
gui.zip (11.99 KiB)
- Хорошо сделано, но в сырцах я ничё не понял. Положить в /sys/gui/
Downloaded 259 times
-
Из хаоса в космос
Кирилл, подробности нужны
Запускать чего-то без понимания, чего следует ожидать, и класть 100К туда, где нет места - не наш метод ведь
Запускать чего-то без понимания, чего следует ожидать, и класть 100К туда, где нет места - не наш метод ведь
Нет, нельзя. Только отслеживая события от мыши и при каждом чихе проверяя координаты и клавиши мыши.Leency wrote:Можно как-то без лишних телодвижений организовать OnMouseDown на какой-то кнопке? Сейчас это происходит проверкой координат и нажата ли левая клавиша мыши (что громоздко и неудобно).
Ушёл к умным, знающим и культурным людям.
Я так и думал... а жаль, т.к. код кнопки прокрутки вверх такой (реагирует на MouseDown):
А код кнопки "Close" в окне Эбаута такой (реагирует на MouseUp + проверяет над кнопкой ли это произошло):
У меня только одна идея о том, как не писать для каждой кнопки столько кода: при создании FlatButton её координаты записывать в массив и при нажатии лкм в цикле проверять координаты не было ли нажатие над какой-то из кнопок.
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);
}
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);}
Из хаоса в космос
anton_obuhov wrote:Здраствуйте уважаемые кодеры и кодерши, я только начинаю осваивать Ассемблер и начинаю делать программы маленькие типа Hello Word!
вот собственно код программыПерепишите его под колибри чтобы я разу понял в чем отличие между данным кодом и таким же кодом под KolibriOSCode: 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 если такое возможно, если можно по пунктам
ЕСЛИ КОНЕЧНО ВАМ НЕ ТРУДНО!!!
Если я неправильно изложил идею напишите в ЛС
Перед изучением ассемблера необходимо ознакомится с структурой и принципом работы процессора.
Для перехода на написание собственных ОС необходимо изучить программирование (на ассемблере) в защищенном режиме.Любая прога для защищенного режима уже несет начальныен навыки для написания многозадачной ОС.пратически в любой книге по ассемблеру содержится раздел посвященный защищенному режиму.
Я крут, я нашел МегаБаг!<Lrz> wrote:Code: Select all
align16
Пробел пробелали.
Кстати, код отсюда http://diamondz.land.ru/hll/hll.htm (параграф про fasm) fasnw отказался компилить. Грит, Illegal instruction" MEOS_APP_START . Пытался указать абсолютный путь к macros.inc, та же песня.
Я, конечно, тот еще спец...
Flinta
Только что попробовал.
fasm пишет вот что:
Суть происходящего в том, что в файле macros.inc присутствует определение макроса header. В строке "header db 'HelloWorld test',0" fasm думает, что header - это макрос, а на самом деле это имя.
Решение: в компилируемом файле все header заменить на любое другое свободное имя, например head, и вуаля!
Только что попробовал.
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.
Решение: в компилируемом файле все header заменить на любое другое свободное имя, например head, и вуаля!
a
purge header
нельзя? или макрос реально нужен?
purge header
нельзя? или макрос реально нужен?
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!
"...или так."
Можно конечно. Надо запомнить
Можно конечно. Надо запомнить
Короче вызов производится через int 40 hanton_obuhov wrote:А и кстати опишите процесс написания такой же программы прямо в KolibriOS если такое возможно, если можно по пунктам
ЕСЛИ КОНЕЧНО ВАМ НЕ ТРУДНО!!!
Если я неправильно изложил идею напишите в ЛС
Перед вызовом следует указать в eax номер системной функции.
Многие функции требуют задания параметров. Параметры передаются в других регистрах (ebx,ecx,edx и т.д.) Число и тип параметров указаны в документации на каждую функцию.
Многие системные функции возвращают результат работы в регистре eax, а некоторые устанавливают и другие регистры. Наличие/отсутствие возвращаемого значения указано в документации на каждую функцию.
Все регистры, кроме тех, в которых возвращается значение, сохраняются. (Включая регистр флагов eflags).
http://www.kolibrios.org/?p=Documentati ... mFunctions найди нужную и вставть соответствующие параметры.Эти фунции типа как API для windows.Думаю все понятно.
Кто нибудь переводил СИшный код ассемблер? Есть примеры в сырце КОС? Если есть скажите пожалуйста как зовут программу. И ссылочку на СИшный вариант дайте пожалуйста. А то что-то у меня не получается толком переводить. Асобенно с & и * проблемы.
Вот например:
Typedef struct MyStruct
{int x
int y}
void MyProc (MyStruct* MyS) //объявляется так
{....}
....
MyProc (&My1)// вызывается так
это значит что переменная My1 после выполнения процедуры изменится, так?
Вот например:
Typedef struct MyStruct
{int x
int y}
void MyProc (MyStruct* MyS) //объявляется так
{....}
....
MyProc (&My1)// вызывается так
это значит что переменная My1 после выполнения процедуры изменится, так?
Изменится. При вызове MyProc (&My1) процедуре передаётся адрес структуры My1, с которым и работает процедура. Если объявить не void MyProc (MyStruct* MyS), а void MyProc (MyStruct MyS), то компилятор создаст локальную область размером sizeof(MyStruct) и при вызове MyProc (My1) скопирует в неё значения из My1. Структура My1 при этом не изменится (если, конечно, My1 не глобальная переменная). Хотя и это является спорным вопросом - многое зависит от компилятора. Передавать глобальные переменные таким образом считается плохим тоном, к тому же если переменная глобальная, то лучше писать ::My1.Yaskhan wrote:переменная My1 после выполнения процедуры изменится, так?
Значит в ассемблерном варианте эта процедура должна возвращать знаение в какомто регистре? Или както по другому?
Дайте лучше примерчик перевода в КОС пожалуйста!
Дайте лучше примерчик перевода в КОС пожалуйста!
Who is online
Users browsing this forum: Ahrefs [Bot] and 10 guests