Nasm - Неисправный win32n.inc не резервирует место для массивов в определениях структуры? - PullRequest
0 голосов
/ 26 сентября 2019

EDIT: Win32n.inc из link не может обрабатывать массивы.При поиске файла .inc получите его откуда-то еще!Это должно предотвратить эти ошибки.

Я нашел что-то в моем win32n.inc (и всех остальных в Интернете), что кажется немного странным:

FLOATING_SAVE_AREA объявлено как:

STRUC FLOATING_SAVE_AREA
.ControlWord RESD 1
.StatusWord RESD 1
.TagWord RESD 1
.ErrorOffset RESD 1
.ErrorSelector RESD 1
.DataOffset RESD 1
.DataSelector RESD 1
.RegisterArea RESB 1
.Cr0NpxState RESD 1
ENDSTRUC

Что смущает меня, потому что официальное объявление в winnt.h:

typedef struct _FLOATING_SAVE_AREA
{
 DWORD      ControlWord;
 DWORD      StatusWord;
 DWORD      TagWord;
 DWORD      ErrorOffset;
 DWORD      ErrorSelector;
 DWORD      DataOffset;
 DWORD      DataSelector;
 BYTE       RegisterArea[80]; <----- this doesn't fit, does it?
 DWORD      Cr0NpxState;
} FLOATING_SAVE_AREA;

Так почему мой win32n.inc резервирует только 1 байт, когда он содержит массив из 80 байтов?Я знаю, что другой способ сохранить массив - это зарезервировать память только для его базового адреса.Но это также не работает, поскольку резервирует память только на 1 байт, а не на 4 байта (размер адреса).

Так как мне справиться с этим?

1 Ответ

2 голосов
/ 27 сентября 2019

Ваш файл .inc, похоже, был создан инструментом, который не понимает массивы.

Замените .RegisterArea RESB 1 на .RegisterArea RESB 80.

...