サイトトップへ
OSASK.NET
  サイトトップへ       新掲示板(閉鎖済)   Wiki(凍結済)   旧掲示板(廃止済)   ニュース(廃止済)  
3: 2008-12-30 (火) 12:24:30 ソース 4: 2009-01-03 (土) 19:52:47 ソース
Line 18: Line 18:
         MOV    EAX,msg          MOV    EAX,msg
         CALL    [ESI]          CALL    [ESI]
-         DB      0x50, 0x30, 0x30     ; [5 0 (!6_x) 3 EAX] [3] ; 5 0 (!6_x) 3 の後に(!6_0)がある+         DB      0x53, 0x00     ; [5 (0) (!6_x) 3 EAX] ; 5 (0) (!6_x) 3 の後に!6がある
         RET          RET
Line 34: Line 34:
 INCPATH    = ../z_tools/guigui01/  INCPATH    = ../z_tools/guigui01/
 include ../z_tools/com_mak.txt  include ../z_tools/com_mak.txt
--これを使ってmakeすると、77バイトのex0000.g01と57バイトのex0000.orgができるはずです。77バイトってC版(69バイト)よりも大きいじゃないか!と思うかもしれませんが、77バイトはtek5をかけた場合の大きさで、tek5しなければ57バイトなのです。つまり、.g01のほうは無視して、.orgのほうを使いましょう(.g01を消して.orgを.g01と改名してもいいです)。 +-これを使ってmakeすると、75バイトのex0000.g01と56バイトのex0000.orgができるはずです。75バイトってC版(68バイト)よりも大きいじゃないか!と思うかもしれませんが、75バイトはtek5をかけた場合の大きさで、tek5しなければ56バイトなのです。つまり、.g01のほうは無視して、.orgのほうを使いましょう(.g01を消して.orgを.g01と改名してもいいです)。 
--57バイトってどういうこと!?18バイトになるんじゃなかったの?・・・ええまあそうなんですが、いきなり18バイト版を書くのはハードルが高いので、最初はこれでよしとしてください。+-56バイトってどういうこと!?17バイトになるんじゃなかったの?・・・ええまあそうなんですが、いきなり17バイト版を書くのはハードルが高いので、最初はこれでよしとしてください。
---- ----
-次はcharsをやってみましょう。 -次はcharsをやってみましょう。
Line 51: Line 51:
 putcloop:  putcloop:
         CALL    [ESI]          CALL    [ESI]
-         DB      0x50, 0x51, 0x61, 0x03     ; [5 0 !5 1 AL] [3]+         DB      0x55, 0x16, 0xb8     ; [5 (0) !5 1 AL]
         INC      AL          INC      AL
         CMP      AL,0x7f          CMP      AL,0x7f
Line 57: Line 57:
         RET          RET
--Makefileはex0000.nasとほぼ同じなので省略しますね。これをmakeすると、46バイトのex0001.orgができます。やはり14バイトには遠く及ばないのですが、しかしCで書いたらこんなものではすまないので、アセンブラの優位性はしっかりと示されています。helloよりも小さくなったのは、やっぱり.dataセクションを作らないで済んでいるからというのが大きいです。+-Makefileはex0000.nasとほぼ同じなので省略しますね。これをmakeすると、45バイトのex0001.orgができます。やはり13バイトには遠く及ばないのですが、しかしCで書いたらこんなものではすまないので、アセンブラの優位性はしっかりと示されています。helloよりも小さくなったのは、やっぱり.dataセクションを作らないで済んでいるからというのが大きいです。
---- ----
-ということで、helloも.dataセクションなしで書いてみることにします。 -ということで、helloも.dataセクションなしで書いてみることにします。
Line 71: Line 71:
 _G01Main:  _G01Main:
         CALL    [ESI]          CALL    [ESI]
-         DB      0x50, 0x10, "hello, wolrd", 0, 0x30+         DB      0x51, "hello, wolrd", 0
         RET          RET
-こんな風に書けば、ポインタ指定なしで直接データを置けるので、.dataセクションはいりません。 -こんな風に書けば、ポインタ指定なしで直接データを置けるので、.dataセクションはいりません。
--これをmakeすると、50バイトのex0002.orgができます。7バイトの減量ですね。+-これをmakeすると、48バイトのex0002.orgができます。8バイトの減量ですね。
---- ----
-もっと小さくしたいということなら(まあ普通はそこまでやる必要はなくてex0000レベルで十分なのですが・・・というか「ぐいぐい01」でありさえすればC版でも十分)、20バイト以上ある標準のC向けのスターアップルーチンを使わないようにするという選択肢があります。これはリンカも使わないということです(リンカは勝手にスタートアップを使おうとするので)。難易度は結構高いです。.text以外のセクションを使っている場合は、これはやらないほうがいいでしょう。リンカなしで.dataセクションを扱うのは至難の業です。 -もっと小さくしたいということなら(まあ普通はそこまでやる必要はなくてex0000レベルで十分なのですが・・・というか「ぐいぐい01」でありさえすればC版でも十分)、20バイト以上ある標準のC向けのスターアップルーチンを使わないようにするという選択肢があります。これはリンカも使わないということです(リンカは勝手にスタートアップを使おうとするので)。難易度は結構高いです。.text以外のセクションを使っている場合は、これはやらないほうがいいでしょう。リンカなしで.dataセクションを扱うのは至難の業です。
Line 89: Line 89:
 _G01Main:  _G01Main:
         CALL    [ESI]          CALL    [ESI]
-         DB      0x50, 0x10, "hello, wolrd", 0, 0x30+         DB      0x51, "hello, wolrd", 0
         RET          RET
-こんな感じです。これはもうリンカとかは使わないので、Makefileなしでmakeします。 -こんな感じです。これはもうリンカとかは使わないので、Makefileなしでmakeします。
 efg01 ../z_tools/nask.g01 ex0003.nas ex0003.g01 ex0003.lst  efg01 ../z_tools/nask.g01 ex0003.nas ex0003.g01 ex0003.lst
--これで22バイトの.g01ができます。ついにきました。一気に「ぐいぐい01」らしいサイズです。+-これで20バイトの.g01ができます。ついにきました。一気に「ぐいぐい01」らしいサイズです。
---- ----
--ここまできたらせっかくなので18バイトまで行きますかね(笑)。まず、.textの末尾のRETは省略できます。また、APIパケットは今、 [5 0 1 "hello, wolrd" 0] [3] になっているのですが、この最後の4bitの3を、1の後の「隙間の埋め用」の0のところに入れてもいい事になっています。さらに簡易形式用ヘッダの最後の4のところに1を足して5にしておけば、最初の CALL [ESI] を省略できます。+-ここまできたらせっかくなので17バイトまで行きますかね(笑)。まず、.textの末尾のRETは省略できます。さらに簡易形式用ヘッダの最後の4のところに1を足して5にしておけば、最初の CALL [ESI] を省略できます。
 ; ex0004.nas  ; ex0004.nas
 [FORMAT "BIN"]  [FORMAT "BIN"]
Line 107: Line 107:
 _G01Main:  _G01Main:
-         DB      0x50, 0x13, "hello, wolrd", 0+         DB      0x51, "hello, wolrd", 0
--これで完成です。これをnaskするとめでたく18バイトになります。・・・こんなDBしかないプログラムであれば、バイナリエディタだけで作ったほうが早いですけどね。+-これで完成です。これをnaskするとめでたく17バイトになります。・・・こんなDBしかないプログラムであれば、バイナリエディタだけで作ったほうが早いですけどね。
* こめんと欄 * こめんと欄
 +- abcdw009向けの記述に修正。 -- [[K]] &new{2009-01-03 (土) 19:52:47};
#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コミュニティによって管理・運営されています。