在下面的C函数中,我们对OP操作的定义是不完整的:
#define OP /* Unknown operator*/ long arith(long x) { return x OP 8; }
当编译时,GCC会产生如下汇编代码:
long arith(long x) x in %rdi arith: leaq 7(%rdi), %rax testq %rdi, %rdi cmovns %rdi, %rax sarq $3, %rax ret
A. OP进行的是什么操作?
B.给代码添加注释,解释它是如何工作的。