【发布时间】:2020-11-30 18:16:05
【问题描述】:
有没有办法在汇编中有条件地将零移动到寄存器中?我正在努力做
cmpb %r9b, %r8b #compare r9 and r8
cmovgq $0, %rcx #If r8>r9, move zero to rcx
但编译器抱怨“cmovg 的操作数类型不匹配”,因为第一个操作数是立即数。我考虑过有条件地跳转到 mov 但我不确定是否还有其他可能更好的操作码。如何在不占用另一个寄存器的情况下有条件地将这个寄存器归零?
【问题讨论】:
-
您可以在内存中存储一个零并使用内存操作数,但它可能比条件跳转慢。否则,您将需要另一个寄存器。
-
请注意,您可以在文本段附近的内存中使用一个常量零,并使用相对于 RIP 的地址来访问它。这可能比难以预测的分支更快,但比临时使用另一个寄存器要慢。
标签: assembly x86 x86-64 att conditional-move