-1

我编写了如下代码:

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');
}

这是一个将异或操作分解为更多指令的操作。我正在使用 gcc-6.3.0。即使我使用-O0标志进行编译,gcc 也会将其转换为反汇编中的一条xor指令。是否可以强制它使用标志编写那些特定的 asm 指令,或者我必须使用内联汇编语言?

4

1 回答 1

2

使用volatile应该避免这种优化:

for(i = 0; i < buffSize; i++)
{
    byte volatile b = arr[i];
    printf("%c", (b & ~key) | (key & ~b));
}

但是对于更高的优化级别,它也将保持未优化状态。

于 2019-03-18T22:50:55.067 回答