-4

TSR で far ポインターが使用されていることを何度も見てきました。これらの TSR プログラムが far ポインターを必要とする理由と、これらが一般的なマシンにとって有害で​​あると見なされる理由。

4

3 に答える 3

2

far ポインターは、セグメント セレクターとオフセットの 2 つの部分で構成されます。

一般的なセグメント化されたアドレス指定の問題 (ポスト DOS コンピュータが使用する 32 ビット プロテクト モードとは異なり、16 ビット リアル モードでのみ適用可能) は、複数の「far ポインタ」から物理メモリ内の 1 つの場所にアクセスできることです。(これが、通常の 16 ビット コーディングでは推奨されない理由です)

ウィキペディアからの例は有効です。

char far *p =(char far *)0x55550005;
char far *q =(char far *)0x53332225;

どちらもアドレス 0x55555 を指しています。ソース: http://en.wikipedia.org/wiki/Far_pointer

プログラムが実行されている場合、常にセグメント オフセットを指定する必要はありません (near ポインターを使用できます)。これは、使用しているメモリ セグメントが既に選択されているためです。

TSR プログラムに関しては、制御を元のプログラムに戻さなければならないときに、まったく別のプログラムが実行されています。元のプログラムには、現在選択されているセグメントが何であるかを知る方法がないため、セグメントとオフセットの両方を含む完全な「far ポインター」を提供する必要があります。 http://en.wikipedia.org/wiki/Terminate_and_Stay_Resident

http://en.wikipedia.org/wiki/X86_memory_segmentationにも注意 してください

于 2012-06-20T13:17:59.660 に答える
1

TSR プログラムは、単一のセグメントにとどまることが保証されていないアドレス空間を共有する必要があるため、ポインタを識別するために far アドレス (つまり、両方の segmant:address を含む) 座標が必要です。私が知る限り、DOS のすぐ下で意味があるので、これは少し歴史的なものです。

于 2012-06-20T13:14:59.107 に答える
0

それらが有害であると誰が言いますか?彼らは他の人よりも多くのスペースを必要とするだけなので、昔は落胆していました. また、セグメント レジスタを使用するには、セグメント レジスタを変更する必要がありました。

それらが TSR のどこで使用されているか詳しく説明していただければ、さらに詳しく説明できるかもしれません。

于 2012-06-20T13:14:51.940 に答える