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