Re: Cyrix 200+ kontraiP166

Autor: Maciej Figatowski (MFigatowski_at_impaq.com.pl)
Data: Tue 11 Mar 1997 - 09:58:08 MET


On Sat, 08 Mar 1997 23:53:01 GMT, radekp_at_usa.net (Radoslaw Poplawski)
wrote:

>7 Mar 1997 20:59:53 GMT, Jarek Lis <lis_at_ict.pwr.wroc.pl> napisał(a):
>
>/>Radoslaw Poplawski <radekp_at_usa.net> wrote:
>/>: />: />> Program typu:
>/>: />: />> LDA #$77
>/>: />: />> STA adres+1
>/>: />: />> adres JMP $E4xx (oryg. xx=00)
>/>: />: />>
>/>: />: />Oczywiscie, ten program jest prawidlowy. Na procesorach 80286 i nowszych
>/>: />: />wykona skok pod adres E400. Na 8088 chyba zreszta tez, ale juz nie pamietam.
>/>: />: No, nie wiem. A czemu nie pod $E477?
>/>: />A o 'kolejce rozkazow' czytales?
>/>
>/>: Nie bardzo rozumiem co masz na mysli.
>/>
>/>Nie czytales znaczy sie :-).
>
>Na 6502 nie bylo czegos takiego :).
>
>/> W procesorach x86 [i x88], jak tylko magistrala
>/>nie jest zajeta wykonywaniem operacji, to pewien blok czyta na zapas
>/>kolejne slowa programu z pamieci. Zapamietuje je w tzw. 'kolejce rozkazow',
>/>o dlugosci od 6 bajtow w gore. W efekcie jak rozkaz STA zapamieta bajt w
>/>pamieci, to ten bajt do kolejki byl przeczytany znacznie wczesniej.
>/>A wczesniej bylo tam 0.
>
>Czyli wystarczy zapisac 7 bajtow naprzod, aby w komorce pamieci
>_zawsze_ znalazla sie wartosc zapisywana przez STA. Czyli taki
>zmodyfikowany kod wykona sie prawidlowo na XT, a na Pentim juz nie
>(wiekszy cache dla rozkazow).
>
>/>Ale dzieki temu procesor chodzi szybciej - [prawie] zawsze rozkaz do
>/>wykonania mamy juz przeczytany :-).
>
>Czyli: poswiecamy kompatybilnosc dla predkosci.
>
>Radoslaw Poplawski (Wroclaw: radekp_at_usa.net)
>http://www.geocities.com/MotorCity/3416 (FRAMES ext.)
>-- Mordercy predkosci uzywaja Windows(r)(tm)(c)! --

Oj, chyba daleko odeszlismy od "Cyrix 200+ kontra iP166", ale co tam.
Mysle, ze nie jest tak zle. Przeciez programy nie moga wykonywac sie
lub nie w zaleznosci od dlugosci cache rozkazow - nie podejrzewam
konstruktorow o sklonnosci samobojcze. Przeciez istnieja mechanizmy
"przewidywania skokow" - ladowania do cache rozkazow w zaleznosci od
przewidywanego wyniku skoku warunkowego. Pomylka przy przewidywaniu
powoduje wyczyszczenie cache rozkazow i zaladowanie nowej zestawu spod
wlasciwego adresu. Podejrzewam, ze przy samomodyfikujacym sie kodzie
wykorzystywany jest ten sam mechanizm (oczywiscie oficjalnych
informacji brak).
A tak wogole: czy nie prosciej byloby napisac krotki program (w
assemblerze 8086 zeby sprawdzic na wszystkich procesorach) i sprawdzic
cala sprawe, zamiast pisac sazniste dyskusje?

        Maciek Figatowski



To archiwum zostało wygenerowane przez hypermail 2.1.7 : Tue 18 May 2004 - 15:58:11 MET DST