1.(Jukkaによる回答の概要)
スタートアップコードは、ROM(不揮発性メモリ)の固定アドレスXに格納されています。
CPUで「リセット」信号をアクティブにすると、CPUはレジスタを特定のハードコードされた値に初期化します。命令ポインタは、特定のハードコードされた値に初期化されるこれらのレジスタの1つです。基本的に、CPU製造元はこのハードコードされたアドレスXを選択します。したがって、CPUをリセットすると、命令ポインターは同じ固定アドレスXにリセットされます。CPUは通常どおりに命令の実行を開始します。アドレスXから次の命令をフェッチします。 、デコード、実行など
次に、完全なコンピュータを組み立てる人は、アドレスXに何か有用なものがあることを確認する必要があります(たとえば、意味のある起動コードを備えたROMメモリチップ)。
2.エラボレーション
CPUには、FETCH-EXECUTEサイクルと呼ばれる非常にシンプルな動作方法があります。
(a) FETCH:メモリにアクセスし、アドレス[PC]にある命令を呼び出します。(PCは内部CPUレジスタの名前です。次に実行する必要のある命令のアドレスを保持します。)
(b)実行:PCはメモリから取得した命令を実行します
(c)PC←PC + 1。(*)
(d )(a)に戻ります。
このフェッチ実行ループは、実行しているプログラムに関係なく、常に発生します。特に、CPUが起動すると(たとえば、その電力が0からVccに変わると)、CPUは上記のループの実行を開始します。
PCの初期値は、特定のCPUによって異なります。PC = 0でCPUがウェイクアップするか、PC = 0xFFF0(IntelのX86ファミリで発生する)、またはその他の値PC =PCI N I T。リセットボタンを押すか、電源をオフにしてからオンにすると、CPUはPCを初期値に復元しますPCI N I T そして、CPUはメモリのアドレスにあるプログラムの実行を開始します PCI N I T、フェッチ実行ループを介して。
BIOSがメモリのアドレスに配置されていることを確認するのは、コンピュータ設計者の作業です。 PCI N I T。BIOSは通常、不揮発性メモリに常駐しているため、電源をオフにしてからオンにしただけでも、そのアドレスで実行するプログラムが常に存在します(これによりRAMは削除されますが、BIOSは削除されません。削除/変更はより困難です。 BIOSは可能ですが、たとえばデバイスが「ファームウェア」を更新したときに発生します。
(*) PCを+1することは、各命令がメモリ空間の1つのアドレスを取ることを前提としています。まれなケースです。実際のシステムでは、PC + 4(32b MIPSなど)またはPC + x(X ∈ { 1 、。。。、7 } X86ファミリなどのように、命令自体に依存します。