汇编中多个双字的定义

时间:2014-06-19 16:30:27

标签: assembly

我已经得到了下一个定义(实际问题的一部分):

Turkey: mov ebx, Ygg
        call foo
foo: ;;Does something
Dra: dd    0xffff, Sil, Sil, Sil
Ygg: dd    0x11, Dra, Sil Dra
Sil: dd    3, 0, 0

现在我不明白我该如何记住这个。

我的意思是,ebx,会得到一个地址到Ygg的开头[我猜错点是什么?],但那我该如何导航?

下一个字节有什么用? Dra,Sil和Dra的地址再次发送?

Ygg: dd    0x11, Dra, Sil, Dra

但是当我做类似的事情时会发生什么:

mov ebx, [ebx+4]

我知道我的问题有点不集中,但这是因为我无法看到""它在内存中的表现如何。

2 个答案:

答案 0 :(得分:1)

  

下一个字节有什么用? Dra,Sil和Dra的地址再次发送?

是。每个地址存储为4个字节

  

mov ebx,[ebx + 4]

从ebx + 4计算地址。从该地址读取4个字节并复制到ebx。

将“地址”视为特殊的东西可能会有所帮助。它们也只是数字。您恰好能够读取或写入该位置,对应于这些数字的值。

答案 1 :(得分:1)

示例,如果“Dra”的内存位置从数据段中的偏移量0x0000开始:

mov ebx,Ygg     ; ebx = 0x00000010
mov ebx,[ebx+4] ; ebx = 0x00000000 (second dword of DS:Ygg)

数据段以偏移量0x0000开始:

0x0000 Dra dd 0x0000ffff, 0x00000020, 0x00000020, 0x00000020
0x0010 Ygg dd 0x00000011, 0x00000000, 0x00000020, 0x00000000
0x0020 Sil dd 0x00000003, 0x00000000, 0x00000000