Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Пт ноя 16, 2018 2:44 am

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 365 сообщений ]  На страницу Пред. 115 16 17 18 1925 След.
Автор Сообщение
 Заголовок сообщения: Re: Вопрос
СообщениеДобавлено: Пн фев 29, 2016 5:49 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1249
viewtopic.php?f=40&t=2315&start=150


Вернуться к началу
 Заголовок сообщения: Re: Вопрос
СообщениеДобавлено: Вт мар 01, 2016 9:42 am 
Не в сети

Зарегистрирован: Сб ноя 14, 2015 11:15 am
Сообщения: 299
Передавать значения в процедуру, можно через стек, а можно через переменные предназначенные для приёма передачи параметров в ту процедуру.
Proc1_P1: rb 1
Proc1_p2: rb 1
Proc1_Result rb 1
Proc1:
…......
ret

START:
mov [Proc1_P1], 34
mov [Proc1_P2], 64
call Proc1
xor eax,[Proc1_Result]
…..........
Какие достоинства и недостатки передачи параметров через переменные, вместо стека ?
Главное что интересует, - можно ли сказать что это более медленный (быстрый) способ передачи данных чем через стек ?


Вернуться к началу
 Заголовок сообщения: Re: Вопрос
СообщениеДобавлено: Вт мар 01, 2016 2:02 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1249
Передача параметров через стек — это на 100% универсальный способ. Недостаток: чтобы использовать полученные параметры во вложенных процедурах, придётся исполнить народный танец.
Использование глобальных переменных не поддерживает многопоточность и рекурсию.
Использование указателя на локальную структуру — гибридный способ, поддерживает многопоточность, у нас используется в файловых системах. Для полной рекурсии достаточно выделить новую структуру. На что похожа выборочная рекурсия, можно увидеть в ntfs.inc со строки 1116 http://websvn.kolibrios.org/filedetails ... 2Fntfs.inc
Скорость может упасть только при перемешивании с кодом большого количества отдельных глобальных переменных.


Вернуться к началу
 Заголовок сообщения: Re: Вопрос
СообщениеДобавлено: Вт мар 01, 2016 5:13 pm 
Не в сети

Зарегистрирован: Сб ноя 14, 2015 11:15 am
Сообщения: 299
Всё время забываю спросить....
А нельзя ли настроить Fasm (Fasm Editor 2.0) таким образом чтобы можно было писать по несколько команд в одной строке ? Вот так вот:
reset1: mov dx,$0100 mov eax,pts
.m1: mov byte [eax],$ff inc eax dec dx jnz .m1
ret


Вернуться к началу
 Заголовок сообщения: Re: Вопрос
СообщениеДобавлено: Вт мар 01, 2016 7:42 pm 
Не в сети

Зарегистрирован: Сб ноя 14, 2015 11:15 am
Сообщения: 299
Если КОС запускать в qemu.exe то dosbox в ней не заупскается. Должно ли так быть ?


Вернуться к началу
 Заголовок сообщения: Re: Вопрос
СообщениеДобавлено: Чт мар 03, 2016 12:35 am 
Не в сети
Аватара пользователя

Зарегистрирован: Сб сен 27, 2014 2:59 pm
Сообщения: 102
[quote="ALEXS1983"]Всё время забываю спросить....
А нельзя ли настроить Fasm (Fasm Editor 2.0) таким образом чтобы можно было писать по несколько команд в одной строке ? Вот так вот:
reset1: mov dx,$0100 mov eax,pts
.m1: mov byte [eax],$ff inc eax dec dx jnz .m1
ret[/quote]

Я конечно не специалист в макросах FASM'а, но вот, навоял на досуге простейший макрос, который позволяет писать в строчку, и принимает любое кол-во параметров.

macro asm_inline [args*]
{
forward
args
}

; копирует массив байт из buffer1, в buffer2.
asm_inline <mov esi, buffer1>, <mov edi, buffer2>, <mov ecx, 22>, <cld>, <rep movsb>

После припроцессинга, макрос развернётся в следующую конструкцию...

; копирует массив байт из buffer1, в buffer2.
mov esi, buffer1
mov edi, buffer2
mov ecx, 22
cld
rep movsb


Вернуться к началу
 Заголовок сообщения: Re: Вопрос
СообщениеДобавлено: Чт мар 03, 2016 11:36 pm 
Не в сети

Зарегистрирован: Сб ноя 14, 2015 11:15 am
Сообщения: 299
То ли лыжи не едут..... то ли фиг его знает :-) Нужна функция быстрого вывода графики на экран в КОС ! В Дельфи (винде) есть tbitmap ( Var gamecanvas: tbitmap;) в которою передаёшь точки которые нужно перечертить, вот так вот: gamecanvas.Canvas.Pixels[PutPixel_x,PutPixel_y]:=PutPixel_color; (эта передача пикселей без прорисовки их) далее перечерчиваешь tbitmap на форме процедурой:
MainForm.Canvas.StretchDraw(rect(0,0,MainForm.Width-0,MainForm.Height-30), gamecanvas)
которая заодно растягивает tbitmap на всю форму; ну или без растяжения, - вот так вот
MainForm.Canvas.Draw(0,0,gamecanvas); (еще быстрее прорисовывает чем StretchDraw)
Если игровое поле 255х255 при частоте вывода 50 раз в секунду, да и с кешированием
вывода точек, при котором фактически присваивается канвасу приблизительно от 50х50 до 70х70 точек, то это всё работает достаточно проворно, ЧЕГО В КОС НЕ НАБЛЮДАЕТСЯ, когда используешь Функция 1 - поставить точку в окне.
Скажите пожалуйста, есть ли достаточно проворные способы вывода графики в КОС не прибегая ко всяким опенгл и директам ?


Вернуться к началу
 Заголовок сообщения: Re: Вопрос
СообщениеДобавлено: Пт мар 04, 2016 12:26 am 
Не в сети
Аватара пользователя

Зарегистрирован: Пн ноя 19, 2012 5:22 pm
Сообщения: 454
ALEXS1983, попробуй порисовать в gs:[колво бит на пиксель * номер пикселя]. И где-то есть функция для получения параметров графики(эти самый кол-во бит на пиксель), там и про этот gs:[...] написано. Типа DirectDraw - прямой доступ к видеопамяти)


Вернуться к началу
 Заголовок сообщения: Re: Вопрос
СообщениеДобавлено: Пт мар 04, 2016 12:42 am 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1249
Сам по себе системный вызов это где-то 1000 тактов. Кошерный способ — функция 65. Быстро выводить случайные пиксели можно только через видеобуфер по адресу FE000000h, но это может рисовать поверх других окон.


Вернуться к началу
 Заголовок сообщения: Re: Вопрос
СообщениеДобавлено: Пт мар 04, 2016 9:23 am 
Не в сети

Зарегистрирован: Сб ноя 14, 2015 11:15 am
Сообщения: 299
"попробуй порисовать в gs:[колво бит на пиксель * номер пикселя]. И где-то есть функция для получения параметров графики(эти самый кол-во бит на пиксель), там и про этот gs:[...] написано. Типа DirectDraw - прямой доступ к видеопамяти)"

"Быстро выводить случайные пиксели можно только через видеобуфер по адресу FE000000h, но это может рисовать поверх других окон."

А МОЖНО ОБ ЭТОМ ПОПОДРОБНЕЙ ?!... И ХОТЯ БЫ С КУСОЧКОМ КОДА ПРИМЕРА КАК ЭТО ДЕЛАЕТСЯ!


Вернуться к началу
 Заголовок сообщения: Re: Вопрос
СообщениеДобавлено: Пт мар 04, 2016 2:42 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Чт сен 03, 2009 1:52 pm
Сообщения: 1615
ALEXS1983 писал(а):
"попробуй порисовать в gs:[колво бит на пиксель * номер пикселя]. И где-то есть функция для получения параметров графики(эти самый кол-во бит на пиксель), там и про этот gs:[...] написано. Типа DirectDraw - прямой доступ к видеопамяти)"

"Быстро выводить случайные пиксели можно только через видеобуфер по адресу FE000000h, но это может рисовать поверх других окон."

А МОЖНО ОБ ЭТОМ ПОПОДРОБНЕЙ ?!... И ХОТЯ БЫ С КУСОЧКОМ КОДА ПРИМЕРА КАК ЭТО ДЕЛАЕТСЯ!

Нельзя. Не слушай про запись через gs. Слушай Pathoswithin и используй функцию 65 либо функцию 7.

_________________
Сделаем мир лучше!


Вернуться к началу
 Заголовок сообщения: Re: Вопрос
СообщениеДобавлено: Пт мар 04, 2016 3:33 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1249
Прямой вывод в видеобуфер это только для полноэкранных приложений или рисования совсем уж случайных пикселей, вроде снега на экране, но такой эффект нужно отключать, если окно неактивно.


Вернуться к началу
 Заголовок сообщения: Re: Вопрос
СообщениеДобавлено: Пт мар 04, 2016 3:49 pm 
Не в сети

Зарегистрирован: Сб ноя 14, 2015 11:15 am
Сообщения: 299
Pathoswithin, ну кинь код, - рассмотрю!
Вот еще есть вопрос, может быть конечно смешной и примитивный, но всё таки мне надо уточнить:
Быстродействие в КОС является таким же как в винде (на данной машине)?... ну конечно при условии использования исключительно арифметических команд асма, переходов, присваивания ячейкам памяти и прочее ?
Проще выражаясь, если написана процедура (на асме) с циклами обрабатывающая очень много данных массивов... плюсы... минусы.... ксоренье и пересылка данных между массивами.... имеющая множество вложенных вызовов (CALL) из процедуру в процедуру, без использования int и api и прочего.... короче, :-) если длительность выполнения такой процедуры в винде будет занимать 5 секунд, то на КОС, Я НАДЕЮСЬ, она тоже будет выполняться в пределах такого же времени?.... а не 40 сек ?... и даже не 10 сек? ТАК ОНО ?


Вернуться к началу
 Заголовок сообщения: Re: Вопрос
СообщениеДобавлено: Пт мар 04, 2016 4:44 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1249
Ну по адресу FE000000h начинается обычное растровое изображение экрана.
Функцией 61.2 получаешь количество бит на пиксель (например 32), считаешь количество байт на пиксель (делишь на 8), умножаешь на Х.
Функцией 61.3 получаешь длину строки, умножаешь на Y.
Всё складываешь.
Ложишь по адресу цвет пикселя.
Но зачем тебе выводить отдельные пиксели?

Скорость работы самого кода — одинаковая.


Вернуться к началу
 Заголовок сообщения: Re: Вопрос
СообщениеДобавлено: Пт мар 04, 2016 8:11 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Чт сен 03, 2009 1:52 pm
Сообщения: 1615
ALEXS1983 писал(а):
Pathoswithin, ну кинь код, - рассмотрю!
Вот еще есть вопрос, может быть конечно смешной и примитивный, но всё таки мне надо уточнить:
Быстродействие в КОС является таким же как в винде (на данной машине)?... ну конечно при условии использования исключительно арифметических команд асма, переходов, присваивания ячейкам памяти и прочее ?
Проще выражаясь, если написана процедура (на асме) с циклами обрабатывающая очень много данных массивов... плюсы... минусы.... ксоренье и пересылка данных между массивами.... имеющая множество вложенных вызовов (CALL) из процедуру в процедуру, без использования int и api и прочего.... короче, :-) если длительность выполнения такой процедуры в винде будет занимать 5 секунд, то на КОС, Я НАДЕЮСЬ, она тоже будет выполняться в пределах такого же времени?.... а не 40 сек ?... и даже не 10 сек? ТАК ОНО ?

Если писать с глобальными переменными на каждую процедуру и прочими деоптимизациями - будет медленнее. Хотя вряд ли в 8 раз, конечно. Но Колибри тут ни при чём, такой код в винде будет тормозить ровно так же.

_________________
Сделаем мир лучше!


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 365 сообщений ]  На страницу Пред. 115 16 17 18 1925 След.

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB