1

我设置了我的交叉编译器来制作 MIPS 指令。

它可以很好地编译 C 代码。

但我发现 NOT 操作很奇怪。

如果我像这样编写代码

   int a;
   func(!a);

我用教科书研究了 MIPS 指令,上面写着“MIPS 将 NOT 操作转换为‘也不为零’”

所以我认为它会转换为

 nor a a $zero

但我的编译器转换

xori a a 0x0
sltu a 1

////////////////////////////////我用'myaccount>> mipsel-编译了代码unknown-linux-gnu-gcc -S myfilename.c' 它使 myfilename.s 文件..

我错过了什么?

4

1 回答 1

1

您正在混淆“非”操作。“nor with 0”操作是~a(1 的补码),而您编写的是!a(如果操作数为 0,则返回 1,否则返回 0)。

于 2010-03-30T02:06:57.413 回答