Assembly 组件x86值不为';复印不正确吗?

Assembly 组件x86值不为';复印不正确吗?,assembly,x86,Assembly,X86,如评论中所述,答案应为-57319865。每当我查看我创建的消息变量时,它都是正确的。当我看qAns14时,是4237647431。我不知道为什么-我这样声明了两个变量: ;-57,319,865 mov eax, [dNum5] mov edx, [dNum6] imul edx ;mov [message], eax mov [qAns14], eax 我甚至无法想象为什么将eax移动到消息会给出正确的结果,而将其移动到qAns14却不会。有什么见解吗?谢谢 编辑: 我发现这样做可以给出正

如评论中所述,答案应为-57319865。每当我查看我创建的消息变量时,它都是正确的。当我看qAns14时,是4237647431。我不知道为什么-我这样声明了两个变量:

;-57,319,865
mov eax, [dNum5]
mov edx, [dNum6]
imul edx
;mov [message], eax
mov [qAns14], eax
我甚至无法想象为什么将eax移动到消息会给出正确的结果,而将其移动到qAns14却不会。有什么见解吗?谢谢

编辑:

我发现这样做可以给出正确的答案:

message     dq  0
qAns14      dq  0
我需要按照Peter Counts的建议添加较高的部分。我从来没有想到过这一点,因为当我将它移动到消息变量时,我可以看到正确的答案-对此有什么解释??我想其中的一条评论回答了这个问题,但解释超出了我的理解

编辑:

我现在明白了它的原因是用于显示变量的命令:

mov eax, [dNum5]
mov edx, [dNum6]
imul edx
mov [qAns14], eax
mov [qAns14+4], edx

@DavidWohlferd:这也是因为他们有效地将64位EDX:EAX结果截断为32位,并通过仅将低半个dword存储到高半个已经为零的
dq 0
qword中来扩展它。所以我认为他们实际上是在打印一个有符号的64位值,但是忘记了存储
imul
结果的上半部分。您将消息打印为一个GDB有符号的“字”(32位),也就是x86 dword。但qAns14作为GDB“巨人”(64位),包括高位零。
echo qAns14: \t
x/dg &qAns14
echo MESSAGE: \t
x/dw &message