LOWORD and HIWORD

Тема в разделе "WASM.WIN32", создана пользователем Eretic, 30 авг 2009.

  1. Eretic

    Eretic New Member

    Публикаций:
    0
    Регистрация:
    19 июн 2009
    Сообщения:
    41
    Приветствую всех кто зашёл в темку. Вопрос в следующем. Нужно мне найти координаты мышки в данный момент. У Iczelion'а описан процесс с помощью структуры, но мне непонятно почему нельзя использовать LOWORD и HIWORD. В Си я так и сделал. В асме ошибки на этих строках:
    Код (Text):
    1. invoke LOWORD,lParam
    2. invoke HIWORD,lParam
    ошибка:
    Код (Text):
    1. first.asm(100) : error A2006: undefined symbol : LOWORD
    2. first.asm(102) : error A2006: undefined symbol : HIWORD
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    это макросы.
     
  3. Eretic

    Eretic New Member

    Публикаций:
    0
    Регистрация:
    19 июн 2009
    Сообщения:
    41
    спасибо. но тогда другой вопрос. как мне с их помощью передать в 2 переменные значения?
     
  4. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    Можно использовать вот такое макро (FASM):
    Код (Text):
    1. macro LPARAM_TO_XY  r32X, r32Y, lParam
    2. {
    3.     mov r32X, lParam
    4.     mov r32Y, lParam
    5.     and r32X, 0000FFFFh     ; LOWORD
    6.     shr r32Y, 16        ; HIWORD
    7. }
     
  5. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    Eretic
    Можно например так
    Код (Text):
    1.     xor ecx,ecx;
    2.     mov cx,word ptr lParam; ecx= LOWORD(lParam)
    3.     mov eax,lParam
    4.     shr eax,16; eax=HIWORD(lParam)
     
  6. Eretic

    Eretic New Member

    Публикаций:
    0
    Регистрация:
    19 июн 2009
    Сообщения:
    41
    Спасибо Mikl___, AsmGuru62, n0name
    Просто думал что ещё проще можно. Перебирал варианты.
     
  7. mrcrown

    mrcrown Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    227
    Да куда уже проще shr, shl, and, or????
     
  8. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    mrcrown
    можно проще :) только mov, без shr

    xor eax,eax
    mov ecx,eax
    mov ax, word [lParam] ;LOWORD
    mov cx, word [lParam+2] ;HIWORD
     
  9. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    movzx eax, word [lparam]
    movzx ecx, word [lparam+2]
    и все
     
  10. mrcrown

    mrcrown Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    227
    FatMoon
    не думаю, что это проще! скорее равносильно!
     
  11. mrcrown

    mrcrown Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    227
    Разве, что набор инстр., что представил max7C4 меньше по размеру на целых три байта, чем Mikl___
     
  12. Eretic

    Eretic New Member

    Публикаций:
    0
    Регистрация:
    19 июн 2009
    Сообщения:
    41
    А вы проверяли работоспособность этих кодов? Вот мне нужно в структуру записать значения.
    Код (Text):
    1. POINTLA STRUCT
    2.        x   dd ?
    3.  
    4.        y   dd ?
    5.  
    6.    POINTLA ENDS
    Код (Text):
    1. xor eax,eax
    2. mov ecx,eax
    3. mov eax,[lParam]
    4. mov ecx,[lParam+2]
    5. mov hitpoint.y,eax
    6. mov hitpoint.x,ecx
    Используя точно варианты FatMoon и max7C4 выдаётся синтаксическая ошибка
     
  13. mrcrown

    mrcrown Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    227
    Где? в каком месте?
     
  14. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    Eretic
    будь внимательнее!
    movzx eax,word [lParam]
    movzx ecx,word [lParam+2]
     
  15. Eretic

    Eretic New Member

    Публикаций:
    0
    Регистрация:
    19 июн 2009
    Сообщения:
    41
    вот как раз на этих строках и ошибка
    movzx eax,word [lParam] error A2009: syntax error in expression
    movzx ecx,word [lParam+2] error A2009: syntax error in expression
     
  16. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    Eretic
    ну наверное (если я правильно теперь понял, что вам надо для масм)

    movzx eax,word ptr lParam
    movzx ecx,word ptr lParam+2
     
  17. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    max7C4
    Если ТС сам конкретно не сказал, что ему нужно FASM, MASM, то я не экстрасенс
     
  18. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    Mikl___
    ну к этому выводу можно придти посмотрев скажем сюда
    а именно на error A2009. если мне не изменяет память, то это масм
     
  19. Eretic

    Eretic New Member

    Публикаций:
    0
    Регистрация:
    19 июн 2009
    Сообщения:
    41
    :) спасибо всем!
     
  20. cmdprompt

    cmdprompt New Member

    Публикаций:
    0
    Регистрация:
    9 сен 2009
    Сообщения:
    3
    Код (Text):
    1. mov eax, dword ptr lParam
    2. movzx edx, ax ; edx=X
    3. shr eax, 16 ; eax=Y