6

私は12年間の8086アセンブリ言語を教えていますが、昨日はメモリ、アドレス指定、セグメンテーションについて話していました。セグメントが16バイト境界で始まる64Kbブロックのオーバーラップのシーケンスとして視覚化される方法を彼に示しました。オフセットは、セグメント内の8080スタイルのポインターです。それから彼は私が答えることができなかった質問をしました:なぜ(何のために、どのような目的で)それらは重複するのですか?

この質問を調べてみると、20ビットの数学のコピーがたくさん見つかり、このスキームでおそらく可能になるメモリ節約についての漠然とした言及がいくつかあります。誰かがメモリ節約の部分について詳しく説明できますか?または、オーバーラップを実際に利用する他の方法はありますか?

4

3 に答える 3

6

オーバーラップが少ないほど、物理メモリのどこからセグメントを開始するかについての選択肢が少なくなります。これにより、役に立たないセグメント間にギャップが生じ、メモリが無駄になります。設計上の選択により、15バイトを超えるギャップが生じることはありません。それは多分それを少しやり過ぎですが、8086は1メガバイトが誰にとっても十分であった時代に設計されました。また、64キロバイトを購入すると、予算にかなり大きな打撃を与えます。ギャップを無駄にしたくないほど貴重です。

于 2012-01-04T14:37:50.593 に答える
3

メモリの節約は、IMOを見るのにまったく間違った方法です。そのプロセッサは、16ビットアドレス空間が実際に増えていたときに出てきましたきつい。他の16ビットアドレス空間プロセッサは、事後にバンク切り替え方式に取り組んでいました。20ビットのアドレス空間はかなりの承認でした(24ビットまたは32ビットは当時はクレイジーな話でした)。彼らは、外部バンク切り替え(プログラムするのが面倒)に取り組むのではなく、レジスターを使用しました。さて、プロセッサは内部で16ビットなので、16ビットレジスタを使用するのもよいでしょう。さて、16ビットレジスタのペアから20ビットを取得することは興味深い問題です。セグメントを基本的に段落の配置として使用すると、最も柔軟な方法で全範囲(さらに少しオーバーランが発生しますが、これはまったく別の問題です)が得られます(前述のバンク切り替えの苦痛を覚えていますか?これは主に、それができないためです。きめ細かい方法で)。

于 2012-01-04T17:42:47.920 に答える
2

Suppose you own a valet parking service in a long, narrow alley, so the vehicles are all parked parallel-parking style. Some of your customers drive cars and use only 1 space. Others drive stretch limos and require 2 spaces. One way of parking the vehicles would be to assign 2 spaces to each vehicle, regardless of size. Your claim tickets would say "Vehicle is parked starting in space 0 (maximum vehicle size is 2 spaces)" or "starting in space 2", or "starting in space 4", etc.

This would work, but it wastes spaces because you are reserving 2 spaces for cars which need only 1. So instead, you pack the vehicles together, with cars taking only one space and limos taking two. Your employees know that car takes only one space, so if a ticket says "starting in space 1 (maximum vehicle size is 2 spaces)" they know that "The car is in space 1, and space 2 belongs to somebody else." The car's space 2 actually overlaps the limo parked in spaces 2 and 3, but it would be a bad idea to use it or you're going to dent the limo.

于 2012-01-04T14:22:41.010 に答える