サイトトップへ
OSASK.NET
  サイトトップへ       新掲示板(閉鎖済)   Wiki(凍結済)   旧掲示板(廃止済)   ニュース(廃止済)  
7: 2004-12-17 (金) 11:54:55 ソース 現: 2024-01-08 (月) 12:58:56 k-tan ソース
Line 1: Line 1:
-* naskでOSASKアプリを作ってみよう、のページ+TITLE:x 
 +* naskでOSASKアプリを作ってみよう、のページ [#j877c256]
-(by [[K]], 2004.12.11) -(by [[K]], 2004.12.11)
-そもそもnaskってなによ、っていうのがあると思いますが、naskは[[K]]が作ったアセンブラです。 -そもそもnaskってなによ、っていうのがあると思いますが、naskは[[K]]が作ったアセンブラです。
--より詳しくはこちら → [[Z:GO/nask]] --より詳しくはこちら → [[Z:GO/nask]]
-*** まずは開発環境の入手+*** まずは開発環境の入手 [#y31fc570]
-この記述は数ヶ月以内に更新されそうですが、とりあえず現状重視で。 -この記述は数ヶ月以内に更新されそうですが、とりあえず現状重視で。
--[[downloads/dev]]のページへ行って、''最新版''のところの、「osa_dir2」というやつをダウンロードしてください。+//-[[downloads/dev]]のページへ行って、''最新版''のところの、「osa_dir2」というやつをダウンロードしてください。 
 +-[[downloads/dev]]のページへ行って、''最新版''のところの、「tolset08」というやつをダウンロードしてください(lzhでもsarでもどっちでもOK)。
--2MB強ありますが、これはCコンパイラとかテストラン用のOSASKやエミュレータなどが入っているせいです。すみません。 --2MB強ありますが、これはCコンパイラとかテストラン用のOSASKやエミュレータなどが入っているせいです。すみません。
-これをどこでもいいですので、適当なところに解凍します。 -これをどこでもいいですので、適当なところに解凍します。
-*** プロジェクト作成+*** プロジェクト作成 [#g7cfda6c]
-次に、新規にアプリを作りますので、z_new_oというディレクトリを探してください。これをコピーして、同じディレクトリにペーストします。すると、「コピー ~ z_new_o」とかいう名前のフォルダができます。これを「naskhelo」にリネームしてください。 -次に、新規にアプリを作りますので、z_new_oというディレクトリを探してください。これをコピーして、同じディレクトリにペーストします。すると、「コピー ~ z_new_o」とかいう名前のフォルダができます。これを「naskhelo」にリネームしてください。
--もちろん他の好きな名前でもいいですよ。 --もちろん他の好きな名前でもいいですよ。
Line 18: Line 20:
-最後にnaskheloの中で 右クリック→新規作成→テキストドキュメント とやって、新規テキストドキュメントを作ります。そしてこれを、「naskhelo.nas」に改名します。拡張子を変更するとどうたらこーたらとかいいますが、無視してOKしてください。 -最後にnaskheloの中で 右クリック→新規作成→テキストドキュメント とやって、新規テキストドキュメントを作ります。そしてこれを、「naskhelo.nas」に改名します。拡張子を変更するとどうたらこーたらとかいいますが、無視してOKしてください。
-*** ソース作成+*** ソース作成 [#h0130fbb]
-さて、それではnaskhelo.nasを開いて、以下のソースをがしがしと入力してください。 -さて、それではnaskhelo.nasを開いて、以下のソースをがしがしと入力してください。
--ニーモニックやレジスタ名が大文字になっていますが、もちろん小文字でも構いません。 --ニーモニックやレジスタ名が大文字になっていますが、もちろん小文字でも構いません。
Line 41: Line 43:
     CALL 0xc7:0      CALL 0xc7:0
 ; 永久スリープなので帰ってこない  ; 永久スリープなので帰ってこない
 + 
 [SECTION .data]  [SECTION .data]
     ALIGNB 4      ALIGNB 4
 + 
 func_init:  func_init:
     DD 0x0004, work, 0x0000      DD 0x0004, work, 0x0000
 ;  ファンクション番号0x04(API初期化), ワークエリアのポインタ, 終了ファンクション番号0x00  ;  ファンクション番号0x04(API初期化), ワークエリアのポインタ, 終了ファンクション番号0x00
 + 
 func_openwin:  func_openwin:
     DD 0x0020, window, 0x0200, 18 * 8, 3 * 16, 0x0000      DD 0x0020, window, 0x0200, 18 * 8, 3 * 16, 0x0000
 ;  ファンクション番号0x20(ウィンドウオープン), window構造体のポインタ, スロット番号0x200, xサイズ(ドット単位), yサイズ(ドット単位),  ;  ファンクション番号0x20(ウィンドウオープン), window構造体のポインタ, スロット番号0x200, xサイズ(ドット単位), yサイズ(ドット単位),
 ;      終了ファンクション番号0x00  ;      終了ファンクション番号0x00
 + 
 func_titlebox:  func_titlebox:
     DD 0x0028, 0x1000, wintitle, 0, 8, 1, 0, 0, window, 0x00c0, 0, 0x0000      DD 0x0028, 0x1000, wintitle, 0, 8, 1, 0, 0, window, 0x00c0, 0, 0x0000
Line 59: Line 61:
 ;      xサイズ(キャラクタ単位), yサイズ(キャラクタ単位), 表示x位置0, 表示y位置0, window構造体のポインタ,  ;      xサイズ(キャラクタ単位), yサイズ(キャラクタ単位), 表示x位置0, 表示y位置0, window構造体のポインタ,
 ;      標準キャラクタセット使用(0x00c0), リザーブ0, 終了ファンクション番号0x00  ;      標準キャラクタセット使用(0x00c0), リザーブ0, 終了ファンクション番号0x00
 + 
 func_settitle:  func_settitle:
     DD 0x0040, 0x1000, 0, 0, wintitle, 0, 0, 0, 8, "naskhelo", 0x0000      DD 0x0040, 0x1000, 0, 0, wintitle, 0, 0, 0, 8, "naskhelo", 0x0000
 ;  ファクション番号0x40(テキスト表示), オプション0x1000(8bitキャラクタモード),  表示x位置0, 表示y位置0, textbox構造体のポインタ,  ;  ファクション番号0x40(テキスト表示), オプション0x1000(8bitキャラクタモード),  表示x位置0, 表示y位置0, textbox構造体のポインタ,
 ;      文字色0, 背景色0, キャラクタコードオフセット0, 文字数8, 文字列"naskhelo", 終了ファンクション番号0x00  ;      文字色0, 背景色0, キャラクタコードオフセット0, 文字数8, 文字列"naskhelo", 終了ファンクション番号0x00
 + 
 func_sleep:  func_sleep:
     DD 0x0018, 0x0001, 0, 0, 0x0000      DD 0x0018, 0x0001, 0, 0, 0x0000
 ;  ファンクション番号0x0018(シグナル関係の処理), オプション1(スリープ), パラメータ0, パラメータ0, 終了ファンクション番号0x00  ;  ファンクション番号0x0018(シグナル関係の処理), オプション1(スリープ), パラメータ0, パラメータ0, 終了ファンクション番号0x00
 + 
     ALIGNB 16 ; 本当はalign8で十分(ただの気分で16にしてしまった)      ALIGNB 16 ; 本当はalign8で十分(ただの気分で16にしてしまった)
 work:  work:
Line 77: Line 79:
     RESB  64 ; テキストボックス構造体      RESB  64 ; テキストボックス構造体
     RESB  8 * 1 * 8 ; 8文字分      RESB  8 * 1 * 8 ; 8文字分
 + 
- +*** どうやってアセンブルするの? [#q4b118d4]
-*** どうやってアセンブルするの?+
-まず、コンソールを開きます。開き方は使っているOSによって違います。 -まず、コンソールを開きます。開き方は使っているOSによって違います。
--Win2000, WinXPなどのNT系: !cons_nt.batをダブルクリック --Win2000, WinXPなどのNT系: !cons_nt.batをダブルクリック
Line 86: Line 88:
-これだけでリンクまで全自動でやってくれます。 -これだけでリンクまで全自動でやってくれます。
-できたアプリは、naskhelo.binです。 -できたアプリは、naskhelo.binです。
---osa_dir2で作った場合は多分161バイトです。+//--osa_dir2で作った場合は多分161バイトです。 
 +--tolset08で作った場合は多分127バイトです。
-*** どうやってテスト実行するの?+*** どうやってテスト実行するの? [#xa59c86f]
-同じくコンソールから、make runとだけうってEnterを押してください。 -同じくコンソールから、make runとだけうってEnterを押してください。
-しばらく待っていると、勝手にOSASKがエミュレータ環境で起動します。 -しばらく待っていると、勝手にOSASKがエミュレータ環境で起動します。
Line 94: Line 97:
-うまくいけばウィンドウが表示されます。 -うまくいけばウィンドウが表示されます。
-*** ほかのアセンブラになれている人へ+*** ほかのアセンブラになれている人へ [#a0a46fbd]
-naskはMASMとかとは少し文法が違います。NASMの文法とほとんど同じです。 -naskはMASMとかとは少し文法が違います。NASMの文法とほとんど同じです。
-GLOBAL文はいわゆるPUBLIC文です。 -GLOBAL文はいわゆるPUBLIC文です。
Line 102: Line 105:
     MOV EBX,[func_init]      MOV EBX,[func_init]
-こうすればEBXには4が入ります。 -こうすればEBXには4が入ります。
--[section .bss]を使えばBSSも使えるはずなのですが、osa_dir2のnaskは古いので、うまくいきません。全部.dataセクションにいれちゃってください。大丈夫です、オールゼロのデータは適当に圧縮されるのでほとんど問題ありません。 +-tolset08のnaskは新しいやつなので、[section .bss]も使えます。bssセクションでは、RESB/RESW/RESDしかつかえませんが。 
---.bssが使えるバージョンをパッケージしたらここの記述は直しますね。+//-[section .bss]を使えばBSSも使えるはずなのですが、osa_dir2のnaskは古いので、うまくいきません。全部.dataセクションにいれちゃってください。大丈夫です、オールゼロのデータは適当に圧縮されるのでほとんど問題ありません。 
 +//--.bssが使えるバージョンをパッケージしたらここの記述は直しますね。
-RESB文は何かと言うと、DB dupみたいなものです。 RESB 256 は DB 256 dup (0) に相当します。 -RESB文は何かと言うと、DB dupみたいなものです。 RESB 256 は DB 256 dup (0) に相当します。
--NASMもnaskでも、DBなどでdup構文を使うことはできません。 --NASMもnaskでも、DBなどでdup構文を使うことはできません。
-*** ほかのOSのAPIになれている人へ+*** ほかのOSのAPIになれている人へ [#h35f30db]
-OSASKではAPI呼び出しはメモリを経由したポインタ渡しです。メモリにファンクション番号とパラメータを並べて、その先頭アドレスをEBXにいれて、CALL 0xc7:0をするだけです。正常終了する限りにおいて、EBX以外のレジスタは保存されます(ファンクション0x04を除く)。フラグは保存されません。 -OSASKではAPI呼び出しはメモリを経由したポインタ渡しです。メモリにファンクション番号とパラメータを並べて、その先頭アドレスをEBXにいれて、CALL 0xc7:0をするだけです。正常終了する限りにおいて、EBX以外のレジスタは保存されます(ファンクション0x04を除く)。フラグは保存されません。
-毎回.dataセクションにパラメータをだらだら書かないといけないのか、という誤解をする人がいますが、そんなことはありません。スタック渡しっぽいことも簡単にできます。たとえばfunc_initの呼び出しは、以下のようにやってもいいのです。 -毎回.dataセクションにパラメータをだらだら書かないといけないのか、という誤解をする人がいますが、そんなことはありません。スタック渡しっぽいことも簡単にできます。たとえばfunc_initの呼び出しは、以下のようにやってもいいのです。
Line 119: Line 123:
--ということが面倒極まりないので、普通は全部のデータを.dataセクションにおきます。リードオンリーのデータも.dataセクションに置いちゃいます。そうすればややこしいセグメントに悩まされずに済みますからね。 --ということが面倒極まりないので、普通は全部のデータを.dataセクションにおきます。リードオンリーのデータも.dataセクションに置いちゃいます。そうすればややこしいセグメントに悩まされずに済みますからね。
-*** 雑な説明+*** 雑な説明 [#xe58b860]
-結局のところ、これはAPI呼び出しCALLを5回やって、5つのAPIを実行しているだけです。 -結局のところ、これはAPI呼び出しCALLを5回やって、5つのAPIを実行しているだけです。
-OSASKのAPIでは、必ず最後に終了ファンクション0x0000があります。これを書かないと、その次も通常ファンクションだとみなされます。逆にこの例の場合、5つのファンクションをつなげることもできるわけです。そうすればCALLは1回で済みます。 -OSASKのAPIでは、必ず最後に終了ファンクション0x0000があります。これを書かないと、その次も通常ファンクションだとみなされます。逆にこの例の場合、5つのファンクションをつなげることもできるわけです。そうすればCALLは1回で済みます。
Line 133: Line 137:
-それぞれについてパラメータの意味などは上記の説明を参考にしてください。 -それぞれについてパラメータの意味などは上記の説明を参考にしてください。
-*** もっと詳しく説明してくれー+*** もっと詳しく説明してくれー [#kb19841c]
-そのうちやるかもしれません。このページは長くなったので別のページで。 -そのうちやるかもしれません。このページは長くなったので別のページで。
-ほかのAPIとかも。 -ほかのAPIとかも。
Line 143: Line 147:
--[[GUIGUI00_man]] --[[GUIGUI00_man]]
-* こめんと欄+* こめんと欄 [#e89ccf35]
-直ってしまったので、勝手に修正してしまいました。コメントアウトしてあります。 -- ''Zakky'' SIZE(10){2004-12-11 (土) 20:23:30} -直ってしまったので、勝手に修正してしまいました。コメントアウトしてあります。 -- ''Zakky'' SIZE(10){2004-12-11 (土) 20:23:30}
-どうもありがとう。助かりました。 -- [[K]] SIZE(10){2004-12-11 (土) 20:52:16} -どうもありがとう。助かりました。 -- [[K]] SIZE(10){2004-12-11 (土) 20:52:16}
Line 151: Line 155:
-続編作りました。> [[guide/wintro0000]] この先も、たまに続きを書きますね。 -- [[K]] SIZE(10){2004-12-13 (月) 16:40:05} -続編作りました。> [[guide/wintro0000]] この先も、たまに続きを書きますね。 -- [[K]] SIZE(10){2004-12-13 (月) 16:40:05}
-naskでAPI引数が分かりにくいと思う人は, nasmでマクロを使おう! と言ってみるテスト。私のnasmアプリはほぼ全てそう。 -- [[I.Tak.]] SIZE(10){2004-12-17 (金) 11:54:54} -naskでAPI引数が分かりにくいと思う人は, nasmでマクロを使おう! と言ってみるテスト。私のnasmアプリはほぼ全てそう。 -- [[I.Tak.]] SIZE(10){2004-12-17 (金) 11:54:54}
- +-tolset08を前提に改訂。 -- [[K]] SIZE(10){2005-01-28 (金) 22:49:31} 
-#comment+//#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コミュニティによって管理・運営されています。