Ich habe mich mehr mit der Funktionsweise der CPU beschäftigt und habe eine Frage. Wenn ich eine Anweisung habe, die zB eine 64-Bit-Adresse und ein Register nimmt und den Wert von dieser Adresse in das Register kopiert. Und dieser Befehl hat einen 2-Byte-Opcode. Nehmen wir dann an, dass die gesamte Anweisung 80 Bit groß ist. (8 Byte) Wie würde sie diese Anweisung dann ausführen? Da ich vermute, dass es nicht in das Befehlsregister passt (weil das Register 64 Bit hat). Nimmt es einfach den Opcode und ruft die Adresse (und später den Wert) ab und registriert sich später? Oder hat es mehrere Register? Oder hat es ein mega großes Befehlsregister, um alles unterzubringen?
Danke!
Eine 64-Bit-Architektur zu sein bedeutet nicht, dass es ein einziges 64-Bit-Befehlsregister gibt, in das alles passen muss. X86_64-Befehle können bis zu 15 Byte lang sein. Jeder Opcode wird zur Ausführung decodiert. In Ihrem Beispiel gäbe es einen Opcode zum Verschieben von Daten, der ein weiteres Opcode-Byte benötigt, um zu wissen, was zu tun ist, und dann weiß er, dass eine 64-Bit-Direktadresse folgt, die gelesen werden muss, und welches Register das Ziel sein wird.
X86 unterstützt Anweisungen mit variabler Länge, daher ist das "Anweisungsregister" nicht sehr einfach oder auf 64 Bit beschränkt. Die CPU verfügt über einen ziemlich komplexen Parser, der die Länge der Anweisungen bestimmt und mehrere aufeinanderfolgende Anweisungen gleichzeitig extrahieren kann.
jonk
Benutzer138530