[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[OSASK 00115] cpy0b.


  こんばんは、川合です。

  naskなどを.g01化したのでリリースします。あとgas2naskのバグ修正
版なども入っています。実行に際しては当然efg01も必要なので、
abcdw005を先に準備しておいてください。今回のアーカイブ名は、各種
の事情によりcpy0b.sarです(事情はドキュメント参照)。

    http://osask.jp/files/

  説明はまたドキュメントの丸写しで代用します。

  今度こそ長期で休みます・・・。

  ついででまことに申し訳ないですが、zakkyさん、先日はosask.jpの
トップページが壊れていると教えてくれてどうもありがとうございまし
た。

-------------------------------------------------------------------------------

・cpy0bアーカイブについて                         2008.11.25 川合秀実

  このソフトウェアはバイナリもソースもドキュメントもすべて川合に著作権があり、
ライセンスはKL-01です。

  この中には3個のソフトウェアが入っています。

  このリリースでは、アーカイブ名にもかかわらず、naskの.g01版がメインです。あと
abcdw005のgas2naskのバグ修正とcpyのバージョンアップもしています。これらは基本
的に従来のtolsetの上位互換になっているので、簡単に差し替えられます。ということ
で、簡単なインストール方法を紹介します。

  以下のファイルやディレクトリをtolsetの中のz_toolsに全てコピーしてください。
    ・このアーカイブのルートにある.g01ファイル(計3ファイル)
    ・このアーカイブのルートにあるcom_make.txt
これでおしまいです。きちょうめんな人は、nask.exeなど.exe版のツールを削除してく
ださい(どうせ使わないので)。ディスクがすっきりします。ただし、全部消していい
わけではありません。まだ.g01化できていないツールもあるのです。ですから、対応す
る.g01があるのを確認しながら作業してください。

  そしてお詫びがあります。abcdw005の中で、これはgo_0024バージョンに相当すると
か書きましたがあれは「go_0024バージョン候補」に訂正します。というのは、今回の
gas2naskのように後にバグが見つかって訂正版が出る可能性があるからです。で、
go_0024はcpp0とcc1ができた段階で改めてリリースしますので(といっても将来のため
に整理してまとめるだけですが)、そのときにバージョン確定とします。

---

・cpy0bについて

  これはabcdw005のcpy0aを少し改造しただけです。結局はただのファイルコピーです
。

  cpy0aのときは、これはtek圧縮の簡易展開ツールなどといいましたが、もっとtolset
内での積極的な利用方法を思いつきました。それは、Makefile内でたまに必要になる
copyコマンドの代わりをさせることです。現在ではcopyコマンド部分はmakeの変数にな
っていて、win32のときはcopyを、UNIX系のときはcpを代入するなどで対処しています
が、これは結局面倒ですし、copyコマンドではパス区切りは\しか許さないのにcpでは/
しか許されませんし、それにファイル連結などではコマンドライン使用法が異なり(と
いうかUNIX系ではcpではなくcatになるし)、面倒さはさらにupします。それにwin32内
でもcygwinをインストールしていると干渉してしまうという問題もありました。

  それにtolsetのツール群が.g01化されつつある今、tolsetが一体どのOSの中で実行さ
れるか、正直分かったものではありません。win32やUNIX系だけとは限らないのです。
そのOSにcopyコマンドに相当するものが必ずあると保証すらできないのです。それなら
なおさら、どの環境でも確実に同じように使えるcpy.g01があれば、Makefileを書く上
で重宝するのは間違いなしです。

  ということでcpy0bでは、ファイルの連結機能を追加してみました。使い方は、

>cpy.g01 abc.txt +def.txt ghi.txt

のように使います。これで、abc.txtとdef.txtがくっついてghi.txtとして出力されま
す。「ぐいぐい01」ではテキストモードとかはないので、バイナリファイルでもテキス
トファイルでもオプションスイッチの指定の必要はありません。またwin32とは異なり
、「+」の前にスペースが必要です。つなげて書くと「abc.txt+def.txt」というファイ
ル名だとみなされてうまく動きません。

  このバージョンアップのせいで、503バイトだったのが612バイトに増えてしまいまし
た。まあtolsetの中で活躍するためなのでとりあえず仕方ないです。

  なお全く理由で将来delコマンド(rmコマンド)に相当する.g01アプリもリリースし
ようと考えています。

---

・naskについて

  OSASK界ではおなじみのx86用のアセンブラです。go_0023のものを.g01化し、そして
[OSASK 00055]で報告されたequ周りのバグを修正したものです。

  バグについての詳細を簡単に報告しておくと、これはアドレス生成部で定数項部分に
ラベルを含んだ式を使い、しかもその式の値がちょうど0になったときにだけ発現する
ものでした。このバグが発現するとnaskの内部のポインタが混乱し(より厳密にはnask
の中のリトルリンカというラベル値決定&自動最適化ルーチンが誤動作)、おかしなコ
ードを出力したり、行を飛ばしたり、そして場合によっては不正なメモリアクセスをし
て異常終了することまでありました。

  もちろんこのバグ修正版ではそんなことは起きませんのでご安心ください。

  nask.exeは自称世界最小x86アセンブラで27.00KBというサイズを誇っていましたが、
「ぐいぐい01」対応でどこまで小さくなるのか僕個人はとても興味を持っていました。
さてその結果は・・・このnask.g01はついに22.76KBになりました。

  他のツールが半減していたりしたので、もしかしたら20KBを下回る事だってありえる
んじゃないかと期待していたのですが、さすがにそうはなりませんでした。しかしもと
もと27KBというサイズからしてかなり限界に迫っていただろうと思うので、そこから
15%以上も小さくなったのはやはり「ぐいぐい01」仕様のおかげです(たぶん一番効い
ているのはUPXからtek圧縮に変更された効果だと思う・・・というのはnaskがAPIを使
って処理をする部分はごくわずかで、ほとんどはアセンブル処理のためのロジックなの
で、APIの違いだけではそれほど差が出るとは思われないため)。

  このアーカイブでの主役は明らかにこのnaskなのですが、アーカイブ名をnaskにした
場合、どんなバージョン番号を付ければいいのか分からず、cpy0bをアーカイブ名にし
ました(go_0024候補ではあってもgo_0024になると決まったわけじゃないので、
nask0024とするわけにもいかず・・・)。

---

・gas2naskについて

  GOのCコンパイラであるcc1.exeが出力した.gasファイルを、naskでアセンブル可能な
.nas形式に変換します。

  abcdw005のgas2naskには-Aオプションに関するバグがありました。naskの移植作業中
に分かりました。それで、-Aオプションの処理アルゴリズムをより高度で安全な方法に
変更しました。そのせいで少しサイズが増えています。

---

  次回予告

  とりあえず次は大物のcpp0と超大物のcc1です。(きっとまた今まで気付かなかった
バグとかが出るでしょうから)先は長そうです。・・・というか、まずは雑務を片付け
なくては!

---

・リンク

    http://osask.jp/boyaki04.html
    http://wiki.osask.jp/?GUIGUI01/man0000
    http://wiki.osask.jp/?GUIGUI01/memo02
    http://wiki.osask.jp/?GUIGUI01/memo04
    http://wiki.osask.jp/?OSASK-HB
    http://wiki.osask.jp/?OSASK-HB/0001
    http://community.osdev.info/?GO

-------------------------------------------------------------------------------

  それでは。

--
    川合 秀実(KAWAI Hidemi)
OSASK計画代表 / システム設計開発担当
E-mail:kawai !Atmark! osask.jp
Homepage http://osask.jp/


一覧(今月):     投稿順     スレッド順