サイトトップへ
OSASK.NET
  サイトトップへ       新掲示板(閉鎖済)   Wiki(凍結済)   旧掲示板(廃止済)   ニュース(廃止済)  
1: 2009-07-14 (火) 22:13:32 ソース
Line 1: Line 1:
 +* APIのパラメータの渡し方
 +-[[OsaTech]]より
 +-(by [[K]], 2009.07.14)
 +*** (1)
 +-第一世代OSASKのAPIを規定するに当たって、最初に検討したのはパラメータの渡し方だったように思う。これはOSASK-MLが始まる前から[[K]]と今原氏とで検討した。
 +-当時の僕たちはパラメータの渡し方には、以下の3つがあると考えた。
 +--レジスタ渡し
 +---BIOSのように、パラメータを所定のレジスタにいれ、APIを呼び出す。
 +--スタック渡し
 +---C言語の関数のように、パラメータをスタックにつんで、APIを呼び出す。
 +--ポインタ渡し
 +---すぐには例が思いつかないのだが、とにかくパラメータをメモリのどこかに所定の順序で並べて、その先頭アドレスをレジスタに入れて、APIを呼び出す。
 +-まずレジスタ渡しにはメリットがある。というのは、渡されたパラメータがメモリではなくレジスタ上にあるということだ。どんなパラメータにせよ、OSに渡す以上は、その値は当然OSに利用される。そしてOSが利用するということは、その値をレジスタに読んで計算したりI/Oしたりするということである。・・・スタック渡しやポインタ渡しは、アプリで計算したものを一度わざわざメモリに置き、そしてその値をOSが読むのである。これは大いに無駄である。
 +--一説によれば、最近のプログラムは結局、このような値の格納と読み取りという、実質的な処理ではないようなことに処理の時間の大半を費やしているとも言われる。CPUが速くなってもソフトが速くならないのは、そういう改悪が進んでいるからだと。
 +-しかし僕たちはレジスタ渡しを採用していない。というのは、x86ではとにかくレジスタが少なくて、結局一度メモリにレジスタの値を退避してからでなければ何も始められず、それならスタック渡しやポインタ渡しでも差は無いからである。
 +-そして僕はポインタ渡しを強く推した。というのは、スタックにパラメータをつんでも、EBX=ESP;などによってスタックトップのアドレスをポインタとして渡せば、ポインタ渡しでもスタック渡しと同じことが出来るからである。この場合純粋なスタック渡しと比べて劣るのはEBX=ESP;の1命令分だけで、これはスタック以外にもパラメータを置けるようになることを思えば、悪くない代償である。
 +-ということで、メモリにパラメータ列を並べて、その先頭アドレスをEBXにいれて、APIを呼び出すというのが、第一世代OSASKの基本形になった。
 +
 +*** (2)
 +
 +* こめんと欄
 +#comment

トップ   差分 バックアップ 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ
新着

目次
メンバー一覧


最新の20件
2016-10-01 2016-09-08
  • @MenuBar.
2016-09-07 2016-09-04 2016-08-15 2015-09-23 2014-07-30 2014-07-04 2014-02-04 2013-10-26 2013-06-21 2013-06-17 2013-06-15 2013-04-02 2013-02-09 2013-02-04 2012-12-25 2012-12-01 2012-05-28 2012-03-31

トピック一覧
一般用コメント最新
新掲示板lina
2016/9/5 20:58
SandBoxゲスト
2016/9/4 12:01
RecentDeletedlina
2015/6/2 19:29
Old-OSASK-MLlina
2014/6/29 9:14
hideyosi/メールhideyosi
2014/1/6 20:17
hideyosi/募集中lina
2013/11/8 19:56

このサイトは川合秀実から委託を受けて、OSASKコミュニティによって管理・運営されています。