ページへ戻る

− Links

 印刷 

OT​/0004 のバックアップ差分(No.4) :: OSASK計画

osaskwiki:OT/0004 のバックアップ差分(No.4)

« Prev[4]  Next »[5]
3: 2009-07-15 (水) 08:52:59 ソース[6] 4: 2009-07-15 (水) 15:41:15 ソース[7]
Line 36: Line 36:
--これはつまりCALL命令の直後にDBでAPIパケットを並べればいいということである。 --これはつまりCALL命令の直後にDBでAPIパケットを並べればいいということである。
 +*** (5)
 +-第二世代OSASKにおけるAPIパケットの例:
 +-51 "hello, world\0"
 +--5はコンソールへの文字列出力ファンクション。この直後に4xを書くと標準出力以外にも出力できるが、ここでは何もしてないのでデフォルトのまま。
 +--1は文字列の指定方式で、パケット内部に8bitのUCHAR配列が格納されていることを意味している。そして0が終端。この終端コードも他の値にオーバーライド可能。
 +--hello, worldと表示するために、文字列以外でのオーバーヘッドは2バイトである(51と終端の0)。他のOSのAPIで、API-CALLのためのパラメータ設定でここまで少ない手間でできるものがあるだろうか。普通、8bitレジスタに何か値を代入するだけでも2バイトを消費する。もしくは-128~+127の値をスタックにつむだけでも2バイトを使う。
 +-50 8c "hello, world"
 +--これは文字列の指定方法を別のやり方にした例。0も8bitのUCHAR配列だが、配列長は終端制ではなく、事前に指定する方法。つぎの8cはgh4による0x0cを意味しているので、配列長は12バイトだと分かる。
 +-55 16 0
 +--最初の5はやはりコンソールへの文字列出力ファンクション。次の5は文字列モード解除。これにより、配列を利用しないか、もしくは仮に配列などが指定されても、その長さが出力すべき文字長だとは判断しなくなる。次の1は文字長。つまり1文字。次の60はEAXレジスタのこと。その値が文字コードと解釈されることとなる。ちなみに6で始まるのはレジスタやスタックの値を表す。
 +--結果として、putchar(EAX);になる。・・・これをやるのに普通のOSならどのくらい手間をかけるだろう。まあ、一文字表示は他のOSのほうが短いかもしれない。しかしそれは文字コードをALで指定している場合だけだろう。第二世代OSASKなら、EAX以外にもECXやEDXやEBXなどを指定できる(それぞれ61,62,63)。55 26 08 a などとすれば、printf("%c\n", EAX); もできる。
* こめんと欄 * こめんと欄
#comment #comment
« Prev[4]  Next »[5]