Board.KolibriOS.org

Official KolibriOS board
It is currently Wed Jul 28, 2021 4:58 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 429 posts ]  Go to page Previous 1 2 3 4 529 Next
Author Message
 Post subject: Re: Вопрос
PostPosted: Sun Nov 15, 2015 10:33 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1282
Наверно, лучше всего в чате.
Тебя интересовало "полное и чёткое описание команд х86 и описанием влияния каждой команды на флаги процессора", вот оно в конце той книги. В остальном согласен, в учебниках для вузов хрен что поймёшь, тут лучше самоучители вроде "ассемблер это просто".
В принципе, в ассемблере нет массивов, скорее море памяти в котором ты раставляешь буйки.


Top
   
 Post subject: Re: Вопрос
PostPosted: Sun Nov 15, 2015 11:50 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
Мне нужен конкретный простой пример, как именно это делается на фасм
ну я знаю что в асме доступаться можно вот вроде так
mov [eax], eax ну или mov [Label1], eax при этом в eax должен быть адрес метки или метка Label1 должна указывать на массив?! А как масив размечать то ?
DB $00, $00, $00..... так что ли ?! Ну компилятор жалуется.... в точности не помню в каком моменте... но я подумал, что из-за того что DB считается как константы и на их место записывать данные нельзя.
В общем, мне хотелось бы увидеть простой и конкретный пример для Фасм, где разметка масива и способ обращения (чтения и записи в масив)


Top
   
 Post subject: Re: Вопрос
PostPosted: Mon Nov 16, 2015 12:40 am 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
ИЗ ЧАТА (чтобы не затерялось):

ALEXS1983 « Пн ноя 16, 2015 12:37 am » pavelyakov: А доступ к рамДиску достаточно быстрый ? если мне нужно будет сотни тысяч байт для прорисовки экрана несколько (50) раз в секунду ?
ALEXS1983 « Пн ноя 16, 2015 12:36 am » pavelyakov: а что если мне нужны масивы в килобайты и мегабайты, такое в КОС можно ? Через РамДиск что ли ?
ALEXS1983 « Пн ноя 16, 2015 12:35 am » pavelyakov: arr: buffer db 255 , ага работает, вот только не пойму а чего ограничение только 255 ?
pavelyakov « Пн ноя 16, 2015 12:31 am » ALEXS1983: можно попробовать arr: buffer db 64, т.е. зарезервировать 64 db
pavelyakov « Пн ноя 16, 2015 12:22 am » $00 это константа для компилятора
pavelyakov « Пн ноя 16, 2015 12:20 am » ALEXS1983: знак вопроса вместо db $00


Top
   
 Post subject: Re: Вопрос
PostPosted: Mon Nov 16, 2015 6:21 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
Кто нибудь может мне описать вот это:
============== Функция 0 - определить и нарисовать окно. =============
......
* edx = 0xXYRRGGBB, где:
* Y = стиль окна:
* Y=0 - тип I - окно фиксированных размеров
* Y=1 - только определить область окна, ничего не рисовать
* Y=2 - тип II - окно изменяемых размеров
* Y=3 - окно со скином
* Y=4 - окно со скином фиксированных размеров
......
человеческим языком, например как
* ebx = [координата по оси x]*65536 + [размер по оси x]
или
mov ebx , (KX*65536+RX); где KX - координата по X, RX - размер по X


Top
   
 Post subject: Re: Вопрос
PostPosted: Mon Nov 16, 2015 6:58 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1282
mov edx, Y*16777216 + цвет
или
mov edx, Y*1000000h + цвет
или
mov edx, Y shl 24 + цвет
или
mov dl, Y ;/dx/edx
shl edx, 24
add edx, цвет


Top
   
 Post subject: Re: Вопрос
PostPosted: Mon Nov 16, 2015 7:26 pm 
Offline
User avatar

Joined: Fri Jan 27, 2006 3:06 pm
Posts: 1073
Так а в чем проблема написать mov edx, 0xXYRRGGBB? Возможные значения Y расписаны же (надо только помнить, что актуальные на данный момент типы окон - 3, 4 и в редких случаях 1). С Х немного сложнее, но тоже не запредельно: пишешь на бумажке 4 нуля, читаешь описание, что значит каждый бит, меняешь в тех местах 0 на 1, переводишь полученное двоичное число в шестнадцатеричное на калькуляторе или еще как - получаешь X.


Top
   
 Post subject: Re: Вопрос
PostPosted: Tue Nov 17, 2015 8:30 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
Pathoswithin, Heavyiron СПАСИБО!
========================
Из файла sysfuncr.txt:
Коды событий:
* 1 = сообщение о перерисовке (сбрасывается при вызове функции 0)

А из за чего возникает сообщение о перерисовке ?


Top
   
 Post subject: Re: Вопрос
PostPosted: Tue Nov 17, 2015 8:38 pm 
Offline
User avatar

Joined: Wed Apr 15, 2015 11:13 pm
Posts: 265
[quote="ALEXS1983"]Pathoswithin, Heavyiron СПАСИБО!
========================
Из файла sysfuncr.txt:
Коды событий:
* 1 = сообщение о перерисовке (сбрасывается при вызове функции 0)

А из за чего возникает сообщение о перерисовке ?[/quote]

Когда: изменение размера, восстановление, движение, перекрывания окна.


Top
   
 Post subject: Re: Вопрос
PostPosted: Tue Nov 17, 2015 9:07 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
При создании прямоугольников и точек на форме (Функция 13 - нарисовать прямоугольник в окне) ( Функция 15, подфункция 2 - поставить точку на фоновом изображении. ) ТОЖЕ ВОЗНИКАЕТ ?
При запуске программы, еще до вызова формы (mcall 0, Функция 0 - определить и нарисовать окно ) ТОЖЕ ВОЗНИКАЕТ ?


Top
   
 Post subject: Re: Вопрос
PostPosted: Tue Nov 17, 2015 9:17 pm 
Offline
User avatar

Joined: Wed Apr 15, 2015 11:13 pm
Posts: 265
При создании прямоугольников и точек на форме (Функция 13 - нарисовать прямоугольник в окне) ( Функция 15, подфункция 2 - поставить точку на фоновом изображении. ) ТОЖЕ ВОЗНИКАЕТ ? -> нет
При запуске программы, еще до вызова формы (mcall 0, Функция 0 - определить и нарисовать окно ) ТОЖЕ ВОЗНИКАЕТ ? -> да


Top
   
 Post subject: Re: Вопрос
PostPosted: Tue Nov 17, 2015 11:35 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
........................
mcall 17 ; 17 - получить идентификатор нажатой кнопки
cmp ah, 1 ; если НЕ нажата кнопка с номером 1,
jne CycleProcesEvents ; вернуться
.exit:
mcall -1 ; иначе конец программы
........................

Как я понял если вместо mcall -1 вписать Jmp CycleProcesEvents ( вернуться ), то окно, по нажатию на "крестик" не закроется, а программа продолжит работу перейдя по данной метке.
Вот возникает вопрос почему при нажатии ALT+F4 окно всё равно закроется, независимо от того что .exit: Jmp CycleProcesEvents ? Является ли закрытие окна по ALT+F4 моментальным прекращением работы программы и переход в систему ?
Возможно ли отменить закрытие окна и/или прекращения работы программы по ALT+F4 ?


Top
   
 Post subject:
PostPosted: Wed Nov 18, 2015 12:09 am 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1185
Думаю по Alt+F4 просто завершается,процесс программы


Top
   
 Post subject: Re: Вопрос
PostPosted: Wed Nov 18, 2015 5:13 am 
Offline

Joined: Sun Aug 09, 2015 3:41 pm
Posts: 117
Можно попробовать накинуть хук.


Top
   
 Post subject: Re: Вопрос
PostPosted: Thu Nov 19, 2015 4:28 pm 
Offline
User avatar

Joined: Sat Oct 05, 2013 9:32 pm
Posts: 386
[quote="ALEXS1983"]........................
mcall 17 ; 17 - получить идентификатор нажатой кнопки
cmp ah, 1 ; если НЕ нажата кнопка с номером 1,
jne CycleProcesEvents ; вернуться
.exit:
mcall -1 ; иначе конец программы
........................

Как я понял если вместо mcall -1 вписать Jmp CycleProcesEvents ( вернуться ), то окно, по нажатию на "крестик" не закроется, а программа продолжит работу перейдя по данной метке.
Вот возникает вопрос почему при нажатии ALT+F4 окно всё равно закроется, независимо от того что .exit: Jmp CycleProcesEvents ? Является ли закрытие окна по ALT+F4 моментальным прекращением работы программы и переход в систему ?
Возможно ли отменить закрытие окна и/или прекращения работы программы по ALT+F4 ?[/quote]
Этим занимется @taskbar. При нажатии Alt+F4 он посылает активному приложению код события 3 и параметр 1 (по сути нажимает на крестик) (sysfunc 72.1(3, 1) )


Top
   
PostPosted: Fri Nov 20, 2015 9:21 am 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
Я извиняюсь, может я чего недопонял, а где можно ознакомится с Free Pascal для КОС ?


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 429 posts ]  Go to page Previous 1 2 3 4 529 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