|
| |
概説。。。。。そんなだいそれたものではないです。
原理的な話を少し。

 | 掛け算
imul eax,ebx
a*bです、多くの方は結果はeaxに格納されるものを使用されるでしょう。
コンパイラの吐き出すコードもそうです。
でも、本当の結果はedxとeaxに格納されるんです。
何故か?、32ビット*32ビットの結果を格納するのには64ビット必要だからです。
ただ通常結果も32ビット整数に受け取りますし、結果が32ビットを越えるような掛け算は、整数演算の世界ではあまり利用しないでしょう。
しかし、固定小数点の世界では、このedxに大いに活躍してもらわなければなりません。
整数とは言っても所詮第0ビットの重みが1で第1ビットの重みが2、さらに左のビットの重みが4,8,16.....という重みで考えているだけで、実際の演算器はそんなことおかまいなしなんです。0と1のビット列の加減乗除を行っているだけです。
そう考えれば、極端な話、第30ビットの重みは0.5(2^-1)、第29ビットの重みは0.25(2^-2)としてビット列を扱ったっていいんです。
でもそのように、小数点の位置があたかも第30ビットの前にあるように考えた0.5なんですが、整数演算器にとっては単に0x40000000というビット列にすぎません。
以下、工事中。しばらくお待ち下さい |
|