· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› непонятная структура из Platform SDK

Посл.отвђт Сообщенiе


Дата: Сен 14, 2004 18:07:48

Подскажите, как будет выглядеть на fasme структура вида
typedef union union {
struct {
DWORD LowPart;
LONG HighPart; };
LONGLONG QuadPart;
} LARGE_INTEGER, *PLARGE_INTEGER;

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


Дата: Сен 14, 2004 18:44:47

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


Дата: Сен 14, 2004 18:46:40

каким образом вообще потом можно работать с QuadPart? там же 8 байт!
При помощи 64-битных регистров :)
А если их нету - на то и есть HighPart - старшая часть и LowPart - младшая.


Дата: Сен 14, 2004 23:10:29

например
x1 ???<>
....

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


Дата: Сен 15, 2004 01:43:23

struc   LARGE_INTEGER
{
label  .QuadPart qword
       .LowPart  dd ?
       .HighPart dd ?
}



> „каким образом вообще потом можно работать с QuadPart?“

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


Дата: Сен 15, 2004 08:38:28

А почему у тебя члены структуры в обратном порядке идут? (извиняюсь за ламерский вопрос)


Дата: Сен 16, 2004 02:58:09

Члены структы в нормальном порядке.
А вот члены union'а в обратном - для union принципиальной рразницы нет, как они расположены. Но в FASM union нет, так что делается он посредством присваивания 2х разных меток одному адресу:
struc   LARGE_INTEGER
{
label  .QuadPart qword ; +0 размер 8 байт
       .LowPart  dd ?  ; +0 размер 4 байт
       .HighPart dd ?  ; +4 размер 4 байт
}


Дата: Сен 16, 2004 04:11:41

S_T_A_S_
Возможно я ошибаюсь, но мне кажется должно быть так:
struc   LARGE_INTEGER
{
label  .QuadPart qword ; +0 размер 8 байт
virtual at label
       .LowPart  dd ?  ; +0 размер 4 байт
       .HighPart dd ?  ; +4 размер 4 байт
end virtual
}


Дата: Сен 16, 2004 05:47:17 · Поправил: S_T_A_S_

В этом случае размер структуры будет 0 байт.
Если использовать virtual, то должно быть так:
struc   LARGE_INTEGER
{
       .QuadPart dq ?  ; +0 размер 8 байт
virtual at .QuadPart 
       .LowPart  dd ?  ; +0 размер 4 байт
       .HighPart dd ?  ; +4 размер 4 байт
end virtual
}

или так
struc   LARGE_INTEGER
{
virtual
       .LowPart  dd ?  ; +0 размер 4 байт
       .HighPart dd ?  ; +4 размер 4 байт
end virtual
       .QuadPart dq ?  ; +0 размер 8 байт
}


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.067