lvyc 发表于 2009-06-22 16:52

汇编疑问

在编写循环的代码中
   for(i =0; i < n; i++)
            v +=i;
我们发现下面的汇编代码行
   xor1 %edx, %edx
请解释为什么我们的C代码中没有EXCLUSIVE-OR(异或)运算符, 这里却会有这样的指令
这个指令实现的是C 程序中的什么操作?
《深入理解计算机系统》p123

问题 :
          我反汇编了一下,并没有看到这个指令的。
            xor1 %edx, %edx
GCC version:
         gcc 4.1.2
            OS: FC8 IA-32
麻烦帮忙解答一下。多谢~!

Cyberman.Wu 发表于 2009-06-22 19:00

你上了个半拉让别人怎么看?我估计这里edx对应C源代码中的i吧,异或就把它清零了。

prolj 发表于 2009-06-22 21:53

深入理解计算机系统 是gcc2.9吧?
问题 :
      我的源代码里面没有冗余计算,为什么编译器里面的局部冗余消除算法到处都是呢?为什么还玩儿全局冗余消除么?为什么还玩儿LTO呢?
答 :
      因为编译器不听话,完毕。

lvyc 发表于 2009-06-23 08:31

谢谢楼上的回答. 刚刚用gcc-3.4 编译看了.的确看到了这个指令.

cjaizss 发表于 2009-06-23 16:45

异或自身结果会是0,这个指令用于清0
页: [1]
查看完整版本: 汇编疑问