Assembly EDX在逻辑NEG和指令之后有哪个值?

Assembly EDX在逻辑NEG和指令之后有哪个值?,assembly,x86,Assembly,X86,我正在解决一个汇编问题,我偶然发现了一个逻辑方面的问题。 让我思考的事情是,在将数字系统从十六进制改为BIN,并进行否定和运算后,我得到了与其他人不同的答案(我无法联系) 我希望输出是这样的:80604020h,这是答案之一,但另一个人做了一个决定,回答:80600302h,这对我来说在做了数学运算后没有意义。我在汇编方面还是新手,所以我可能不知道哪里出了问题,有人能解释一下我的答案出了什么问题吗?还是它是正确的?让我们一次做一个说明。非ax将从 0F0F0F0F0 到 因为AX是EAX的低1

我正在解决一个汇编问题,我偶然发现了一个逻辑方面的问题。 让我思考的事情是,在将数字系统从十六进制改为BIN,并进行否定和运算后,我得到了与其他人不同的答案(我无法联系)


我希望输出是这样的:80604020h,这是答案之一,但另一个人做了一个决定,回答:80600302h,这对我来说在做了数学运算后没有意义。我在汇编方面还是新手,所以我可能不知道哪里出了问题,有人能解释一下我的答案出了什么问题吗?还是它是正确的?

让我们一次做一个说明。
非ax
将从

0F0F0F0F0

因为AX是EAX的低16位。然后,
INC dx
将EDX从

 87654321

然后,
和edx,eax
指令将组合它们

 0F0F00F0F
& 87654322
= 80600302
这使得你朋友的答案正确


如果NOT指令是
NOT EAX
,那么答案将是07050302。

让我们一次执行一条指令。
非ax
将从

0F0F0F0F0

因为AX是EAX的低16位。然后,
INC dx
将EDX从

 87654321

然后,
和edx,eax
指令将组合它们

 0F0F00F0F
& 87654322
= 80600302
这使得你朋友的答案正确


如果NOT指令是
noteax
,那么答案将是07050302。

80600302h
在我看来是正确的。在计算中,您似乎忽略了
NOT ax
指令。这些前导零可能很棘手。是的,它们可能是,但我一直在考虑不使用ax,但现在我意识到我没有使用整个EAX,而不是ax<代码>80600302h在我看来是正确的。在计算中,您似乎忽略了
NOT ax
指令。这些前导零可能很棘手。是的,它们可能是,但我一直在考虑不使用ax,但现在我意识到我没有使用整个EAX,而不是ax!但在非ax语句中到底发生了什么?为什么后面的第四个“F”会将其余的数字向右移动?它们不是向右移动,而是翻转所有的位。那些为1的将变为0,那些为0的将变为1。@MariuszJędrzejewski
NOT AX
只会更改EAX寄存器的低16位。NOT指令将翻转其操作数的所有位。在这种情况下,它类似于XOR EAX,0000FFFF。所以上面的4个Nybles是不变的,下面的4个Nybles似乎在移动,但这只是因为F0F0模式。哦,这很有道理!我们从未在实验室中真正使用或讨论过AX(16位),所以它解释了很多!但在非ax语句中到底发生了什么?为什么后面的第四个“F”会将其余的数字向右移动?它们不是向右移动,而是翻转所有的位。那些为1的将变为0,那些为0的将变为1。@MariuszJędrzejewski
NOT AX
只会更改EAX寄存器的低16位。NOT指令将翻转其操作数的所有位。在这种情况下,它类似于XOR EAX,0000FFFF。所以上面的4个Nybles是不变的,下面的4个Nybles似乎在移动,但这只是因为F0F0模式。哦,这很有道理!我们从未在实验室中真正使用或讨论过AX(16位),所以它解释了很多!