有关拆卸输出的问题

时间:2011-03-02 16:09:38

标签: assembly sparc

我有一个非常简单的测试程序:

void test()
{

  int a = 15;
  int b = 17;
  int c, d;


  c = a + b;
  d = a | c;
  printf("%d", d);
}

然后生成目标文件然后我反汇编目标文件以查看ADD和OR操作的指令字,如下所示:

 sparc-elf-objdump -d test.o 

由此产生的结果如下:

test.o:     file format elf32-sparc

Disassembly of section .text:

00000000 <test>:
   0:   11 00 00 00     sethi  %hi(0), %o0
   4:   90 12 20 00     mov  %o0, %o0   ! 0 <test>
   8:   92 10 20 2f     mov  0x2f, %o1
   c:   82 13 c0 00     mov  %o7, %g1
  10:   40 00 00 00     call  10 <test+0x10>
  14:   9e 10 40 00     mov  %g1, %o7
  18:   01 00 00 00     nop 

如您所见,它们既不是ADD指令也不是OR指令。 Anyeone知道为什么会这样吗?相当混乱......

非常感谢, 吉姆

2 个答案:

答案 0 :(得分:4)

编译器已经优化了你的代码 - 只需要d,它的值可以在编译时计算。

答案 1 :(得分:2)

您的指示

 c = 15 + 17 = 32

二进制

 100000 | 001111= 101111= 0x2f

在第8行,您会看到上面的数字。

   8:   92 10 20 2f     mov  0x2f, %o1

因此,编译器实际上已在编译时计算以减少指令,从而减少执行所需的大小和时间。

相关问题