movsb (move string, bytes) 命令は、アドレス ds:si でバイトをフェッチし、アドレス es:di に格納してから、si レジスタと di レジスタを 1 ずつインクリメントまたはデクリメントします。
私は esi,si と edi,di レジスタを知っています。
しかしそうではなくds:si
、es:di
彼らはどういう意味ですか?
movsb (move string, bytes) 命令は、アドレス ds:si でバイトをフェッチし、アドレス es:di に格納してから、si レジスタと di レジスタを 1 ずつインクリメントまたはデクリメントします。
私は esi,si と edi,di レジスタを知っています。
しかしそうではなくds:si
、es:di
彼らはどういう意味ですか?
ds:si
問題のレジスタによって参照されるセグメント:オフセットをes:di
意味します。これは、リアル モードで作業している場合 (オフセットがそれぞれ最大 64K である場合) に主に重要です。
リアルモードでは、セグメントはオフセットされ、 として結合されsegment * 16 + offset
ます。
プロテクト モードでは、セグメント レジスタは「セレクタ」を保持します。セレクターが参照するメモリのベース アドレスは、セレクター自体の値とは直接関係ありません。むしろ、セレクターはテーブル内のデータを検索するためのインデックスとして機能します。ただし、通常の場合、これはほとんど意味がありません。ほとんどの (現在の) プロテクト モード環境は、ベース アドレスが 0 で最大オフセットが 4 ギガバイトで設定された CS、DS、ES、および SS で設定されているため、DS を介したアドレス指定対 ES に違いはありません。