Mam tutaj kilka dodatkowych aspektów:
Rozważmy operację „a = b / c” x86 zaimplementowałaby to jako
mov eax,b
xor edx,edx
div dword ptr c
mov a,eax
Jako dodatkowy bonus instrukcji div, edx będzie zawierał resztę.
Procesor RISC wymagałby najpierw załadowania adresów b i c, załadowania bic z pamięci do rejestrów, wykonania dzielenia i załadowania adresu a, a następnie zapamiętania wyniku. Dst, składnia src:
mov r5,addr b
mov r5,[r5]
mov r6,addr c
mov r6,[r6]
div r7,r5,r6
mov r5,addr a
mov [r5],r7
Tutaj zazwyczaj nie będzie reszty.
Jeśli jakiekolwiek zmienne mają być ładowane przez wskaźniki, obie sekwencje mogą stać się dłuższe, chociaż jest to mniej prawdopodobne dla RISC, ponieważ może mieć jeden lub więcej wskaźników już załadowanych w innym rejestrze. x86 ma mniej rejestrów, więc prawdopodobieństwo znalezienia się wskaźnika w jednym z nich jest mniejsze.
Plusy i minusy:
Instrukcje RISC mogą być mieszane z otaczającym kodem w celu usprawnienia planowania instrukcji, jest to mniej prawdopodobne w przypadku x86, który zamiast tego wykonuje tę pracę (mniej lub bardziej dobrze w zależności od sekwencji) wewnątrz samego procesora. Powyższa sekwencja RISC będzie miała zazwyczaj długość 28 bajtów (7 instrukcji 32-bitowych / 4 bajty każda) w architekturze 32-bitowej. Spowoduje to, że pamięć zewnętrzna będzie pracować więcej podczas pobierania instrukcji (siedem pobrań). Gęstsza sekwencja x86 zawiera mniej instrukcji i chociaż ich szerokości są różne, prawdopodobnie patrzysz tam również na średnio 4 bajty / instrukcję. Nawet jeśli masz pamięci podręczne instrukcji, aby przyspieszyć to, siedem pobrań oznacza, że będziesz miał deficyt trzech w innym miejscu do nadrobienia w porównaniu z x86.
Architektura x86 z mniejszą liczbą rejestrów do zapisywania / odtwarzania oznacza, że prawdopodobnie będzie wykonywać przełączanie wątków i obsługiwać przerwania szybciej niż RISC. Więcej rejestrów do zapisania i przywrócenia wymaga więcej tymczasowego miejsca w stosie pamięci RAM do wykonywania przerwań i bardziej trwałego miejsca w stosie do przechowywania stanów wątków. Te aspekty powinny uczynić x86 lepszym kandydatem do uruchamiania czystego systemu RTOS.
Z bardziej osobistego punktu widzenia, trudniej jest napisać asembler RISC niż x86. Rozwiązuję to, pisząc procedurę RISC w C, kompilując i modyfikując wygenerowany kod. Jest to bardziej wydajne z punktu widzenia produkcji kodu i prawdopodobnie mniej wydajne z punktu widzenia wykonania. Wszystkie te 32 rejestry do śledzenia. W przypadku x86 jest odwrotnie: 6-8 rejestrów z „prawdziwymi” nazwami sprawia, że problem jest łatwiejszy do opanowania i daje większą pewność, że wyprodukowany kod będzie działał zgodnie z oczekiwaniami.
Brzydki? To jest w oku patrzącego. Wolę „inny”.