Mikrokod to kolejny poziom abstrakcji poza kodem maszynowym. Rzeczywisty procesor korzysta z mikrokodu, a silnik translacji konwertuje kod maszynowy na mikrokod w locie. Odbywa się to z różnych powodów, w tym z szybszych, mniejszych procesorów, łatwiejszych do stworzenia złożonego procesora z mniejszą liczbą debugowania i dla kompatybilności wstecznej. Na przykład zestaw instrukcji x86 zawiera niektóre instrukcje przetwarzania ciągu, które są rzadko używane. Jednak, aby zachować zgodność wsteczną, muszą być nadal dostępne w nowoczesnych procesorach x86. Zamiast podłączać ścieżkę wykonania tych instrukcji, są one konwertowane na mikrokod i wykonywane. Oszczędza to krzem, a jednocześnie pozostaje kompatybilny wstecz.
Gdzie znajdują się oba typy programów podczas ich wykonywania?
Kod maszynowy znajduje się w pamięci podręcznej (po wyciągnięciu z pamięci RAM). Mikrokod znajduje się w pamięci podręcznej mikrokodu, w zależności od konkretnej architektury komputera. Pamięć podręczna może być wystarczająco duża, aby pomieścić wystarczającą ilość mikrokodu, aby pomieścić przekonwertowany mikrokod z największej możliwej instrukcji kodu maszynowego, lub może być większą pamięcią podręczną, która przechowuje przekonwertowane wyniki wielu kodów maszynowych, aby nie trzeba było konwertować wszystkich kod maszynowy na każdej iteracji dla małych pętli.
W niektórych architekturach konwertowany mikrokod nie jest nigdzie przechowywany - jednostka pobierania / tłumaczenia po prostu wyrzuca serię instrukcji mikrokodu opartych na aktualnie wykonywanym kodzie maszynowym. W tym przypadku mikrokod wykonuje się z jakiegoś ROM-u, a kod maszynowy jest w zasadzie indeksem do ROM-u, wskazując na szereg instrukcji mikrokodu, które należy uruchomić, aby w pełni wykonać instrukcję kodu maszynowego.
Czy masz instrukcje mapowania 1: 1 do prawdziwej instrukcji języka asemblera?
Kod maszynowy i kod asemblera ogólnie są odwzorowane w stosunku 1: 1 do instrukcji asemblacji. To zależy od asemblera. Asemblery wysokiego poziomu mogą mieć duży zestaw makr, które pozwalają napisać jedną linię kodu asemblera, a asembler wygeneruje kilka kodów maszynowych.
Ale ogólnie „czysty” język asemblera można przekształcić bezpośrednio w kod maszynowy, korzystając z tabeli zestawów instrukcji w podręczniku procesora.
Nie jestem jednak pewien, co rozumiesz przez „instrukcje prawdziwej operacji”. Być może możesz wyjaśnić odniesienie.
Czy format jest zdefiniowany w architekturze procesora?
Format zarówno kodu maszynowego, jak i mikrokodu są określone przez architekturę procesora.