teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

メモリエリアに関して追記

2016/08/25 11:57

投稿

maisumakun
maisumakun

スコア146663

answer CHANGED
@@ -1,4 +1,4 @@
1
- CPUが0xffff0から実行する理由は、「ブート時に必要なコードをできるだけメモリ上位に置いて、(1MB時代の)下位のメモリを使うじゃまにならないようにするため」です。最近のx64 CPUでも、起動時は**16ビットモード**で起動しますので、この位置はそのままとなっています。なお、x86では0x0~0x3ffが割り込みベクタとなっているので、実行には使えません。
1
+ CPUが0xffff0から実行する理由は、「ブート時に必要なコードをできるだけアドレスエアの上位に置いて、(1MB時代の)下位のメモリを使うじゃまにならないようにするため」です。最近のx64 CPUでも、起動時は**16ビットモード**で起動しますので、この位置はそのままとなっています。なお、x86では0x0~0x3ffが割り込みベクタとなっているので、実行には使えません。また、MS-DOS時代には「640KBの壁」と呼ばれたように、ふつうのメモリとして使えるのは下位640KBだけで、残りの384KBにBIOSとかハードウェアのI/O領域などが置かれていました(EMSやUMBなど、隙間をメモリとして使うこともありましたが)。
2
2
 
3
3
  0x7c00になった理由は[ここ](http://www.glamenv-septzen.net/view/614)の後半にありましたが、「32KBのメモリからDOSを起動できる」ようにするために、「32KB-MBRデータ512バイト-ワークエリア512B」という位置にセットした、とのことです。
4
4