デフォルトの名無しさん :01/10/22 19:30
以下 解答してください

問2
a = 5+(6+(7+b));

をコンパイルした結果はどうなるかを、自分の頭で考えて示せ。

a = 0+(1+(2+(3+(4+(5+(6+(7+b)))))))-(0+(1+(2+(3+(4+(5+(6+(7+b))))))));

は、どうなるだろうか? 自分が、どのように考えて、その結果を出したのか、そして、それをアルゴリズムにするにはどうすれば良いのかを考えよう。

ヒント
まず式を木の形に書いて、構造を調べる
push, pop を使ってスタックを使う方法もある

実際のコンパイラの出力と比較してみよう。


--------------------------------------------------------------------------------

問2
上のプログラムをIntel CPU上で、gcc -O -S test.c を使ってコンパイルすると最適化がかかる。最適化した場合としない場合で、どのような違いが出るか? (ヒント diff を使うと簡単...)
問1で、これらの結果を実際のアセンブラで実行しテストするには、どうすれば良いか考えて実行せよ。

これらの命令が実際に生成されるCのソースコードを考えて、それをコンパイラに通し、実際に命令が生成されることを確認せよ。(ただし、データのアドレスは、変わっても良いとする)