Forum: PC-Programmierung asm: wie kann ich mir die schaltung vorstellen?


von Kritical R. (kritical_r)


Lesenswert?

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?

von vfv (Gast)


Lesenswert?

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".

von Kritical R. (kritical_r)


Lesenswert?

danke  !:)
a ist einbishen komplex,

b und c machen mir nur noch mehr vorfreude auf asm :)

von Imonbln (Gast)


Lesenswert?

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.

von Yalu X. (yalu) (Moderator)


Lesenswert?

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.

von Kritical R. (kritical_r)


Lesenswert?

@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

von Yalu X. (yalu) (Moderator)


Lesenswert?

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.

von imonbln (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.