Я создал структуру, которая содержала основную информацию, а также некоторые строки BYTE. Например:
EXAMPLESTRUCT STRUCT
somePrompt BYTE 20 DUP (0)
;other fields
EXAMPLESTRUCT ENDS
Мое намерение состояло в том, чтобы создать массив структур с сообщениями, относящимися к этой конкретной структуре, с инициализацией в соответствии с:
ex1 EXAMPLESTRUCT <"Enter first">
ex2 EXAMPLESTRUCT <"Enter second">
Ссылка на адрес поля структуры напрямую (mov edx, OFFSET ex1.somePrompt) работала нормально, но при использовании косвенной адресации я получал ошибку OFFSET:
mov esi,OFFSET ex1
mov edx,OFFSET (EXAMPLESTRUCT PTR [esi]).somePrompt ;Error here
Итак, мой код неверен или это просто незаконное использование OFFSET по какой-то причине?
Единственная работа, которую я нашел, заключалась в том, чтобы заставить структуру содержать указатели, а затем инициализировать их так, чтобы они указывали на уже сделанное сообщение:
WORKAROUND STRUCT
somePTR DWORD ?
;...
WORKAROUND ENDS
.data
msg BYTE "Hello World",0
struct1 WORKAROUND <OFFSET msg>
с последующим отображением сообщения в формате
mov esi,OFFSET struct1
mod edx,(WORKAROUND PTR [esi]).somePTR
Любые другие решения / обходные пути или я должен просто придерживаться указателей?