Assembly 汇编语言x86:间接操作数到结构的偏移量

Assembly 汇编语言x86:间接操作数到结构的偏移量,assembly,x86,structure,Assembly,X86,Structure,我创建了一个包含基本信息和一些字节字符串的结构。。例如: EXAMPLESTRUCT STRUCT somePrompt BYTE 20 DUP (0) ;other fields EXAMPLESTRUCT ENDS 我的目的是创建一个结构数组,其中包含与该特定结构相关的消息,并按照以下方式初始化: ex1 EXAMPLESTRUCT <"Enter first"> ex2 EXAMPLESTRUCT <"Enter second"> 那么,是我的代码错了,

我创建了一个包含基本信息和一些字节字符串的结构。。例如:

 EXAMPLESTRUCT STRUCT
 somePrompt BYTE 20 DUP (0)
 ;other fields
 EXAMPLESTRUCT ENDS
我的目的是创建一个结构数组,其中包含与该特定结构相关的消息,并按照以下方式初始化:

ex1 EXAMPLESTRUCT <"Enter first">
ex2 EXAMPLESTRUCT <"Enter second">
那么,是我的代码错了,还是这只是出于某种原因非法使用了偏移量

我发现的唯一解决方法是使结构包含指针,然后初始化它们以指向已生成的消息:

WORKAROUND STRUCT
somePTR DWORD ?
;...
WORKAROUND ENDS

.data
msg BYTE "Hello World",0
struct1 WORKAROUND <OFFSET msg>

还有其他解决方案/变通方法吗?还是我应该坚持使用指针?

您想使用
lea
指令

lea edx,(EXAMPLESTRUCT PTR [esi]).somePrompt
有关
lea
的更多信息,请参阅


OFFSET
是一种编译时构造。使用
OFFSET
指令时,汇编程序必须能够在编译时将其解析为一个值。这就是为什么会出现错误——因为汇编程序无法知道
esi
的值将是什么。

您希望使用
lea
指令

lea edx,(EXAMPLESTRUCT PTR [esi]).somePrompt
有关
lea
的更多信息,请参阅

OFFSET
是一种编译时构造。使用
OFFSET
指令时,汇编程序必须能够在编译时将其解析为一个值。这就是为什么会出现错误——因为汇编程序无法知道
esi
的值

lea edx,(EXAMPLESTRUCT PTR [esi]).somePrompt