【发布时间】:2015-02-23 13:07:02
【问题描述】:
所以,我有这样的结构:
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”和偏移量来做到这一点?
【问题讨论】:
-
由于您显然想要实际地址而不是结构中的偏移量,因此您需要添加
bx和mov不能这样做。如您所见,您需要lea。 -
@Jester 我得到的不是结构内的偏移量,而是完全错误的值。例如: «buffer» 的偏移量是 0003,结构内的偏移量是 2 个字节,但我得到的是 6558。
-
@nyagod - source_str 的偏移量是多少?我想知道是不是6556?