gpt4 book ai didi

assembly - 是否可以在不使用 `jump` 和 `goto` 的情况下在汇编中做出决定?

转载 作者:行者123 更新时间:2023-12-04 16:42:39 25 4
gpt4 key购买 nike

在此 question ,一些答案显示了如何在不使用“if”语句的情况下做出决定,但是我怀疑这是可能的,因为“if”不是生成 jump 的唯一语句。指示。

给定一种固定的编译语言(例如 C++),生成的程序集是否可以在不使用 jump 的情况下进行某种决策?和 goto指示?

请给出一个简单的 if/else 语句的替代示例,该语句在肯定回答的情况下不使用此类说明。

最佳答案

ARM 架构有一个有趣的条件执行特性。在全 ARM 模式下运行,几乎每条指令都可以附加一个条件。这些条件与 B 上使用的条件相同。牧场指示。一条指令,如 add r0, r0, #15会一直执行,但是像 addeq r0, r0, #15 这样的指令只有在设置了零标志时才会执行。一个等效的使用分支是:

    beq afteradd       ; skip add if equal
add r0, r0, #15 ; add 15 to R0
afteradd:

在使用 Thumb-2 的内核上运行时,条件执行受到更多限制,但仍然可以使用 IT操作说明。该指令将在不使用分支的情况下创建“if-then”结构。 IT构造实际上是 ARM 统一汇编语言的一部分,无论您是为 ARM 还是 Thumb-2 编写代码,都应该使用它。这是上面的条件添加的 UAL 版本。
it eq                 ; if equal
addeq r0, r0, #15 ; then add 15 to r0
IT构造可以包含不止一条指令。使用系列 TE在指令中,您可以添加更多条件指令。在下面的例子中,我们将 15 添加到 R0如果设置了零标志,否则我们将从 R0 中减去 15 . ITE字面意思是,如果-那么-其他。下面的第一条指令应该有一个与您的 ITE 匹配的条件条件,然后第二条指令将成为“else”并且应该具有与 ITE相反的条件健康)状况。
ite eq                ; if equal
addeq r0, r0, #15 ; then add 15 to r0
subne r0, r0, #15 ; else subtract 15 from r0

我想这种确实使用 if ,这可能与您的要求背道而驰。不过,就执行而言,这实现了 if 而不使用跳转。

关于assembly - 是否可以在不使用 `jump` 和 `goto` 的情况下在汇编中做出决定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39289549/

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