hallo, ich lese gerade das buch https://de.wikibooks.org/wiki/Assembler-Programmierung_f%C3%BCr_x86-Prozessoren bin im kapitel 4.1 und da wird der befehl xchg vorgestellt. ""Wie sein Name bereits andeutet, vertauscht er den ersten und den zweiten Operanden. Die Operanden können allgemeine Register oder ein Register und eine Speicherstelle sein. " wird da 2 register gleichzeitig getauscht? und braucht die cpu dafü ein zwischen speicher, wie kann man sich den funktions ablauf dieses befehls vorstellen?
Gibt verschiedene Möglichkeiten. Welche verwendet wird, hängt von der konkreten Prozessorarchitktur usw. ab. a) xor-Trick (X = X xor Y, Y = Y xor X, X = X xor Y b) Hidden register: Die CPU besitzt noch eine handvoll versteckte Register für diese Operationen die nur der interne Befehlsdekodierer kennt und ansprechen kann. c) Register renaming: Wird glaube ich auf den modernen CPUs verwendet. Dabei sind die Register die du ansprichst nur "virtuelle" Register, die im Hintergrund auf Schattenregister gemappt sind und deren Mapping jederzeit verändert werden kann. Damit reduziert sich der Swap auf ein Umbenennen der "Schattenregister".
danke !:) a ist einbishen komplex, b und c machen mir nur noch mehr vorfreude auf asm :)
Kritical R. schrieb: > a ist einbishen komplex, > Aber das einzige,was du Programmieren kannst. > b und c machen mir nur noch mehr vorfreude auf asm :) Warum, das findet alles unter der haupe von ASM statt. Du siehst nur den xchg was sich die Prozessorarchitekten ausgedacht haben, damit es funktionert, das wissen nur eine Handvoll Mitarbeiter des Herstellter. Der Gemeine Entwickler Bekommt den mircocode nie zu sehen. Du müsstest Chips entwicklen (zum beispiel auf FPGAs) um sowas im Detail zu beobachten. Für den ASM Entwickler ist nur Intressangt das es den Befehl gibt, welche Begleiterscheiungen er hat ( z.B Welche Flags gesetz werden) und wie viele Taktzyklen Konsumiert werden.
Kritical R. schrieb: > wird da 2 register gleichzeitig getauscht? und braucht die cpu dafü ein > zwischen speicher, wie kann man sich den funktions ablauf dieses befehls > vorstellen? Wie das für einen bestimmten Prozessortyp konkret aussieht, weiß ich auch nicht. Die einfachste und schnellste Lösung wäre wohl, bei der Ausführung des Befehls die Ausgänge der beiden Register auf die Eingänge des jeweils anderen zu schalten. Bei der nächsten Taktflanke werden die Daten übernommen, d.h. die Inhalte der beiden Register sind vertauscht.
@Imonbln ich würde auch gerne wissen, ob man beliebige/unbekannte chips mit asm code untersuchen kann um die Funktionen herauszufinden. mit FPGA lassen sich also prototypen bauen, um dann eine CPU zu entwikeln? Der link ist interessant, Danke. @Yalu X ich glaube, das ist das was Imonbln schon mit dem vertauschen der bezeichnungen meinte, ist aufjeden fall eine coole und eifache lösung. :) finde ich gut
Kritical R. schrieb: > @Yalu X ich glaube, das ist das was Imonbln schon mit dem vertauschen > der bezeichnungen meinte Du meinst wahrscheinlich das von vfv genannte Register-Renaming. Das ist aber nicht dasselbe: Beim Register-Renaming werden die Zugriffspfade geändert (in diesem Fall vertauscht), die Registerinhalte bleiben unverändert. Bei der von mir genannten Methode werden die Inhalte getauscht.
Kritical R. schrieb: > @Imonbln > > ich würde auch gerne wissen, ob man beliebige/unbekannte chips mit asm > code untersuchen kann um die Funktionen herauszufinden. ganz klares Nein! der Assembler Code ist immer an den Chiptype angepasst. Es gibt in dem sinne auch kein ASM Code. Es gibt x86-asm, arm-asm, avr-asm etc. Stark vereinfacht kannst du dir asm als ein mapping vorstellen das sagt der Opcode 0x30 ist auf der Architektur (X86, avr, arm...) ein Xor. Auf einer anderen Architektur ist es vielleicht der Opcode 0x20. Daher braucht der Assembler wissen zu der verwendeten Architektur. das schöne an ASM ist das man mit diesen Wissen zur Architektur, Code in ein binary (Hexdump) und wieder zurück verwandeln kann (das zweite nutzen Antivieren Hersteller um ein Virus zu Analysiern). Wenn du aber eine unbekannten Chip hast fehlt dir das Mapping, zwischen Opcode und (asm)Befehl. Ein direktes Arbeiten mit unbekannter Hardware ist also erstmal nicht (einfach) Möglich. in der Praxis gibt es aber nicht so viele Architekturen, dass ermöglicht es meistens, mit ein wenig Try&Error herauszubekommen, für welchen Chip das Programm ist. Unter Linux probiert das zum Beispiel die Libmagic (als randthema) oder bei Firmware Analysen das Programm binwalk. > > mit FPGA lassen sich also prototypen bauen, um dann eine CPU zu > entwikeln? Ja, bei neunen Chips fängt man meisten an die interne Logik, in VHDL (oder ähnliches) zu Implementieren. Es macht sogar Spaß, sowas selbt mal zu machen und bringt eine menge Verständnis zu dem internen Abläufen einer CPU. So eine 4 Bit CPU, kann man in wenigen Stunden von Grund auf entwicklen und ein kleinen Assembler dazu schreiben. Für 8 Biter ähnlich den Pic oder AVR gibt es auch die eine oder andere VHDL Beschreibung. Nur erwarte nicht zu viel von den Softcore CPUs im FPGA. Die sind meisten nicht so schnell, der Vorteil ist aber, dass man die neue CPU Testen und schon Software dafür Entwickeln kann, lange bevore der erste ASIC die Fabrik verlässt.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.