5: 2009-11-17 (火) 12:08:14 [6] | 6: 2009-12-01 (火) 19:52:18 lina[7] [8] | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | * ASKAでOSASKアプリを作ってみよう、のページ | + | TITLE:x |
+ | * ASKAでOSASKアプリを作ってみよう、のページ [#s3c5247c] | ||
-(by [[K]], 2004.12.12) | -(by [[K]], 2004.12.12) | ||
-前半はnask編とほとんど同じです。 | -前半はnask編とほとんど同じです。 | ||
--nask編はこちら → [[guide/nask]] | --nask編はこちら → [[guide/nask]] | ||
- | *** まずは開発環境の入手 | + | *** まずは開発環境の入手 [#z9fc93ec] |
-この記述は数ヶ月以内に更新されそうですが、とりあえず現状重視で。 | -この記述は数ヶ月以内に更新されそうですが、とりあえず現状重視で。 | ||
-[[downloads/dev]]のページへ行って、''最新版''のところの、「tolset08」というやつをダウンロードしてください(lzhでもsarでもどっちでもOK)。 | -[[downloads/dev]]のページへ行って、''最新版''のところの、「tolset08」というやつをダウンロードしてください(lzhでもsarでもどっちでもOK)。 | ||
Line 10: | Line 11: | ||
-これをどこでもいいですので、適当なところに解凍します。 | -これをどこでもいいですので、適当なところに解凍します。 | ||
- | *** プロジェクト作成 | + | *** プロジェクト作成 [#acd950ca] |
-次に、新規にアプリを作りますので、z_new_oというディレクトリを探してください。これをコピーして、同じディレクトリにペーストします。すると、「コピー ~ z_new_o」とかいう名前のフォルダができます。これを「askahelo」にリネームしてください。 | -次に、新規にアプリを作りますので、z_new_oというディレクトリを探してください。これをコピーして、同じディレクトリにペーストします。すると、「コピー ~ z_new_o」とかいう名前のフォルダができます。これを「askahelo」にリネームしてください。 | ||
--もちろん他の好きな名前でもいいですよ。 | --もちろん他の好きな名前でもいいですよ。 | ||
Line 18: | Line 19: | ||
-最後にnaskheloの中で 右クリック→新規作成→テキストドキュメント とやって、新規テキストドキュメントを作ります。そしてこれを、「askahelo.ask」に改名します。拡張子を変更するとどうたらこーたらとかいいますが、無視してOKしてください。 | -最後にnaskheloの中で 右クリック→新規作成→テキストドキュメント とやって、新規テキストドキュメントを作ります。そしてこれを、「askahelo.ask」に改名します。拡張子を変更するとどうたらこーたらとかいいますが、無視してOKしてください。 | ||
- | *** ソース作成 | + | *** ソース作成 [#y71691d0] |
-さて、それではaskahelo.askを開いて、以下のソースをがしがしと入力してください。 | -さて、それではaskahelo.askを開いて、以下のソースをがしがしと入力してください。 | ||
--asmout文の中以外では、大文字小文字の区別があるので注意してください。 | --asmout文の中以外では、大文字小文字の区別があるので注意してください。 | ||
Line 84: | Line 85: | ||
- | *** どうやってアセンブルするの? | + | *** どうやってアセンブルするの? [#v2c5e547] |
-まず、コンソールを開きます。開き方は使っているOSによって違います。 | -まず、コンソールを開きます。開き方は使っているOSによって違います。 | ||
--Win2000, WinXPなどのNT系: !cons_nt.batをダブルクリック | --Win2000, WinXPなどのNT系: !cons_nt.batをダブルクリック | ||
Line 95: | Line 96: | ||
--nask版よりも1バイト小さいのは、ウィンドウタイトルの違いのせいです。ウィンドウタイトルを同じにすると、1バイトも違いません(サイズだけではなく、内容も)。 | --nask版よりも1バイト小さいのは、ウィンドウタイトルの違いのせいです。ウィンドウタイトルを同じにすると、1バイトも違いません(サイズだけではなく、内容も)。 | ||
- | *** どうやってテスト実行するの? | + | *** どうやってテスト実行するの? [#f739fe04] |
-同じくコンソールから、make runとだけうってEnterを押してください。 | -同じくコンソールから、make runとだけうってEnterを押してください。 | ||
-しばらく待っていると、勝手にOSASKがエミュレータ環境で起動します。 | -しばらく待っていると、勝手にOSASKがエミュレータ環境で起動します。 | ||
Line 101: | Line 102: | ||
-うまくいけばウィンドウが表示されます。 | -うまくいけばウィンドウが表示されます。 | ||
- | *** ほかのアセンブラになれている人へ | + | *** ほかのアセンブラになれている人へ [#mef0ee17] |
-ASKAはあまりおすすめできない''アセンブラ''です。読むのはそんなに大変ではないのですが、書くのはえらく骨が折れます。また、将来ASKAの文法はマシになるような気がするので、わざわざ今の癖の強い書き方を覚えることもないでしょう。 | -ASKAはあまりおすすめできない''アセンブラ''です。読むのはそんなに大変ではないのですが、書くのはえらく骨が折れます。また、将来ASKAの文法はマシになるような気がするので、わざわざ今の癖の強い書き方を覚えることもないでしょう。 | ||
-asmout文の中はnaskの文法で書きます。不明なところは[[guide/nask]]を見てください。 | -asmout文の中はnaskの文法で書きます。不明なところは[[guide/nask]]を見てください。 | ||
Line 111: | Line 112: | ||
-ASKAでは、 #define とか #include が使えます。 #if も #else も #endif もつかえます(というかCのプリプロセッサをそのまま使っています)。 | -ASKAでは、 #define とか #include が使えます。 #if も #else も #endif もつかえます(というかCのプリプロセッサをそのまま使っています)。 | ||
- | *** ほかのOSのAPIになれている人へ | + | *** ほかのOSのAPIになれている人へ [#v3292595] |
-OSASKではAPI呼び出しはメモリを経由したポインタ渡しです。メモリにファンクション番号とパラメータを並べて、その先頭アドレスをEBXにいれて、CALL 0xc7:0をするだけです。正常終了する限りにおいて、EBX以外のレジスタは保存されます(ファンクション0x04を除く)。フラグは保存されません。 | -OSASKではAPI呼び出しはメモリを経由したポインタ渡しです。メモリにファンクション番号とパラメータを並べて、その先頭アドレスをEBXにいれて、CALL 0xc7:0をするだけです。正常終了する限りにおいて、EBX以外のレジスタは保存されます(ファンクション0x04を除く)。フラグは保存されません。 | ||
-毎回.dataセクションにパラメータをだらだら書かないといけないのか、という誤解をする人がいますが、そんなことはありません。スタック渡しっぽいことも簡単にできます。たとえばfunc_initの呼び出しは、以下のようにやってもいいのです。 | -毎回.dataセクションにパラメータをだらだら書かないといけないのか、という誤解をする人がいますが、そんなことはありません。スタック渡しっぽいことも簡単にできます。たとえばfunc_initの呼び出しは、以下のようにやってもいいのです。 | ||
Line 123: | Line 124: | ||
--ということが面倒極まりないので、普通は全部のデータを.dataセクションにおきます。リードオンリーのデータも.dataセクションに置いちゃいます。そうすればややこしいセグメントに悩まされずに済みますからね。 | --ということが面倒極まりないので、普通は全部のデータを.dataセクションにおきます。リードオンリーのデータも.dataセクションに置いちゃいます。そうすればややこしいセグメントに悩まされずに済みますからね。 | ||
- | *** 雑な説明 | + | *** 雑な説明 [#h76e09bb] |
-結局のところ、これはAPI呼び出しCALLを5回やって、5つのAPIを実行しているだけです。 | -結局のところ、これはAPI呼び出しCALLを5回やって、5つのAPIを実行しているだけです。 | ||
-OSASKのAPIでは、必ず最後に終了ファンクション0x0000があります。これを書かないと、その次も通常ファンクションだとみなされます。逆にこの例の場合、5つのファンクションをつなげることもできるわけです。そうすればCALLは1回で済みます。 | -OSASKのAPIでは、必ず最後に終了ファンクション0x0000があります。これを書かないと、その次も通常ファンクションだとみなされます。逆にこの例の場合、5つのファンクションをつなげることもできるわけです。そうすればCALLは1回で済みます。 | ||
Line 137: | Line 138: | ||
-それぞれについてパラメータの意味などは上記の説明を参考にしてください。 | -それぞれについてパラメータの意味などは上記の説明を参考にしてください。 | ||
- | *** もっと詳しく説明してくれー | + | *** もっと詳しく説明してくれー [#fa4206ce] |
-そのうちやるかもしれません。このページは長くなったので別のページで。 | -そのうちやるかもしれません。このページは長くなったので別のページで。 | ||
-ほかのAPIとかも。 | -ほかのAPIとかも。 | ||
Line 146: | Line 147: | ||
--[[GUIGUI00_man]] | --[[GUIGUI00_man]] | ||
- | * こめんと欄 | + | * こめんと欄 [#lcf78b69] |
-ASKAによるプログラミングはおすすめしがたいところがあるので、このページはネタです。 -- [[K]] SIZE(10){2004-12-12 (日) 20:07:06} | -ASKAによるプログラミングはおすすめしがたいところがあるので、このページはネタです。 -- [[K]] SIZE(10){2004-12-12 (日) 20:07:06} | ||
-定数計算まわりのじゃじゃ馬なところが改善されて、naskレベルのラベルをthroughしてくれる機能があれば、結構おすすめできるんですけどねえ・・・。 -- [[K]] SIZE(10){2004-12-12 (日) 20:09:04} | -定数計算まわりのじゃじゃ馬なところが改善されて、naskレベルのラベルをthroughしてくれる機能があれば、結構おすすめできるんですけどねえ・・・。 -- [[K]] SIZE(10){2004-12-12 (日) 20:09:04} |
(This host) = http://osask.net