Hallo,
mal etwas ausführlicher:
>>Meine finale Frage ist, wie unterscheidet das die CPU?
Jedes Programm enthält einen Einsprungpunkt (Entry Point) den es global bekannt macht (global _start; global main). An diesem Entry Point beginnt die CPU mit der Ausführung. Das bedeutet, dass die CPU den Wert in dieser Speicherzelle immer als Anweisung (z.b. mov, cmp, nop ...) betrachtet. Nun muss man wissen, das die CPU auswendig weiss, wieviele weitere Bytes zu welchen Befehl im Speicher folgen müssen. Hier mal ein Beispiel:
400ed7: b8 34 12 00 00 mov eax,0x1234
400edc: 50 push rax
Nehmen wir an, der Entry Point ist bei "400ed7". Dann interpretiert die CPU den Wert "b8" als den Befehl "mov eax..." und weiss geleichzeitig, dass dort noch vier weitere Bytes dazu gehören. Somit ist das fünfte Byte wieder ein Befehl "50 = push rax".
Und so weiter
Und so weiter
So, ich hoffe, ich habe Deine Frage richtig verstanden und konnte Dir weiterhelfen.
Mit freundlichen Grüßen
MatzeL aus H