设计条件指令的三种方法

时间:2016-09-11 18:29:37

标签: assembly x86

我已经看过一张图片,展示了3种设计条件指令的方法。它看起来像:

1. One step:
bz s1, label ; branch if s1 = 0
jecxa label  ; branch if ecx = 0
2. Two steps with tags:
CP A, 0         ; set flags
JR Z, MULEND    ; jump if Z = 1

cmp eax, 0      ; set flags
jz mulend       ; jump if zf = 1

3. Two step with predicates:
cmp.eq p1, p2 = r1, r2   ; if r1=r2
(p1) add r3 = 1, r3      ; then r3 := r3  +1
(p2) add r3 = 3, r3      ; else r3 := r3 + 3

我不知道发生了什么。我可以在谷歌搜索,但我找不到任何东西。如果有人知道它是什么,请将我引荐到某个地方。

我想比较那些控制程序流程的免费方法: 所以:

Advantages:
1. There is no data-dependency ( flag register)
2. None? 
3. There is less branch instruction in implementation of if-then-else
Disadvantages:
1. None?
2. There is data-dependency ( flag register)
3. Data-dependency of registers for the true-predicate and the false-predicate

请标记并说出其他内容。

1 个答案:

答案 0 :(得分:1)

您想要什么样的其他信息?我打算将此作为评论发布,但它可以作为答案。

谓词版本对我来说看起来很奇怪,但这可能是因为我习惯看到谓词指令只是使用标志作为输入。

translateY(-50%)生成两个单独的结果,彼此相反,这似乎很奇怪。这比让指令使用谓词的倒数更容易吗? (2结果cmp与每个谓词指令编码中的额外位)

除此之外,如果您看过x86,一切看起来都非常明显和直截了当。 IIRC,MIPS更像是“一步”版本,因为它的比较指令使用GP寄存器作为输出而不是FLAGS寄存器。