Сборка структуры ниже с помощью NASM, я получаю следующее сообщение об ошибке:Максимальный размер аргумента count для префикса TIMES в NASM?
test.asm:65: error: TIMES value -228 is negative
т.е. значение 0x104
интерпретируется как отрицательное число.
Каков максимальный размер аргумента count для префикса TIMES
в NASM, и как бы инициализировать структуру, используя только «маленькие» подсчеты?
_stWin32FindData:
istruc WIN32_FIND_DATA
at WIN32_FIND_DATA.dwFileAttributes, dd 0x00
at WIN32_FIND_DATA.ftCreationTime, times 0x08 db 0x00
at WIN32_FIND_DATA.ftLastAccessTime, times 0x08 db 0x00
at WIN32_FIND_DATA.ftLastWriteTime, times 0x08 db 0x00
at WIN32_FIND_DATA.nFileSizeHigh, dd 0x00
at WIN32_FIND_DATA.nFileSizeLow, dd 0x00
at WIN32_FIND_DATA.dwReserved0, dd 0x00
at WIN32_FIND_DATA.dwReserved1, dd 0x00
at WIN32_FIND_DATA.cFileName, times 0x104 db 0x00
at WIN32_FIND_DATA.cAlternate, times 0x0e db 0x00
iend
Я использую NASM версии 2.12.02 @ Windows, 10
Спасибо за подробный ответ. В следующий раз я пойду и посмотрю в источник. Однако я не думал, что это «читаемо» для начинающего. Я не очень понимаю вашу реализацию AT. – Shuzheng
@Shuzheng Вы никогда не знаете, какой код существует за проектом. NASM один довольно читабельный. Реализация 'AT' не моя, это NASM. Я нашел его, используя флаг командной строки '-E', который расширяет макросы, но не обрабатывает файл. Первая скобка вычисляет смещение поля 'word' относительно начала структуры, вторая вычисляет текущую позицию относительно начала экземпляра структуры. Разница заключается в количестве байтов для прохода, чтобы добраться до поля 'word'. –