为什么我的MIPS交叉编译器对于NOT操作这样工作?

时间:2010-03-30 01:58:30

标签: mips xor nor

我设置了我的交叉编译器来制作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文件..

我错过了什么?

1 个答案:

答案 0 :(得分:1)

你在混淆“不”操作。 “not with 0”操作是~a(1的补码),而你写!a(如果操作数为0则返回1,否则返回0)。