Ссылка на Fn04 http://wiki.kolibrios.org/wiki/SysFn04/ruLeency wrote:Пытаюсь разобраться в функции 4, пишущей прямиком в память. Выходит кривая чёрная полоса.Code: Select all
w = strlen(#text)*6; mem = malloc(w*9*4); for (i=0; i<w*9*4; i++) ESBYTE[mem+i]=0xFF; //делаем фон белым $mov eax, 4 $mov ebx,0 << 16+0 $mov ecx,0x88000000 $mov edi, mem $mov edx, #text $int 0x40 PutPaletteImage(mem,w,9,100,100,32,0); //рисуем, 32 - глубина цвета
Помогите новичку
-
Программист не тот, кто постоянно пишет КОД, а тот кто сможет понять чужой КОД!!!
А кто сказал, что 32 бита в результате? Я подозреваю, что там 24 бита и формат BGR - как в 7й функции.
Потому что я в документации написал, что там 32 бита и там на самом деле 32 бита.SoUrcerer wrote:А кто сказал, что 32 бита в результате? Я подозреваю, что там 24 бита и формат BGR - как в 7й функции.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Документацию нужно читать, полностью:Leency wrote:Пытаюсь разобраться в функции 4, пишущей прямиком в память. Выходит кривая чёрная полоса.Code: Select all
w = strlen(#text)*6; mem = malloc(w*9*4);
Spoiler:
* C=1, глубина точки = 32 бита, область пользователя выглядит так:
dword Xsize
dword Ysize
остаток области = Xsize * Y size * 4
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Наверное, должно быть как-то так:
Code: Select all
mem = malloc(w*9*4 + 4 + 4);
;
mov eax, mem
mov edx, [w]
mov [eax], edx
mov [eax + 4], dword 9
;
Я уже написал обёртки ко многим библиотекам и практически ко всем функция Колибри (кроме работы с железом), но это описание поставило меня в тупик. Я прочитал полностью, несколько раз и смотрел код icon и для меня осталось загадкой что НАПИСАНО В ЭТОМ АБЗАЦЕ. Как вычислить Xsize и почему в malloc нужно ещё +4 или +8 - вообще не понимаю.Mario_r4 wrote:Документацию нужно читать, полностью:* C=1, глубина точки = 32 бита, область пользователя выглядит так:
dword Xsize
dword Ysize
остаток области = Xsize * Y size * 4
Из хаоса в космос
Поскольку код ядра не знает размеры области (по X и Y) с которой работает, то ему нужно их как-то передать. Все регистры заняты -остается только в самой области передать.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Тебе не кажется, что в функции 4 скрещено фактически две независимые функции, откуда нехватка регистров и как результат докуметация. Пока только одна программа использует рисование в память через 4 функцию можно было бы её разделить.
А пока что очень не помешал бы пример с "Hello World!".
А пока что очень не помешал бы пример с "Hello World!".
Это ты еще спецификации на программирование железок не читал. Добро пожаловать в наш реальный дерьмовый мир!
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Ответ "потому что жизнь говно" - не ответ
Из хаоса в космос
"Бритва" Уильям Оккама - сатирическое произведение в жанре нео-реализма.Leency wrote:Пока только одна программа использует рисование в память через 4 функцию можно было бы её разделить.
Мне некогда и неохота, и я считаю что документации достаточно. А здесь уже в ветке разжевал как никогда подробно. Если кто имеет желание - пусть напишет пример, можно даже на C--, но не я.Leency wrote:А пока что очень не помешал бы пример с "Hello World!".
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Mario
Может быть, потом я создам тему "Как выжить в жестоком холодном мире" и ты дашь мне там парочку советов , но эта тема называется "Помогите новичку [в программировании]" и мне нужен был пример рабочего когда или расшифровка описания функции, а не сатирические книги или жизненная философия.
0CodErr
Написал в теме код и прислал мне в личку человеческое описание за что ему огромное спасибо:
Может быть, потом я создам тему "Как выжить в жестоком холодном мире" и ты дашь мне там парочку советов , но эта тема называется "Помогите новичку [в программировании]" и мне нужен был пример рабочего когда или расшифровка описания функции, а не сатирические книги или жизненная философия.
0CodErr
Написал в теме код и прислал мне в личку человеческое описание за что ему огромное спасибо:
Как вычислить Xsize: это ширина области, она у тебя w
Почему в malloc нужно ещё +8: область пользователя представляет собой 2 подряд dword-a(8 байт) и далее саму область для рисования, размером Xsize * Y size * 4
В эти 2 dword-a нужно записать значения Xsize и Y size, то есть w и 9.
Из хаоса в космос
... и она была выдана.Leency wrote:Mario
или расшифровка описания функции
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Начал читать книгу, которую мне посоветовл Mario по ассемблеру, not bad, но чувствуется, что книга расчитана на людей в теме (учащихся на факультетах IT). Я только в начале, но у меня уже over 9000 вопросов и, пожалуста, не нужно отвечать: "Ты до этого ещё дойдёшь в процессе чтения" или подобное. Только конкретика и попроще.
1. я обращал, что обработка строк (копирование например) во многих реализациях идёт через регистры ESI и EDI, почему? Они в данной задаче стравляются быстрее, чем через EAX?
2. есть у нас регистр EAX. Максимальное число, которое в него можно записать - это 2^32 степени?
3. Окей, пишем в EAX, допустим, 32000. Cколько теперь будет в AH и AL?
4. Обработка изображений в libimg идёт через обычные регистры или через MMX? Почему?
1. я обращал, что обработка строк (копирование например) во многих реализациях идёт через регистры ESI и EDI, почему? Они в данной задаче стравляются быстрее, чем через EAX?
2. есть у нас регистр EAX. Максимальное число, которое в него можно записать - это 2^32 степени?
3. Окей, пишем в EAX, допустим, 32000. Cколько теперь будет в AH и AL?
4. Обработка изображений в libimg идёт через обычные регистры или через MMX? Почему?
Из хаоса в космос
Утро, на работе делать нечего, отвечу то что знаю.
1. Потому что операции обработки строк (movs и иже с ними) используют именно эти регистры как указатель источника (source index, esi) и получателя (destination index, edi).
2. Максимальное беззнаковое число 2^32-1. Итого вместе с нулем 2^32 чисел.
3. Переводим в шестнадцатеричную систему: 7D00h, отсюда в AH - 7Dh, в AL - 00h
1. Потому что операции обработки строк (movs и иже с ними) используют именно эти регистры как указатель источника (source index, esi) и получателя (destination index, edi).
2. Максимальное беззнаковое число 2^32-1. Итого вместе с нулем 2^32 чисел.
3. Переводим в шестнадцатеричную систему: 7D00h, отсюда в AH - 7Dh, в AL - 00h
Who is online
Users browsing this forum: No registered users and 7 guests