FASM: Передача структуры как параметра в процедуру

Тема в разделе "WASM.BEGINNERS", создана пользователем gershkovich, 28 окт 2008.

  1. gershkovich

    gershkovich New Member

    Публикаций:
    0
    Регистрация:
    14 фев 2006
    Сообщения:
    97
    Всем привет!

    Вопрос касательно синтаксиса FASM-а

    есть структура типо
    Код (Text):
    1. struct Point
    2.     x dd 0
    3.     y dd 0
    4. ends
    Я передаю указатель на нее в процедуру и обрасчаюсь к полям этой структуры вот таким образом
    Код (Text):
    1. proc draw currentPoint:dword
    2.     mov ebx, [currentPoint]
    3.     mov eax, [ebx + Point.x]
    4.     ....
    5.     ret
    6. endp
    Скажите, пожалусто, это нормально ?
    Можно ли обращаццо к полям более элегантно? Я ожидал что-то вроде такова:
    Код (Text):
    1. proc draw currentPoint:Point
    2.     mov eax, [currentPoint.x]
    3.     ....
    4.     ret
    5. endp
    но нигде не нашол, как это можно сделать.

    Заранее спасибо
     
  2. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    первое - да, второе - нет. второе - по идее обращение к месту, где на самом деле расположен указатель, как к элементу структуры, которая на самом деле расположена в другом месте.
     
  3. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    теоритически в принципе можно если тебе не жалко стека.
    практически не в курсе насчет такой возможности в синтаксисе fasm и его макросах

    PS. не смог придумать ничего умнее чем
    Код (Text):
    1. include 'win32ax.inc'
    2.  
    3. .data
    4. fmt db '%d, %d', 0
    5. buffer rb 512
    6.  
    7. struct Point
    8.  x dd 0
    9.  y dd 0
    10. ends
    11.  
    12. .code
    13.  
    14. proc draw p,p_y
    15.         cinvoke wsprintf, buffer, fmt, [p + Point.x], [p + Point.y]
    16.         invoke MessageBox, 0, buffer, 0, 0
    17.         ret
    18. endp
    19.  
    20. start:
    21.         stdcall draw, 48, 59
    22.         invoke ExitProcess, 0
    23.  
    24. .end start
    синтаксис фасма к сожалению уже подзабыл