ページへ戻る
印刷
OT/0004
をテンプレートにして作成 ::
OSASK計画
osaskwiki
:OT/0004 をテンプレートにして作成
開始行:
TITLE:x
* OSASKにおけるAPIのパラメータの渡し方
-[[OsaTech]]より
-(by [[K]], 2009.07.14)
*** (1)
-第一世代OSASKのAPIを規定するに当たって、最初に検討したの...
-当時の僕たちはパラメータの渡し方には、以下の3つがあると...
--レジスタ渡し
---BIOSのように、パラメータを所定のレジスタにいれ、APIを...
--スタック渡し
---C言語の関数のように、パラメータをスタックにつんで、API...
--ポインタ渡し
---すぐには例が思いつかないのだが、とにかくパラメータをメ...
-まずレジスタ渡しにはメリットがある。というのは、渡された...
--一説によれば、最近のプログラムは、結局このような値の格...
-しかし僕たちはレジスタ渡しを採用していない。というのは、...
-そして僕はポインタ渡しを強く推した。というのは、スタック...
-ということで、メモリにパラメータ列を並べて、その先頭アド...
*** (2)
-レジスタ渡しを避けたことで、一度のAPI呼び出しで渡せるパ...
--[機能番号 パラメータ パラメータ パラメータ ・・・] [機...
-メモリ上には、このようにパラメータ列の終わりに続けて次の...
*** (3)
-この2つの特徴が、OSASKをOSASKたらしめた大きな要素になっ...
-複数ファンクションを一度のAPIコールで実現できるので、一...
*** (4)
-以上は第一世代OSASKの話である。そして以下が第二世代OSASK...
-第二世代OSASKでも、レジスタ渡しや、一度のAPI呼び出しで複...
-まずポインタを格納するレジスタはEBXからEDIに変更した。こ...
-次に第二世代OSASKでは、パラメータのエンコードを見直した...
-そこでエンコードを4bit単位のものに変更した。必要なら8bit...
-さらに第二世代OSASKでは、引数の一部分に対して、「ここの...
-こうして結果的に、第二世代OSASKのAPIパケットは基本的に上...
--これはつまりCALL命令の直後にDBでAPIパケットを並べればい...
*** (5)
-第二世代OSASKにおけるAPIパケットの例:
-51 "hello, world\0"
--5はコンソールへの文字列出力ファンクション。この直後に4x...
--1は文字列の指定方式で、パケット内部に8bitのUCHAR配列が...
--hello, worldと表示するために、文字列以外でのオーバーヘ...
-50 8c "hello, world"
--これは文字列の指定方法を別のやり方にした例。0も8bitのUC...
-55 16 0
--最初の5はやはりコンソールへの文字列出力ファンクション。...
--結果として、putchar(EAX);になる。・・・これをやるのに普...
* こめんと欄
#comment
終了行:
TITLE:x
* OSASKにおけるAPIのパラメータの渡し方
-[[OsaTech]]より
-(by [[K]], 2009.07.14)
*** (1)
-第一世代OSASKのAPIを規定するに当たって、最初に検討したの...
-当時の僕たちはパラメータの渡し方には、以下の3つがあると...
--レジスタ渡し
---BIOSのように、パラメータを所定のレジスタにいれ、APIを...
--スタック渡し
---C言語の関数のように、パラメータをスタックにつんで、API...
--ポインタ渡し
---すぐには例が思いつかないのだが、とにかくパラメータをメ...
-まずレジスタ渡しにはメリットがある。というのは、渡された...
--一説によれば、最近のプログラムは、結局このような値の格...
-しかし僕たちはレジスタ渡しを採用していない。というのは、...
-そして僕はポインタ渡しを強く推した。というのは、スタック...
-ということで、メモリにパラメータ列を並べて、その先頭アド...
*** (2)
-レジスタ渡しを避けたことで、一度のAPI呼び出しで渡せるパ...
--[機能番号 パラメータ パラメータ パラメータ ・・・] [機...
-メモリ上には、このようにパラメータ列の終わりに続けて次の...
*** (3)
-この2つの特徴が、OSASKをOSASKたらしめた大きな要素になっ...
-複数ファンクションを一度のAPIコールで実現できるので、一...
*** (4)
-以上は第一世代OSASKの話である。そして以下が第二世代OSASK...
-第二世代OSASKでも、レジスタ渡しや、一度のAPI呼び出しで複...
-まずポインタを格納するレジスタはEBXからEDIに変更した。こ...
-次に第二世代OSASKでは、パラメータのエンコードを見直した...
-そこでエンコードを4bit単位のものに変更した。必要なら8bit...
-さらに第二世代OSASKでは、引数の一部分に対して、「ここの...
-こうして結果的に、第二世代OSASKのAPIパケットは基本的に上...
--これはつまりCALL命令の直後にDBでAPIパケットを並べればい...
*** (5)
-第二世代OSASKにおけるAPIパケットの例:
-51 "hello, world\0"
--5はコンソールへの文字列出力ファンクション。この直後に4x...
--1は文字列の指定方式で、パケット内部に8bitのUCHAR配列が...
--hello, worldと表示するために、文字列以外でのオーバーヘ...
-50 8c "hello, world"
--これは文字列の指定方法を別のやり方にした例。0も8bitのUC...
-55 16 0
--最初の5はやはりコンソールへの文字列出力ファンクション。...
--結果として、putchar(EAX);になる。・・・これをやるのに普...
* こめんと欄
#comment
ページ名: