2

我正在与 MASM 合作。

我有一个 64 位变量,我需要将来自寄存器的 32 位输入存储到 64 位变量的下半部分。

首先,我将下半部分的地址移动到寄存器中:

mov ebx, OFFSET num1+32

然后,我使用PTR指令将 32 位输入存储到变量的后半部分:

mov DWORD PTR [ebx], eax

但是,每次运行第二行时,我在“.data”中声明的字符串之一都会在内存中被覆盖。它来自:

45 6e 74 65 72 20 46 69 72 73 74 20 48 61 6c 66 20 6f 66 20

45 6e 74 65 72 20 46 69 bb bb bb bb 48 61 6c 66 20 6f 66 20

改变的东西bb bb bb bb如上图所示。

bb bb bb bb是我在运行上述两行之前输入的要存储在 64 位变量中的内容。

任何建议表示赞赏。谢谢

4

1 回答 1

4

我不太确定您要做什么,但这可能是您出错的地方:

mov ebx, OFFSET num1+32

您在这里所做的是获取num1+ 32 bytes的地址,该地址恰好位于您的一个字符串的中间。我猜您认为这样做是获取num1+ 32 位的地址。

这会将较低部分的地址移动num1ebx

mov ebx, OFFSET num1+4

如您所见,我将 num1 偏移了 4 个字节,相当于 32 位,这就是我相信您想要的。

如果解释得不好,可能是这样,这里有一条简化的消息:

鉴于:mov (register), (base) + (offset)

您放入 offset 的内容将是x字节数,而不是 bits 。

于 2013-05-25T20:31:30.933 回答