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

[WitchTech 00576] Re: TC++1 の setargv のこと



うえけんです。

> 10.5.2 プロセス起動の流れ
> 4.コマンドラインパラメータの設定
> ユーザプロセス用データ領域の空き部分にコマンドラインパラメータを設定します。

なるほど、コマンドラインが必要になるケースもあるということ
ですね。DOSだとPSP(プロセスパラメータブロック)末尾
の128バイトのうち、先頭1バイトがコマンドライン長、残り
127バイトが引数(コマンド自身を含んだかな?)という使い
方でした。DOSでパスが長くなるとコマンドが起動できなくな
る原因はこれでした。Witch はどう処理するか興味ありますね。

> Borland C++ 5.0J のマニュアルによると
> # BC++5 のマニュアルにあるだけで、同じことが TC++1 で
> # できるかどうか確かめた訳ではないのですみません...
> 
> struct myStruct {
>   int a_a;
>   int a_b;
> } myA;
> 
> asm { mov ax, myA.a_b }
> 
> と書いて a_b のアドレスはちゃんと解決されるそうなんですが、インデック
> スが定数であっても配列のアドレッシングは決してそうならないのは一貫性に
> 欠けるんじゃないかと。

アセンブリソースのオフセット計算とCソースの中にアセンブリ
コードを埋め込むことを同一視してはいけません。インラインで
埋め込む場合はコンパイラがコード生成すると考えれば謎は解け
ると思います。

> か。構造体の要素の位置は解決するけど配列の*要素*は解決しない、と。

上記の通り、コンパイラが構造体メンバのオフセットを知ってい
るので、アセンブラがオフセットを計算する必要はありません。
これは構造体のみならず配列、共用体にも言えます。

ちなみにMASM(MacroASseMbler)では構造体(もどき)が使えます。
しかし、これはマクロ機能によってオフセット計算を隠蔽するだ
けなので、やはり「型がない」ことに変わりはありません。ただ、
型が「あるように見える」だけです。

それでは


ML Archives