2: 2008-12-23 (火) 15:30:18 [6] | 3: 2008-12-23 (火) 15:30:18 [7] | ||
---|---|---|---|
Line 3: | Line 3: | ||
-メモのうち重要な部分をそのうちまとめてまともなページを作る | -メモのうち重要な部分をそのうちまとめてまともなページを作る | ||
*** (30) helloの改良の歴史 (118→18) | *** (30) helloの改良の歴史 (118→18) | ||
- | -(参考として)''DOS'' | + | -(参考として)''DOS''の.COM形式: |
--22バイトが限界 | --22バイトが限界 | ||
--ヘッダとかはない。AHとDXに代入してINT21H。終了はRETでいい。 | --ヘッダとかはない。AHとDXに代入してINT21H。終了はRETでいい。 | ||
Line 28: | Line 28: | ||
-''27バイトのhello'': | -''27バイトのhello'': | ||
--DOS版が22バイトなのは16bitだからしょうがないと思えたが、「はりぼてOS」に負けたのは屈辱的だった。そこで設計をやり直す。 | --DOS版が22バイトなのは16bitだからしょうがないと思えたが、「はりぼてOS」に負けたのは屈辱的だった。そこで設計をやり直す。 | ||
- | --適当な標準値を設けてそれを変更する方式で、スタックサイズなどを記述させることに。標準値は小規模プログラムには十分な値なので、helloでは変更の必要が全くない。 | + | --適当な標準値を設けてそれを必要に応じて変更する方式で、スタックサイズなどを記述させることに。標準値は小規模プログラムには十分な値なので、helloでは変更の必要が全くない。 |
- | --またパケット要素を32bit固定長からeh4という4bit単位可変長エンコードに変更(のちにgh4にアップグレードするがhelloは影響なし)。小さい数値なら4bitで収まるので、パケット効率8倍に! | + | --またパケット要素を32bit固定長から、eh4という4bit単位可変長エンコードに変更(のちにgh4にアップグレードするがhelloは影響なし)。小さい数値なら4bitで収まるので、パケット効率8倍に! |
--またレジスタ初期値を工夫したので、EBPの値を破壊しない限り、CALL(EBP)の2バイトでAPI-callができるようになった(EBXを変更しなければEIPからパケットが始まると見なされる)。終了もDOSと同じくRETだけでもOKに。初期化funcはシステムが事前に適当にやってくれるので、それを変更したいとき以外は省略可能。 | --またレジスタ初期値を工夫したので、EBPの値を破壊しない限り、CALL(EBP)の2バイトでAPI-callができるようになった(EBXを変更しなければEIPからパケットが始まると見なされる)。終了もDOSと同じくRETだけでもOKに。初期化funcはシステムが事前に適当にやってくれるので、それを変更したいとき以外は省略可能。 | ||
--旧OSASKでは8バイトもあったシグネチャを2バイトに。 | --旧OSASKでは8バイトもあったシグネチャを2バイトに。 |
(This host) = http://osask.net