我已经编写了看起来像这样的代码:
char* xor_and_print(byte arr[], size_t buffSize, byte key)
{
size_t i;
for(i = 0; i < buffSize; i++)
{
printf("%c", (arr[i] & ~key) | (key & ~arr[i]));
}
putchar('n');
}
这是一个XOR操作,被吹入更多说明中。我正在使用GCC-6.3.0。即使我使用-O0
标志编译,GCC也将其转换为拆卸中的一个xor
指令。是否有可能将其胁迫写入标志的特定ASM指令,或者我必须使用内联汇编语言?
使用volatile
应避免此优化:
for(i = 0; i < buffSize; i++)
{
byte volatile b = arr[i];
printf("%c", (b & ~key) | (key & ~b));
}
,但它也将保持不优化的优化水平。