Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 获取装配中结构构件的偏移量_Assembly_Tasm - Fatal编程技术网

Assembly 获取装配中结构构件的偏移量

Assembly 获取装配中结构构件的偏移量,assembly,tasm,Assembly,Tasm,因此,我有这样的结构: String STRUC max_length db 254 real_length db ? buffer db 255 dup(?) String ENDS 在数据段中,我定义了«String»类型的变量: source_str String <> 我是初学者,我的想法是这样的:我们有一个偏移量(在寄存器中或作为标签)-地址,将它放在[]之间,然后得到值-就像C/C+

因此,我有这样的结构:

String STRUC
   max_length       db  254
   real_length      db  ?
   buffer           db  255  dup(?)
String ENDS
在数据段中,我定义了«String»类型的变量:

source_str          String <>
我是初学者,我的想法是这样的:我们有一个偏移量(在寄存器中或作为标签)-地址,将它放在[]之间,然后得到值-就像C/C++中的指针解引用一样


我的问题是:为什么最后一个命令不能像我认为的那样工作?有没有办法在BX寄存器中使用“mov”和偏移量来实现这一点

对于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

由于您显然想要实际地址,而不是结构中的偏移量,因此需要添加
bx
,而
mov
不能这样做。您需要
lea
,如您所示。@Jester我得到的不是结构中的偏移量,而是完全错误的值。例如:«buffer»的偏移量为0003,结构内的偏移量为2字节,但我得到6558字节-source_str的偏移量是多少?我想知道是不是6556?
        mov     dx, bx
        add     dx, offset (String ptr ds:0).buffer