Es ist nicht die Assemblersprache, sondern die zugrundeliegende Maschinensprache, die diese Operationen verhindert.
Während die Montage aus leicht zu lesenden Wörtern oder Mnemonics besteht, repräsentieren sie eigentlich ziemlich direkt die 1s und 0s des Maschinencodes. Auf x86-CPUs besteht jeder Befehl typischerweise aus einer Sequenz von Bytes mit einzelnen Bytes oder sogar Bits innerhalb der Bytes mit Bedeutung. Bestimmte Bits stellen die Anweisung dar, andere stellen die addressing mode dar. In Registeradressierungsmodi wie Ihren Beispielen stellen einige Bits dar, welche spezifischen Register als Quelle und Ziel des Befehls mov
verwendet werden sollen.
Die x86-Familie der Prozessoren reicht weit zurück in die 1970er Jahre, als die CPU-Architektur einfacher war. In diesen Tagen war das Konzept der von entscheidender Bedeutung - ax
ist der 16-Bit-x86-Akku. Alle Berechnungen wurden in diesem Register aufgebaut oder "akkumuliert", so dass es für alle Anweisungen verfügbar war. Andere Allzweckregister hatten einen eingeschränkteren Anwendungsbereich.
Da die Anweisungen auf Bytes basierten, wollten Sie so wenige Bytes wie möglich, um eine Instruktionsdecodierung schnell zu halten. Um möglichst viele Befehle so kurz wie möglich zu halten, wird die Verwendung des Akkumulators zentral gemacht.
Auf moderneren CPUs wie dem Motorola 680x0 haben allgemeinere Register mehr Fähigkeiten, die früher die Domäne des Akkumulators waren. Auf RISC-CPUs sind alle Register so flexibel wie Akkumulatoren. Ich habe gehört, dass im 64-Bit-Modus der aktuelle x86/amd64-Befehlssatz jetzt viel weniger eingeschränkt ist.
Wenn ich. Lies zuerst deine Antwort, die ich nicht belügt habe ieve you, aber in der NASM-Dokumentation, sicher genug, keine mov reg_dseg, reg_cseg Anweisung. – samoz
Dies ist nicht der Grund, es ist das Ergebnis. –
Was? Ich verstehe nicht, was du meinst Neil. – samoz