Architektura RISC - rozważenie teoretyczne

Wątek przeniesiony 2014-06-23 02:31 z Edukacja przez somekind.

0

Witam,
Ktoś mi podpowie ?
Dlaczego w architekturach RISC często występują dwie wersje każdej instrukcji arytmetyczno-logicznej:
modyfikująca rejestr znaczników i niemodyfikująca rejestru znaczników ?

0

Pewnie po to, by w większej ilości przypadków można było unikać skoków. Np kod
if (zmienna) a += 2 else b *= 3
Można zamienić na kod asemblerowy:

test zmienna ; ustawia rejestr flag
load a => r1 <używając flag>
add r1, 2 <używając flag> <nie ustawiając flag>
store r1 => a <używając flag>
load b => r1 <używając flag>
mul r1, 3 <używając flag> <nie ustawiając flag>
store r1 => b <używając flag>

Gdyby nie było instrukcji add nie ustawiającej flag, to nie dałoby się stworzyć tak wydajnego kodu jak ten powyżej, bo trzeba by było np zbackupować rejestr flag (co raczej nie jest wydajne) albo wykonać kod (co jest kiepskim rozwiązaniem w architekturach potokowych, zwłaszcza wielopotokowych).

Instrukcje powyżej są oczywiście wymyślone przeze mnie :] Nie wiem o jakich architekturach RISC piszesz, ani nawet nie znam się na żadnej konkretnej (oprócz może lekko ARM), więc nie jestem w stanie wydedukować o co chodzi.

0

Ok, a takie coś:
Jaki możemy podać przykład dwóch instrukcji architektury x86 świadczący o tym, zże jest to CISC ?

0

np rozkazy do operowania na kodzie dziesiętnym (BCD) (nie pamiętam jakie to były instrukcje, ale bezproblemowo je znajdziesz).


np: * AAA * DAA
0

Może np coś a'la movzx eax, word [eax+ebx*4+1500] jako przykład instrukcji która dużo robi oraz jakąś instrukcję z AVX2, by pokazać zakręcone kodowanie instrukcji. Jak chcesz jakiś hardkorowy przykład to jest jeszcze: http://gynvael.coldwind.pl/?id=386

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.