Помогите новичку

Applications development, KoOS API questions
  • А кто сказал, что 32 бита в результате? Я подозреваю, что там 24 бита и формат BGR - как в 7й функции.
  • SoUrcerer wrote:А кто сказал, что 32 бита в результате? Я подозреваю, что там 24 бита и формат BGR - как в 7й функции.
    Потому что я в документации написал, что там 32 бита и там на самом деле 32 бита.
    Всем чмоки в этом проекте! Засуньте эти 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
    ;
  • Mario_r4 wrote:Документацию нужно читать, полностью:
    * C=1, глубина точки = 32 бита, область пользователя выглядит так:
    dword Xsize
    dword Ysize

    остаток области = Xsize * Y size * 4
    Я уже написал обёртки ко многим библиотекам и практически ко всем функция Колибри (кроме работы с железом), но это описание поставило меня в тупик. Я прочитал полностью, несколько раз и смотрел код icon и для меня осталось загадкой что НАПИСАНО В ЭТОМ АБЗАЦЕ. Как вычислить Xsize и почему в malloc нужно ещё +4 или +8 - вообще не понимаю.
    Из хаоса в космос
  • Поскольку код ядра не знает размеры области (по X и Y) с которой работает, то ему нужно их как-то передать. Все регистры заняты -остается только в самой области передать.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Тебе не кажется, что в функции 4 скрещено фактически две независимые функции, откуда нехватка регистров и как результат докуметация. Пока только одна программа использует рисование в память через 4 функцию можно было бы её разделить.

    А пока что очень не помешал бы пример с "Hello World!".
    Last edited by Leency on Sat Apr 06, 2013 5:13 pm, edited 1 time in total.
    Из хаоса в космос
  • Это ты еще спецификации на программирование железок не читал. Добро пожаловать в наш реальный дерьмовый мир!
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Ответ "потому что жизнь говно" - не ответ :)
    Из хаоса в космос
  • Leency wrote:Пока только одна программа использует рисование в память через 4 функцию можно было бы её разделить.
    "Бритва" Уильям Оккама - сатирическое произведение в жанре нео-реализма.
    Leency wrote:А пока что очень не помешал бы пример с "Hello World!".
    Мне некогда и неохота, и я считаю что документации достаточно. А здесь уже в ветке разжевал как никогда подробно. Если кто имеет желание - пусть напишет пример, можно даже на C--, но не я.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Mario
    Может быть, потом я создам тему "Как выжить в жестоком холодном мире" и ты дашь мне там парочку советов :D , но эта тема называется "Помогите новичку [в программировании]" и мне нужен был пример рабочего когда или расшифровка описания функции, а не сатирические книги или жизненная философия.

    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. Потому что операции обработки строк (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