これは大きな話題で、簡単な答えはできませんが...
あなたはいくつかの分割して征服することでこの答えに少し近づくことができます、そして他の答えはハードウェアの観点からこの問題を攻撃しようとするので、私は高レベルのSWビューから試みます。
たとえばcコード(非常に高度な抽象化)などのソフトウェアでソフトウェアを作成する場合、何が起こっているのか実際にはわかりませんが、質問している恋人たちのことをすべて理解していません。
しかし、とにかくそこから始めましょう。
変数を含めるだけの単純なプログラム。
int main(void)
{
int i=0;
while(1) {
i++;
}
}
次に、何が起こっているのかを理解できるように、アセンブラコードを取得する必要があります。この手順は、使用しているプラットフォームで実行できますが、簡単にするために、PCでgccを使用します(ただし、問題はありません...)
gcc -O0 -S main.c -o main.lst
その後、次のような結果になります。
.file "main.c"
.text
.globl main
.type main, @function
main:
pushl %ebp
movl %esp, %ebp
subl $16, %esp
movl $0, -4(%ebp)
.L2:
addl $1, -4(%ebp)
jmp .L2
.size main, .-main
.ident "GCC: (Ubuntu 4.4.3-4ubuntu5) 4.4.3"
.section .note.GNU-stack,"",@progbits
次に、コードのすべての行とその機能を理解しようとします。
次に、すべての命令がどのように実装されているかを調べ始めます...たとえば、subl
subl $16, %esp
この時点では、アーキテクチャによって異なり、x86、arm、picも少し異なりますが、私の例はx86だったためです。
このレベルでは、コピーを読むと、ほとんどのアクションは数値を移動しているように見え、ある意味でこれが起こっています。あらかじめ定義されたプログラムがあります。このプログラムは、通常、あるロジックレベルをトラップするある種の電子ロジックである、ある種のフラッシュメモリに格納されます。
すべてのビットに何らかの「フリップフロップ」が表示される場合、あなたは一種の親密であり、それらの多くが必要です。ここで、1と0を見つけ始めます。
次に、いくつかのアクションを発生させるために、ある数値を別の数値(CPU自体)に変換できるクールなロジックを追加します。
次に、プログラムを1ステップずつ実行し、プログラムカウンター(PC)がある場所を確認します。そして、数値を前後に移動して、同様にフリップフロップ付きのグリッドのような別のメモリにそれらを格納します。
しかし、CPUをもう少しよく理解するために、ALUとこの簡略化された図を見て、特定の例に戻りましょう。このロジックブロックにデータを移動し、OPピンで何らかの操作を選択すると、出力で新しい結果が得られることがわかります。次に、記憶のどこかに戻ることができます。
MCUのCPU部分のALUは、これよりもはるかに複雑ですが、同じ基本原理で動作します。
この時点で、一方の側で「機能」を実行する論理回路と、もう一方の側でストレージを確認できます。また、ストレージには、プログラム用とデータ用の2つの部分があります。しかし、実際にはどのように「移動」するのでしょうか、それらは何らかの方法で接続されている必要があります...
そして、ここがこれらのパーツをバスに接続する場所です。
バスは、さまざまな部分を接続するいくつかのワイヤであり、制御ロジックは、このバスに送信するデータと、送信されたこのデータをリッスンする必要があるCPUの部分をメモリに通知します。そして、これは、異なる部分を有効/無効にするいくつかの並列制御ラインで行われます。
...
したがって、選択したmcuを使用して非常に小さなプログラムを分析すると、何が起こっているのか理解できない限り、「mcu」を作成するために使用できる素敵な小さなパズルができるまで、さらに分析します。
そして、あなたのMCUのデータシートを読んで、それがどのような種類のメモリ、ALU、バスなどのように作られたのかを調べることを忘れないでください。
これが少し役立つことを願っています?
幸運を