Page 2 of 29

Re: Вопрос

Posted: Sun Nov 15, 2015 10:33 pm
by Pathoswithin
Наверно, лучше всего в чате.
Тебя интересовало "полное и чёткое описание команд х86 и описанием влияния каждой команды на флаги процессора", вот оно в конце той книги. В остальном согласен, в учебниках для вузов хрен что поймёшь, тут лучше самоучители вроде "ассемблер это просто".
В принципе, в ассемблере нет массивов, скорее море памяти в котором ты раставляешь буйки.

Re: Вопрос

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

Re: Вопрос

Posted: Mon Nov 16, 2015 12:40 am
by ALEXS1983
ИЗ ЧАТА (чтобы не затерялось):

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

Re: Вопрос

Posted: Mon Nov 16, 2015 6:21 pm
by ALEXS1983
Кто нибудь может мне описать вот это:
============== Функция 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

Re: Вопрос

Posted: Mon Nov 16, 2015 6:58 pm
by Pathoswithin
mov edx, Y*16777216 + цвет
или
mov edx, Y*1000000h + цвет
или
mov edx, Y shl 24 + цвет
или
mov dl, Y ;/dx/edx
shl edx, 24
add edx, цвет

Re: Вопрос

Posted: Mon Nov 16, 2015 7:26 pm
by Heavyiron
Так а в чем проблема написать mov edx, 0xXYRRGGBB? Возможные значения Y расписаны же (надо только помнить, что актуальные на данный момент типы окон - 3, 4 и в редких случаях 1). С Х немного сложнее, но тоже не запредельно: пишешь на бумажке 4 нуля, читаешь описание, что значит каждый бит, меняешь в тех местах 0 на 1, переводишь полученное двоичное число в шестнадцатеричное на калькуляторе или еще как - получаешь X.

Re: Вопрос

Posted: Tue Nov 17, 2015 8:30 pm
by ALEXS1983
Pathoswithin, Heavyiron СПАСИБО!
========================
Из файла sysfuncr.txt:
Коды событий:
* 1 = сообщение о перерисовке (сбрасывается при вызове функции 0)

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

Re: Вопрос

Posted: Tue Nov 17, 2015 8:38 pm
by paulcodeman
[quote="ALEXS1983"]Pathoswithin, Heavyiron СПАСИБО!
========================
Из файла sysfuncr.txt:
Коды событий:
* 1 = сообщение о перерисовке (сбрасывается при вызове функции 0)

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

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

Re: Вопрос

Posted: Tue Nov 17, 2015 9:07 pm
by ALEXS1983
При создании прямоугольников и точек на форме (Функция 13 - нарисовать прямоугольник в окне) ( Функция 15, подфункция 2 - поставить точку на фоновом изображении. ) ТОЖЕ ВОЗНИКАЕТ ?
При запуске программы, еще до вызова формы (mcall 0, Функция 0 - определить и нарисовать окно ) ТОЖЕ ВОЗНИКАЕТ ?

Re: Вопрос

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

Re: Вопрос

Posted: Tue Nov 17, 2015 11:35 pm
by 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 ?

Posted: Wed Nov 18, 2015 12:09 am
by punk_joker
Думаю по Alt+F4 просто завершается,процесс программы

Re: Вопрос

Posted: Wed Nov 18, 2015 5:13 am
by Ray
Можно попробовать накинуть хук.

Re: Вопрос

Posted: Thu Nov 19, 2015 4:28 pm
by e-andrew
[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) )

Free Pascal для ОС Колибри

Posted: Fri Nov 20, 2015 9:21 am
by ALEXS1983
Я извиняюсь, может я чего недопонял, а где можно ознакомится с Free Pascal для КОС ?