Seite 1 von 2
frage zu "WAIT instruction (all processors)"
Verfasst: 05.05.2006 00:08
von MVXA
In einer "Hilfe" zur Optimierung von ASM Code konnte ich folgendes finden:
Code: Alles auswählen
You can often increase speed by omitting the WAIT instruction. The WAIT instruction has three functions:
a. The old 8087 processor requires a WAIT before every floating point instruction to make sure the coprocessor is ready to receive it.
b. WAIT is used for coordinating memory access between the floating point unit and the integer unit.
Examples:
b.1. FISTP [mem32]
WAIT ; wait for FPU to write before..
MOV EAX,[mem32] ; reading the result with the integer unit
b.2. FILD [mem32]
WAIT ; wait for FPU to read value..
MOV [mem32],EAX ; before overwriting it with integer unit
b.3. FLD QWORD PTR [ESP]
WAIT ; prevent an accidental interrupt from..
ADD ESP,8 ; overwriting value on stack
stimmt das eigentlich so noch? Ist WAIT nicht bischen sehr veraltet?
Verfasst: 05.05.2006 00:15
von Kaeru Gaman
ich weiß nicht, ob der befehl überhaupt noch existiert...
die CPU hat spätestens seit der 80386-generation keinen mathe-coprozessor mehr, auf den sie warten muss.
könnte sogar schon bei der 80286 integriert gewesen sein.
denke dran, das der Pentium quasi der 80586 ist, somit wäre der Pentium4 ein 80986...
(noch mehr, wenn man die MMX-reihe und andere als extra-baureihen zählt...)
[edit]
der im Text erwähnte 8087 war der Mathe-Koprozessor des 8086, der der Vorgänger des 80186 war...
es geht hier also um 20 Jahre alte Hardware... [/edit]
intel hat die bezeichnung Pentium eingeführt, weil sie die baureihennummer nicht schützen lassen konnte, AMD konnte ihre CPUs auch 80486 nennen...
Verfasst: 05.05.2006 00:21
von MVXA
überfliege den Text nur gerade etwas, da ich gleich schlaffen muss...
Danke für die fixe Antwort.
Verfasst: 05.05.2006 08:56
von Karl
Hängt das nicht vom verwendeteten Assembler ab? Einige produzieren noch zum 8086 kompatiblen Code.
Ich hatte mal einen 386er, der zusätzlich einen mathematischen Coprozessor hatte. Ob es da noch den WAIT-Befehl gab, weiß ich nicht.
Gruß Karl
Verfasst: 05.05.2006 12:25
von hardfalcon
der 386er hatte AFAIK noch keinen eigenen mathematischen Coprozessor, den musste man noch dazukaufen. Allerdings wurde der mathematische Coprozessor sehr oft softwareseitig emuliert. Bei der Konfiguration von Linux-Kerneln (vor dem Kompilieren) kann man auch diese Emulation wahlweise einbauen oder weglassen. Vom 486er gabs dann 2 Versionen:
einmal die billigere SX-Reihe OHNE Coprozessor und dann die DX-Reihe mit mathematischem Coprozessor. Seit Pentium I (auch ohne MMX) haben dann alle x86er-CPUs (zumindest von Intel) den Coprozessor gleich mit an Bord...
Verfasst: 06.05.2006 15:45
von Kaeru Gaman
@hardfalcon
danke für die genaue info.
ich war mir nicht mehr sicher, wann der schritt letzendlich vollzogen wurde.
ich erinner mich auch noch dran, dass es zu dem alten QuickC noch ne MathLib gab,
die den CoProzessor emulierte...
Verfasst: 06.05.2006 17:51
von Laurin
Kaeru Gaman hat geschrieben:denke dran, das der Pentium quasi der 80586 ist, somit wäre der Pentium4 ein 80986...
(noch mehr, wenn man die MMX-reihe und andere als extra-baureihen zählt...)
Der Pentium 4 gilt als 80686.
Und der CoProzessor ist seit dem Pentium 1 fest im Chip integriert. Aber das sagte hardfalcon ja schon.
Verfasst: 06.05.2006 17:52
von Kaeru Gaman
wenn der 4 als 686 gilt, wo war der generationenschritt?
zwischen P2 und P3 ?
Verfasst: 07.05.2006 11:47
von hardfalcon
Verfasst: 07.05.2006 13:00
von Laurin
Kaeru Gaman hat geschrieben:wenn der 4 als 686 gilt, wo war der generationenschritt?
zwischen P2 und P3 ?
Der P4 ist der Generationenschritt. Während der P2 und der P3 vom P1 abgeleitet wurden, ist der P4 eine Neuentwicklung.
Ich hoffe, zu allgemeinen Unkenntnis beigetragen zu haben
