ARM体系结构的CSET指令如何工作?它比较了哪些寄存器的标准条件检查?请帮忙。
答案 0 :(得分:2)
根据ARMv8 ISA:
CSET Wd, cond
条件集:Wd =如果cond则为1,否则为0。
表示指令执行条件集指令。什么是条件集指令?
条件集:有条件地在0和1或-1之间选择,例如将条件标志具体化为通用寄存器中的布尔值或掩码。
您可以将其转换为简单的三元操作:Wd = cond ? 1 : 0
。因此,如果cond
为true
,Wd = 1
。否则,Wd = 0
。
什么是 cond ?
cond - 标准ARM条件EQ,NE,CS | HS,CC | LO,MI,PL,VS,VC,HI,LS,GE,LT,GT,LE,AL或NV的含义与AArch32中的含义相同。请注意,虽然AL和NV代表不同 编码,如在AArch32中,它们都被解释为“永远真实”的条件。除非声明AArch64指令不设置或使用条件标志,但那些设置了所有条件标志。如果在伪代码表达式中使用,则此符号表示一个布尔值,其值是指定条件测试的真值。
答案 1 :(得分:2)
int yesOrNo(int value){返回值!= 0; }
英特尔:
0: 1e43 subs r3, r0, #1
2: 4198 sbcs r0, r3
4: 4770 bx lr
手臂拇指模式:
0: e2900000 adds r0, r0, #0
4: 13a00001 movne r0, #1
8: e12fff1e bx lr
手臂模式:
0: 6b1f001f cmp w0, wzr
4: 1a9f07e0 cset w0, ne
8: d65f03c0 ret
aarch64:
try:
obj.a = data['a']
obj.b = data['b']
obj.c = data['c']
except KeyError:
#Oops our data didn't have all we needed.
这是一个非常透明,在任何情况下都比上述任何一个更好的