5: 2007-12-02 (日) 12:46:42 |
6: 2007-12-02 (日) 23:44:30 |
| 32ビット。16ビットのたった2倍だよね?。上記と同じように計算してみると・・・~ | | 32ビット。16ビットのたった2倍だよね?。上記と同じように計算してみると・・・~ |
| 0x00000000番地〜0xFFFFFFFF番地まで。0xFFFFFFFFバイト。10進数に直すと4,294,967,295バイト。これを1024で割り算してKB単位にすると・・・4,194,304KB・・・さらに1024で割り算してMB単位にすると・・・4096MB・・・もういいよね? なんと、4GB!!!~ | | 0x00000000番地〜0xFFFFFFFF番地まで。0xFFFFFFFFバイト。10進数に直すと4,294,967,295バイト。これを1024で割り算してKB単位にすると・・・4,194,304KB・・・さらに1024で割り算してMB単位にすると・・・4096MB・・・もういいよね? なんと、4GB!!!~ |
- | こんなに贅沢に沢山のメモリを使えるので、32ビットの時にはセグメントなんてない。というか、そんなややこしいことしなくてもいいわけ。(注1) | + | こんなに贅沢に沢山のメモリを使えるので、32ビットの時にはセグメントなんてない。というか、そんなややこしいことしなくてもいいわけ。[[(注1):http://thebbl.hideyosi.com/modules/bwiki/index.php?%BB%F1%CE%C1%2Fx86%2F%A5%BB%A5%B0%A5%E1%A5%F3%A5%C8#j65cbf7c]] |
| | | |
| そう。CPUのビット数だけ見ると、たかだか倍なのでたいしたことないように見えるかもしれないけど、16ビットと32ビットじゃ、こんなに巨大な差があるんだ! | | そう。CPUのビット数だけ見ると、たかだか倍なのでたいしたことないように見えるかもしれないけど、16ビットと32ビットじゃ、こんなに巨大な差があるんだ! |
| -''セグメント値:''メモリを分割して64KB単位で扱う場合の先頭アドレス(開始番地) | | -''セグメント値:''メモリを分割して64KB単位で扱う場合の先頭アドレス(開始番地) |
| -''オフセット値:''セグメント値を基点(スタート位置)にして、そこから何バイト後ろにずれているか | | -''オフセット値:''セグメント値を基点(スタート位置)にして、そこから何バイト後ろにずれているか |
| + | |
| + | **そんなわけで・・・ [#bd10221e] |
| + | 8086、あるいはその互換であるリアルモード時のCPUは、''ことアドレスを指定する場合は必ず2つで指定する''と覚えておけばとりあえずは原理を理解できると思う。 |
| + | |
| + | アドレスを指定するっていうのはなにもプログラム・プログラマの話だけではないよ。 |
| + | |
| + | CPUが動作する場合に必要な部分でも全てこの法則に当てはめれば、別の形で整理できるんじゃないかな? |
| + | |
| + | 例えば・・・・ |
| + | |
| + | -プログラム上でのアドレス指定 |
| + | --これまで説明してきたからわかるよね? |
| + | -インストラクションポインタ |
| + | --これはCPUが''次の命令のアドレス''としているもの。 |
| + | --なので、[CS:IP]という2つのレジスタが必要 |
| + | -スタック |
| + | --CPUが一時的に使う変数とかを保持しておくための場所を示している。 |
| + | --なので、[SS:SP]という2つのレジスタが必要 |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | ----- |
| + | *ウソつけ!32ビットでもセグメントあるじゃん! [#j65cbf7c] |
| + | |
| + | 工事中・・・ |