gpt4 book ai didi

assembly - 如何使用 TEST 指令来查看是否设置了两个位?

转载 作者:行者123 更新时间:2023-12-02 21:54:16 25 4
gpt4 key购买 nike

如何使用 TEST 指令(或 TEST 指令序列)来查看位是否AL 寄存器中的 0 和 4 都设置为 1? TEST 指令是怎样的用于查看是否设置了任一位?如何使用 TEST 指令来查看是否没有设置任何一位?我使用 emu8086 汇编器。

最佳答案

(请参阅类似问题的 my answer。)

使用TEST,您可以针对 17 进行屏蔽(= 0b10001,即设置位 0 和 4)。

TEST AL, 17

然后:

  • 如果至少设置了一位(位零或位四),则ZF将为0
  • 如果设置了两个或零位,PF 将为 1

所以在测试之后:

  • 不是 ZFPF - 两个位均已设置
  • 不是 ZF 但不是 PF - 设置了一位
  • ZF - 两个位均未设置

这是一个完整的示例:

    TEST AL, 17
JZ none_set
JPE both_set
one_set:
...
none_set:
...
both_set:
...

请注意,这只适用于检查 2 位的情况,特别是在屏蔽结果的最低有效字节中。

测试 3 位或更多位最好使用 ANDCMP 通过 x & mask == mask 来完成。 (这对于 2 位情况也很有效,让您在几条其他指令之后仅使用一个分支,而不是在一个 TEST 之后使用 2 个分支)。

关于assembly - 如何使用 TEST 指令来查看是否设置了两个位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59911141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com