所以,我有这样的结构:
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”和偏移来做到这一点?
答案 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