frage zu "WAIT instruction (all processors)"

Hier kann alles mögliche diskutiert werden. Themen zu Purebasic sind hier erwünscht.
Flames und Spam kommen ungefragt in den Mülleimer.
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

frage zu "WAIT instruction (all processors)"

Beitrag 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?
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

überfliege den Text nur gerade etwas, da ich gleich schlaffen muss...
Danke für die fixe Antwort.
Bild
Benutzeravatar
Karl
Beiträge: 520
Registriert: 21.07.2005 13:57
Wohnort: zu Hause

Beitrag 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
The Kopyright Liberation Front also known as the justified ancients of Mumu!
PB 5.X
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag 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...
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag 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.
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

wenn der 4 als 686 gilt, wo war der generationenschritt?

zwischen P2 und P3 ?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag 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 /:-> :lol:
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Antworten