消除汇编中的 J 操作?

Eliminating J operation in assembly?

下面这个问题如果不写Exit会怎么样?我假设它会继续到 Else 分支,对吗?或者它会跳过所有分支,直到到达分支外的代码?

您的意思是如果您没有写 j Exit,因为删除 Exit: 会导致汇编错误。我想你可以删除两者..

如果您消除 j,从逻辑上讲,这样的程序将同时执行 then-part 和 else-part,这对于 if-then-else 来说是错误的形式。

它将有效地转化为:

if (i == j)
    f = g + h;
f = g - h;

如您所见,这破坏了原始 if-then-else 的控制结构。


每条指令都会通知处理器下一步要执行的指令。大多数指令(不分支的指令)告诉处理器将程序计数器增加 4,这指示处理器顺序执行内存中的下一条指令。

没有魔法,这是非常可预测和明确定义的——明确地在程序计数器的更新方面。 32 位 add 指令有两个结果:它执行添加和更新目标寄存器,,它递增程序计数器加 4。正如我提到的,每条指令都类似地具有其“主要”效果,以及对程序计数器的影响,它告诉处理器下一步要做什么。


处理器看不到标签,因此,单独来看,标签在机器代码中没有表示。标签的 usage(例如 j Exit)被翻译成机器代码作为数字,此处 j 作为处理器必须添加的增量完成跳跃的程序计数器。