在程序集中获取STRUCT成员的偏移量

时间:2015-02-23 13:07:03

标签: assembly tasm

所以,我有这样的结构:

String STRUC
   max_length       db  254
   real_length      db  ?
   buffer           db  255  dup(?)
String ENDS

在数据段中,我定义了我的«String»类型的变量:

source_str          String <>

在代码段中,我试图获取结构成员«buffer»的偏移量:

mov     bx, offset source_str           ; in BX we have the offset of structure
lea     dx, [bx].buffer                 ; OK, the right offset in DX
mov     ax, offset [source_str].buffer  ; this works fine too
mov     dx, offset [bx].buffer          ; but this gets _wrong_ offset, according to td

我是初学者,这是我的想法:我们有一个偏移量(在寄存器或标签中) - 地址,将它放在[]之间并获取值 - 就像在C / C ++中指针解引用一样。

我的问题是:为什么最后一个命令不能正常工作?有没有办法在BX寄存器中使用“mov”和偏移来做到这一点?

1 个答案:

答案 0 :(得分:2)

对于masm 6.11,需要包含结构名称:

        lea     dx, (String ptr [bx]).buffer

对于另一个问题,您不能使用基址寄存器的偏移量:

        mov     dx, offset (String ptr [bx]).buffer  ; invalid

你可以使用add,但lea用一条指令做同样的事情:

        mov     dx, bx
        add     dx, offset (String ptr ds:0).buffer