Page 51 of 77
Re: Помогите новичку
Posted: Mon Apr 08, 2013 8:03 am
by dunkaist
Leency wrote:1. я обращал, что обработка строк (копирование например) во многих реализациях идёт через регистры ESI и EDI, почему? Они в данной задаче стравляются быстрее, чем через EAX?
Дело в том, что цепочечные команды (cmps, movs, ...) ожидают указатели на строки именно в этих регистрах. Т.е. они не принимают регистр в качестве аргумента, как тот же add, а хотят именно esi/edi.
Leency wrote:2. есть у нас регистр EAX. Максимальное число, которое в него можно записать - это 2^32 степени?
У максимального числа все биты установлены в единицы. Для 32-битного случая это 0xffffffff = 2^32 - 1. Вообще, 2^k выглядит как единица с k нулями, а 2^k - 1 как k единиц.
Leency wrote:3. Окей, пишем в EAX, допустим, 32000. Cколько теперь будет в AH и AL?
Как уже ответили, mov eax, 0x7d00 даёт ah=0x7d, al=0. Но это при записи непосредственного значения. Будь внимателен при чтении из памяти: если по адресу my_var лежит 0xaa, 0xbb, 0xcc, 0xdd, то после чтения mov eax, [my_var] в eax будет 0xddccbbaa. В этом и заключается little endian.
Leency wrote:4. Обработка изображений в libimg идёт через обычные регистры или через MMX? Почему?
В основном через обычные. В декодере jpeg есть код fpu, потому что нужно работать с вещественными числами. В декодере xcf можно выбрать mmx или sse. Я это сделал потому что:
1. В mmx есть удобные команды, например, сложения с насыщением. В случае работы с регистрами общего назначения пришлось бы заменять каждую из таких команд целым блоком (и повторять такие блоки по четыре раза: для каждой из ARGB компонент). В результате код короче, понятнее и быстрее.
2. Команды mmx позволяют обрабатывать за раз все четыре канала ARGB изображения, т.е. целый пиксель. Тут ещё влиет 64-битность mmx регистров -- больше влазит.
3. У нас всё равно поддержка оборудования с i586, а там даже у vortex-x86 есть mmx, никого не обделяю.
Re: Помогите новичку
Posted: Mon Apr 08, 2013 2:36 pm
by Leency
dunkaist, Insolor
Спасибо! Очень доступно объяснили!
Re: Помогите новичку
Posted: Tue Apr 09, 2013 3:37 pm
by Leency
Продолжаю мучить 4 функцию. Переписал на православный асм и всё равно падает:
Code: Select all
mcall 68,11
mcall 68,12,13*6*9*4+8
mov [eax], dword 13*6
mov [eax + 4], dword 9
mov edi, eax
mov eax, 4
mov ebx, 0
mov ecx, 0x88fffFFF
mov edx, caption
mov esi, 13
int 0x40
add edi, 8
mov ebx, edi
mcall 65, , <13*6, 9>, <0, 0>, 32
caption: db 'Hello, world!', 0
Re: Помогите новичку
Posted: Tue Apr 09, 2013 3:44 pm
by Mario_r4
Выводит область кода начиная с draw_area, неудивительно что он падает с page fault.
должно помочь.
Re: Помогите новичку
Posted: Tue Apr 09, 2013 3:52 pm
by Mario_r4
http://wiki.kolibrios.org/wiki/SysFn65/ru
ebp = байтовое смещение между концом предыдущей строки изображения и началом следующей строки
З.Ы. Первый мой ответ уже не существенен, ибо в процессе его написания данные в целевом посте были изменены автором.
Re: Помогите новичку
Posted: Tue Apr 09, 2013 6:19 pm
by Mario_r4
Я обнаружил какие-то странные симптомы при повторном выводе ф.4 в область памяти, причем завязка на события какая-то странная. В ICON область выделяется, в нее копируется иконка и выводится текст ф.4, а затем она выводится ф.25 поверх фона (т.е. ф.0 не вызывается) и далее область удаляется.
В приведенном примере, если создать область и вызвать ф.4 до вызова ф.0 (хоть 100500 вызовов ф.4), то отрабатывает нормально, но как только пытаемся вызвать ф.4 с буфером после ф.0, то получаем page fault в коде ядра. Буду разбираться в общем.
Re: Помогите новичку
Posted: Tue Apr 09, 2013 6:36 pm
by Leency
Я УЖЕ 3 ДНЯ БЬЮСЬ НАД ЭТИМ!!!! FFFUUUUUUUUUUUUUUU!!!!!!11 Задолбал уже наверно 0CodErr и принялся за Диму!
P.S. Также вывод строки (неправильный, у меня это пунктирная линия) зависит от положения окна, я это недавно заметил и очень удивился.
Re: Помогите новичку
Posted: Tue Apr 09, 2013 6:50 pm
by Mario_r4
Leency wrote:Я УЖЕ 3 ДНЯ БЬЮСЬ НАД ЭТИМ!!!! FFFUUUUUUUUUUUUUUU!!!!!!11 Задолбал уже наверно 0CodErr и принялся за Диму!
Как я уже говорил - добро пожаловать в наш реальный дерьмовый мир.
На самом деле я не мог спрогнозировать такое поведение, к сожалению. Можешь утешиться тем, что я тоже почти три часа ломал голову, пока выявил зависимость.
Leency wrote:P.S. Также вывод строки (неправильный, у меня это пунктирная линия) зависит от положения окна, я это недавно заметил и очень удивился.
Подробности в студию, желательно со скриншотами, чтобы доходчиво.
Re: Помогите новичку
Posted: Tue Apr 09, 2013 7:04 pm
by Leency
Проблема у меня при указании параметра Х. Если он 0 или 2 рисует такое. При 10 чёрный фон ("надписи" не видно). При 36, как и должно быть - падает. QEMU, последнее ядро.
Re: Помогите новичку
Posted: Tue Apr 09, 2013 7:49 pm
by Mario_r4
Код сразу выкладывай. Есть подозрение на код.
Re: Помогите новичку
Posted: Tue Apr 09, 2013 7:53 pm
by Leency
Всё вместе, при желании можно скомилить.
Re: Помогите новичку
Posted: Tue Apr 09, 2013 7:59 pm
by Mario_r4
Кирилл, ты либо лечи свою машину от вирусов, либо не выкладывай EXE файлы в архивах Колибри. Не первый раз уже - некрасиво с твоей стороны. Хорошо у меня Avira просекла, а может у кого более дырявый антивирус или вообще нет.

З.Ы. Убери этот архив из поста от греха подальше.
Re: Помогите новичку
Posted: Tue Apr 09, 2013 8:06 pm
by Leency
Ты уверен, что тревога не ложная, как в случае с klbrinwin?
Re: Помогите новичку
Posted: Tue Apr 09, 2013 8:09 pm
by Mario_r4
Leency wrote:Ты уверен, что тревога не ложная, как в случае с klbrinwin?
У меня в системе лежит kpack.exe который прекрасно запускается и не вызывает никаких нареканий. Причем это именно тот kpack.exe который я скачивал, я для Виндовс его не допиливал.
Я не понимаю как ты получил свои скриншоты - у меня твоя программа сразу завершается едва отрисовав окно, даже когда запущена из твоего менеджера файлов.
Re: Помогите новичку
Posted: Tue Apr 09, 2013 8:13 pm
by Leency
28 строка. Давай дальше общаться в чате, дабы не захламлять тему для этого не предназначенную.