Asm coding tricks

Тема в разделе "WASM.A&O", создана пользователем S_T_A_S_, 1 янв 2005.

  1. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    руль! ▼
     
  2. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    _http://www.poiskknig.ru/ дальше сами ищите
     
  3. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    S_T_A_S_



    invoke ReadFile, hFile, lpBuffer, nNumberOfBytesToRead, esp, lpOverlapped

    mov eax,[esp-4] ; если нужно кол-во байт



    А если так? Проблем со стеком вроде быть не должно ...
     
  4. Max

    Max Member

    Публикаций:
    0
    Регистрация:
    22 май 2003
    Сообщения:
    192
    bogrus

    а если ты это сделаешь в начае процедуры?

    то есть, на esp лежит адрес возврата...

    тогда уж надо invoke ReadFile, hFile, lpBuffer, nNumberOfBytesToRead, esp-4, lpOverlapped
     
  5. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Max




    На esp будет лежать адрес lpOverlapped
     
  6. Turkish

    Turkish New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2004
    Сообщения:
    80
    Адрес:
    Russia
    тогда так

    push eax

    invoke ReadFile, hFile, lpBuffer, nNumberOfBytesToRead, esp, lpOverlapped

    pop eax
     
  7. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Turkish

    не пойму, чем твой вариант, кроме 2х лишних команд, от варианта bogrus отличается..

    Конечно так лучше, мой код был для общего случая.



    Хотя я бы не стал полагаться, что правильные данные будут получены - MSVC может использовать место аргументов функций в стеке для хранения временных переменных самих функций!
     
  8. B_108

    B_108 New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    62
    Код (Text):
    1. add edi, 256\4
    2. lea edi, [ebx+edi*4]
    3.  




    делает то же самое, что


    Код (Text):
    1.  lea edi, [ebx+edi*4+256]
    2.  




    но на байт короче,

    числа, регистры и множитель могут быть другими :)
     
  9. cpp_and_wasm

    cpp_and_wasm Владимир

    Публикаций:
    0
    Регистрация:
    27 июл 2006
    Сообщения:
    128
    Часто используемые параметры функций можно засунуть в esi,edi, а ebp использовать в частных случаях.
    mov esi,hFayl
    invoke ReadFile,esi,...
    invoke GetFileSize,esi
    invoke CloseHandle,esi
     
  10. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    еще ebx
     
  11. cpp_and_wasm

    cpp_and_wasm Владимир

    Публикаций:
    0
    Регистрация:
    27 июл 2006
    Сообщения:
    128
    Вместо последовательности
    invoke DefWindowProc,hwnd,msg,wp,lp
    ret

    можно юзать так
    leave
    jmp DefWindowProc
     
  12. Proteus

    Proteus Member

    Публикаций:
    0
    Регистрация:
    19 июн 2004
    Сообщения:
    344
    Адрес:
    Russia
    Я бы в инете не качал. Всё что я там встречал было сильно урезанными вариантами. Лучше в бумаге последнее издание купить....
     
  13. Avoidik

    Avoidik New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2004
    Сообщения:
    288
    Адрес:
    Russia
    качал вот отсюда, pdf 10 метров - качество хорошее, ничего не урезано

    http://houston.c-books.info/get.php?fi=prg%2FWarrenAlgoritm3.rar&df=b1f2c6e24305943bd2ff5072eeb7e2c5

    ps. совсем искать обленились :)
     
  14. koderr

    koderr New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2006
    Сообщения:
    205
    а xchg чем не нравится?
     
  15. koderr

    koderr New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2006
    Сообщения:
    205
    множитель кратен 4.
     
  16. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Да? Я почему то всегда думал, что 1, 2, 4, 8 доступны.
     
  17. koderr

    koderr New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2006
    Сообщения:
    205
    Аха :) Это я перепил сегодня, чушь несу. Я имел в виду... Ну, вы поняли короче :)

    А еще я иногда делаю вот такую больную штуку:
    Код (Text):
    1. invoke CreateFile, ..................
    2. .if eax != -1
    3.     mov hFile, eax
    4.     push eax
    5.     ; творим че-нить
    6.     call CloseHandle
    7. .endif
     
  18. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    NEG reg/NOT reg = DEC reg NOT reg/NEG reg = INC reg
     
  19. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    вместо .if eax != -1 лучше
    Код (Text):
    1. inc eax
    2. jz .endif
    3. dec eax
     
  20. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Быстрое деление EAX на 10 (про AAM я знаю)
    SHR EAX,4/MOV EBX,EAX/SHR EAX,1/MOV ECX,EAX/SHR EAX,2/ADD EAX,EBX/ADD EAX,ECX
    1/128+1/32+1/16=13/128=0,1015625 почти 0,1