by tak » 2007年3月04日(日) 01:46
少し補足します。
この方法では、何らかの方法でメモリ領域を確保し、そこに機械語列を格納します。
したがってインラインアセンブラのようにプログラムの任意の位置に機械語列を埋め込めるわけではありません。
自分で書いた機械語を実行するためには、そのメモリ領域へ明示的にジャンプする必要があります。
オリジナル機械語列が任務を完遂したら、今度は処理を本流(ジャンプ元)に戻すこともしなければなりません。
これって結局、単なるプロシージャ呼び出しのことですよね。
アセンブラや生の機械語列を使ってまで強力に高速化したいということは、オリジナル機械語列に突入するジャンプと復帰の手間すら惜しいような場面なのでしょう。
それを考えると、ジャンプ必須となってしまうこの方法を使う気はしません。
ちなみに、Pentiumで言う C3 と C2 は ret(near), CB は ret(far) のことですね…
オペコードを覚えているわけではないので、調べるのが少々面倒でした。
少し補足します。
この方法では、何らかの方法でメモリ領域を確保し、そこに機械語列を格納します。
したがってインラインアセンブラのようにプログラムの任意の位置に機械語列を埋め込めるわけではありません。
自分で書いた機械語を実行するためには、そのメモリ領域へ明示的にジャンプする必要があります。
オリジナル機械語列が任務を完遂したら、今度は処理を本流(ジャンプ元)に戻すこともしなければなりません。
これって結局、単なるプロシージャ呼び出しのことですよね。
アセンブラや生の機械語列を使ってまで強力に高速化したいということは、オリジナル機械語列に突入するジャンプと復帰の手間すら惜しいような場面なのでしょう。
それを考えると、ジャンプ必須となってしまうこの方法を使う気はしません。
ちなみに、Pentiumで言う C3 と C2 は ret(near), CB は ret(far) のことですね…
オペコードを覚えているわけではないので、調べるのが少々面倒でした。