непонятная структура из Platform SDK

Тема в разделе "WASM.WIN32", создана пользователем aaleksander, 14 сен 2004.

  1. aaleksander

    aaleksander New Member

    Публикаций:
    0
    Регистрация:
    8 сен 2004
    Сообщения:
    11
    Подскажите, как будет выглядеть на fasme структура вида

    typedef union union {

    struct {

    DWORD LowPart;

    LONG HighPart; };

    LONGLONG QuadPart;

    } LARGE_INTEGER, *PLARGE_INTEGER;



    каким образом вообще потом можно работать с QuadPart? там же 8 байт!
     
  2. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    Либо два подряд дворда - LowPart, HighPart

    Либо 64-разрядно число, что собственно почти одно и тоже.
     
  3. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    каким образом вообще потом можно работать с QuadPart? там же 8 байт!

    При помощи 64-битных регистров :)

    А если их нету - на то и есть HighPart - старшая часть и LowPart - младшая.
     
  4. yureckor

    yureckor New Member

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

    x1 ???<>

    ....



    mov [x1.QuadPart],0

    mov [x1.QuadPart+4],0
     
  5. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Код (Text):
    1. struc   LARGE_INTEGER
    2. {
    3. label  .QuadPart qword
    4.        .LowPart  dd ?
    5.        .HighPart dd ?
    6. }






    >




    Для этих целей и объявляется union с 2мя DWORD
     
  6. aaleksander

    aaleksander New Member

    Публикаций:
    0
    Регистрация:
    8 сен 2004
    Сообщения:
    11
    А почему у тебя члены структуры в обратном порядке идут? (извиняюсь за ламерский вопрос)
     
  7. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Члены структы в нормальном порядке.

    А вот члены union'а в обратном - для union принципиальной рразницы нет, как они расположены. Но в FASM union нет, так что делается он посредством присваивания 2х разных меток одному адресу:


    Код (Text):
    1.  
    2. struc   LARGE_INTEGER
    3. {
    4. label  .QuadPart qword ; +0 размер 8 байт
    5.        .LowPart  dd ?  ; +0 размер 4 байт
    6.        .HighPart dd ?  ; +4 размер 4 байт
    7. }
     
  8. pas

    pas New Member

    Публикаций:
    0
    Регистрация:
    18 апр 2003
    Сообщения:
    330
    Адрес:
    Russia
    S_T_A_S_

    Возможно я ошибаюсь, но мне кажется должно быть так:
    Код (Text):
    1.  
    2. struc   LARGE_INTEGER
    3. {
    4. label  .QuadPart qword ; +0 размер 8 байт
    5. virtual at label
    6.        .LowPart  dd ?  ; +0 размер 4 байт
    7.        .HighPart dd ?  ; +4 размер 4 байт
    8. end virtual
    9. }
    10.  
     
  9. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    В этом случае размер структуры будет 0 байт.

    Если использовать virtual, то должно быть так:
    Код (Text):
    1. struc   LARGE_INTEGER
    2. {
    3.        .QuadPart dq ?  ; +0 размер 8 байт
    4. virtual at .QuadPart
    5.        .LowPart  dd ?  ; +0 размер 4 байт
    6.        .HighPart dd ?  ; +4 размер 4 байт
    7. end virtual
    8. }


    или так
    Код (Text):
    1. struc   LARGE_INTEGER
    2. {
    3. virtual
    4.        .LowPart  dd ?  ; +0 размер 4 байт
    5.        .HighPart dd ?  ; +4 размер 4 байт
    6. end virtual
    7.        .QuadPart dq ?  ; +0 размер 8 байт
    8. }