【问题标题】:Which value does EDX have after logic NEG and AND instructions?EDX 在逻辑 NEG 和 AND 指令之后有哪个值?
【发布时间】:2019-05-18 17:42:49
【问题描述】:

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

MOV eax, 0f0f0f0f0h;
MOV edx, 87654321h;
NOT ax;
INC dx;
AND edx, eax;

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

【问题讨论】:

  • 80600302h 在我看来是正确的。您似乎在计算中忽略了NOT ax 指令。
  • 那些前导零可能很棘手。
  • 是的,他们可以,但我当时考虑不做斧头,但现在我知道我不做整个 EAX,而不是 AX!

标签: assembly x86


【解决方案1】:

让我们一次只接受一条指令。 NOT ax 将从

更改 EAX
0F0F0F0F0

0F0F00F0F

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

更改 EDX
 87654321

 87654322

AND edx,eax 指令会将它们组合起来

 0F0F00F0F
& 87654322
= 80600302

这会让你朋友的回答正确。

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

【讨论】:

  • 但是 NOT ax 语句到底发生了什么?为什么后面的第 4 个“F”将其余数字向右移动?
  • 它们没有向右移动,而是在翻转所有位。为 1 的将变为 0,为 0 的将变为 1。
  • @MariuszJędrzejewski NOT AX 只会改变 EAX 寄存器的低 16 位。 NOT 指令将翻转其操作数的所有位。在这种情况下,它类似于XOR EAX,0000FFFF。所以上面的 4 个 nybbles 没有变化,下面的 4 个 nybbles 似乎发生了变化,但这只是因为 F0F0 模式。
  • 哦,这很有意义!我们从未在实验室中真正使用或讨论过 AX(16 位),所以它解释了很多!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多