Сам себе Iczelion

Тема в разделе "WASM.BEGINNERS", создана пользователем Mikl_, 11 май 2007.

Метки:
  1. Djinn

    Djinn New Member

    Публикаций:
    0
    Регистрация:
    26 мар 2007
    Сообщения:
    22
    Как по мне это бред! ты лучше бы не фигнёй страдал, так как Iczelion при изучение масма довольно хорошо всё описал...! а вот если ты так хочешь переписать его статьи с пользой, то лучше переведи его статьи на fasm так как он сейчас довольно популярен следи начинаюших...! ну там сделай подробные описания и т. д.
     
  2. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Djinn
    Iczelion'у наверное, то же твердили. "К чему это, на С все давно написано?" В чем собственно бред? Не знаю, вот и спросил про хэш... Можешь написать лучше, пиши... А по поводу fasm Iczelion уже переписан, смотри http://sulaiman.netadvant.com
    maxdiver
    за оптимизированный вариант типа "дерево" меня уже отругали в #25 #30. Может быть есть другие мысли как ускорить процесс обработки сообщений?
    Y_Mur
    сообщения отсортированы по частоте их поступления. Я внес исправления в #20.
     
  3. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Mikl__
    Проект хороший и тебе и другим на пользу ;)
    Имхо в данном случае лучше всего как я уже писал - размещать в таблице только сообщения которые реально используются, но отсортировать их по частоте поступления, тогда простой линейный поиск будет быстрее всяких хитрых извращений (которые безусловно хороши и отлично, что ты пишешь такие примеры) но не в этой задаче :)
     
  4. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Урок 32 mdi
     
  5. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Урок 20 subclass
     
  6. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Знаешь, он и вообще довольно популярен, и не беспричинно кстати. Довольно хороший компилер, жалко, что не хватает некоторых полезных опций, например препроцессор слегка слабоват и линковку контролировать можно не полностью.
     
  7. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    оптимизация обработчика сообщений
    Пусть наше приложение обрабатывает следующие сообщения: WM_CREATE=1 WM_ACTIVE=6 WM_SETREDRAW=11 WM_CLOSE=16. Для увеличения скорости просмотра очереди сообщений строим таблицу MsgTable, где номер элемента таблицы соответствует номеру сообщения. Сами табличные элементы представляют собой адреса (процедур), где эти сообщения обрабатываются. Пусть в таблице будут пока номера сообщений, необрабатываемым сообщениям соответствует 0
    | 1 0 0 0 | |1 0 0 0 0 |
    | 0 6 0 0 | --> | 6 0 0 0 0 | --> 1, 6, 11, 16, default
    | 0 0 11 0 | |11 0 0 0 0 |
    | 0 0 0 16 | |16 0 0 0 0 |
    A[i,j]=A[(j-1)*n+i-1] A[i,i]=A[(i-1)*(n+1)] n=4
    Код (Text):
    1. .data
    2. table dd addr_WM_CREATE, addr_WM_ACTIVE, addr_WM_SETREDRAW, addr_WM_CLOSE
    3. .code
    4.      xor edx,edx
    5.      mov ecx,5;ecx=n+1
    6.      mov eax,uMsg
    7.      cmp eax,max_msg;WM_CLOSE=16
    8.      ja a1
    9.      dec eax
    10.      div ecx
    11.      test edx,edx; остаток=0?
    12.      jnz a1
    13.      jmp table[eax*4]
    14. a1: jmp default
     
  8. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Mikl__
    применяется
    Код (Text):
    1. div ecx
    Это шутка ? :)))
     
  9. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Y_Mur
    Если X делим на k=2^N тогда Остаток = X AND (k-1)
    иначе Остаток = X - X * "Магическое число" * k = X * (1 - "Магическое число" * k) так как "Магическое число" и k известны, (1 - "Магическое число" * k) можно расчитать заранее 1 - "Магическое число" * k = "Магическое_число_1"
    Остаток = X * "Магическое_число_1" а умножение быстрее чем деление
     
  10. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Урок 25 SimpleBitmap
     
  11. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Урок 25 более удачный SimpleBitmap
     
  12. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    Это. конечно, все супер. Молодец. Мне нравиться. Только, как начинающему, хотелось бы видеть исходники, а еще лучше, исходники с комментариями. У Iczelion'a, они все-таки были. Просто экзешник в твоем архиве, мне ни о чем не говорит, кроме того, что ты крут )))
     
  13. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Урок 25 более удачный SimpleBitmap
    Aspire извини, не доглядел
    в аттаче сорц и ехе
     
  14. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    ODBC. Урок 5. ODBC пример
    в аттаче сорц и ехе
     
  15. SergSerg

    SergSerg New Member

    Публикаций:
    0
    Регистрация:
    25 май 2007
    Сообщения:
    4
    Извините за глупый вопрос, а для чего на -1?
     
  16. halkfild

    halkfild New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2007
    Сообщения:
    6
    Mikl__ сделай свой самоучитель в .сшм или онлайн
     
  17. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    SergSerg
     
  18. SergSerg

    SergSerg New Member

    Публикаций:
    0
    Регистрация:
    25 май 2007
    Сообщения:
    4
    asmfan
    asmfan - большое спасибо!
     
  19. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Пусть наше приложение обрабатывает следующие сообщения: WM_DESTROY=2 WM_SETFOCUS=7 WM_KILLFOCUS=8 WM_SETREDRAW=11 WM_GETTEXT=13 WM_CLOSE=16. Для увеличения скорости просмотра очереди сообщений строим таблицу MsgTable, где номер элемента таблицы соответствует номеру сообщения. Сами табличные элементы представляют собой адреса (процедур), где эти сообщения обрабатываются. Пусть в таблице будут пока номера сообщений, необрабатываемым сообщениям соответствует 0. Пусть количество столбцов будет кратным 2^N
    0 1 2 3
    0 | 2 0 0 0 |
    1 | 0 7 8 0 |
    2 | 0 11 0 13 |
    3 | 0 0 16 0 |
    V=(0,1,1,2,2,3); номера строк обрабатываемых сообщений
    H=(0,1,2,1,3,2); номера столбцов обрабатываемых сообщений
    Z=(@@WM_DESTROY, @@WM_SETFOCUS, @@WM_KILLFOCUS, @@WM_SETREDRAW, @@WM_GETTEXT,@@WM_CLOSE); адреса обработки сообщений
    Код (Text):
    1.     mov eax,Msg
    2.     cmp eax,WM_CLOSE; номер максимального обрабатываемого сообщения
    3.     ja default
    4.     sub eax,WM_DESTROY;номер минимального обрабатываемого сообщения
    5.     mov edx,eax
    6.     shr eax,2; получили номер строки
    7.     and edx,3;получили номер столбца
    8.     xor ecx,ecx; индекс в таблицах
    9. a1: cmp al,V[ecx]
    10.     ja default; обработка по умолчанию
    11.     jne a2
    12.     cmp dl,H[ecx]
    13.     jne a2
    14.     jmp dword ptr Z[ecx*4]; переход на адрес обработки сообщения
    15. a2: inc ecx
    16.     jmp a1
     
  20. UnknownCoder

    UnknownCoder New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2007
    Сообщения:
    22
    Mikl__, сорри что не в тему... как можно написать этот код на ассемблере, так же компактно как в твоих примерах? Я в асме нуб =(