- •III Procesor główny
- •Schemat przepływu danych w cpu
- •Najprostszy system połączeń
- •Numery, wartości I adresy kolejnych wyrazów szeregu
- •Instrukcją komplementarną do load jest instrukcja store, której nazwa w mips jest sw (store word). Służy do zapisywania danych w pamięci, a jej format jest taki sam jak instrukcji lw.
- •Potok (strumień) (ang. Flowchart) czynności, które powinna wykonać instrukcja
- •Instrukcja iteracji
- •Inna trudność związana z procedurami w mips jest powodowana przez konieczność umieszczania na stosie zarówno liczb jak I bardziej złożonych struktur danych, na przykład ciągów liczbowych.
- •Operandy mips
- •Instrukcje języka asembler
- •Schemat ilustrujący realizację zbioru instrukcji mips
- •Poprzedni schemat uzupełniony o niektóre linie I urządzenia systemu sterowania
- •1.Nieznana instrukcja lub przepełnienie
- •Składniki komputera zawierające informację o stanie komputera
- •2.Żądanie pobrania informacji z I/o
- •Czasy w pikosekundach (10-9s) trwania każdego z etapów wybranych instrukcji
Instrukcje języka asembler
Powyższa tabela nie zawiera wszystkich instrukcji zbioru MIPS. Architektura MIPS posługuje się zbiorem liczącym 256 instrukcji lub odmian instrukcji.
Plik wykonywalny
W obecnych czasach programiści przygotowują kod programu użytkowego w językach wysokiego poziomu (Fortran, C, Java, inne specjalistyczne). Języki te mają wiele zalet. Przede wszystkim kod pogram w języku wysokiego poziomu jest o wiele krótszy niż w języku asemblera. To redukuje liczbę możliwych pomyłek i znacznie ułatwia pracę programistom. Jednak programy takie są niezrozumiałe dla komputera. Muszą zostać przetłumaczone na język maszynowy. Zazwyczaj jest to wykonywane dwustopniowo z pomocą programów tłumaczących. Wpierw program o nazwie kompilator tłumaczy kod z języka wysokiego poziomu na symboliczny język asemblera. Dokonuje również optymalizacji programu w celu skrócenia czasu jego wykonywania. Potem inny program o nazwie asembler rozkłada instrukcje języka symbolicznego na prostsze instrukcje, które mają swoje odpowiedniki w języku maszynowym a następnie tłumaczy instrukcje na język maszynowy.
Obecnie każdy język wysokiego poziomu posiada obszerne biblioteki programów wykonujących rozmaite standardowe czynności. Jeżeli nasz program ma wykonać taką czynność to wystarczy dołączyć do niego kod odpowiedniego programu bibliotecznego w języku maszynowym. Program linker łączy kod naszego programu z kodem programów bibliotecznych, budując program wykonywalny, który zostaje umieszczony w pliku mającym zazwyczaj rozszerzenie nazwy 'exe' lub 'com'. Kompilator musi być dostosowany do języka, którego używa nasz program i do systemu operacyjnego, którego używa nasz komputer (a dokładniej do zbioru instrukcji architektury naszego komputera). Opisany powyżej sposób budowania programu wykonalnego miał na celu minimalizację czasu potrzebnego na wykonanie programu gdyż w początkowym okresie rozwoju informatyki komputery zazwyczaj służyły do wykonywania złożonych obliczeń numerycznych.
Jednakże taki sposób dołączania programów bibliotecznych ma pewne wady, na przykład dołączana jest cała biblioteka nawet wtedy, gdy nasz program potrzebuje tylko kilku programów zawartych w niej. Aby tego uniknąć wymyślono dynamiczny sposób dołączania programów bibliotecznych, które zazwyczaj znajdują się w plikach o rozszerzeniu ‘dll’ (Dynamically Linked Libraries). W obecnej wersji procedury dołączania bibliotek DLL, program biblioteczny jest dołączany do naszego programu dopiero wtedy, gdy zostanie wywołany podczas wykonywania programu głównego.
Kod wykonywalny języka Java
Niektóre języki programowania jak Basic lub Java zostały stworzone po to, aby programy napisane w nich mogły być wykonywane niekoniecznie szybko ale za to na dowolnym komputerze z określonym systemem operacyjnym. Na przykład kod w języku Java jest wpierw konwertowany na kod łatwiejszy do interpretowania, to znaczy zapisany za pomocą zbioru instrukcji kodu bitowego Javy (Java bytecode). Ten zbiór instrukcji jest bliski językowi Java, dzięki czemu kompilacja jest bardzo prosta. Inny program zwany interpreterem, który w przypadku języka Java ma nazwę własną Java Virtual Machine, wykonuje kod bitowy wiersz po wierszu. Wadą takiego sposobu wykonywania programów przeznaczonych do obliczeń numerycznych jest ok 10-krotnie dłuższy czas wykonania obliczeń w porównaniu z tym samym programem w języku C.
Nowsze wersje Jawy zawierają specyficzny kompilator (Java In Time compiler) dokonujący kompilacji programu na język maszynowy komputera w trakcie wykonywania programu. Dzięki temu czas wykonania obliczeń w porównaniu z tym samym programem pracującym pod interpreterem ulega skróceniu.
Datapath i sterowanie
Poszczególne składniki procesora można zaliczyć do różnych grup urządzeń na podstawie rozmaitych kryteriów. Istotny jest podział na składniki wykonujące operacje oraz składniki sterujące zgodnie z instrukcjami programu pracą pierwszej grupy i sprawdzające poprawność wykonania. Zbiór składników procesora wykonujących operacje i przechowujących dane nosi nazwę ścieżki danych (datapath). Ważniejsze składniki datapath to jednostka ALU, rejestry oraz pamięci przechowujące instrukcje i dane.
W poprzednim rozdziale pojawił się inny podział składników na dwie grupy, do jednej należą składniki posiadające pamięć, zostały nazwane sekwencyjnymi. W każdej chwili w pamięci tych składników przechowana jest pewna informacja, podaje ona stan tego elementu. Informacja zawarta we wszystkich takich elementach podaje stan komputera. Oznacza to, że jeżeli w pewnej chwili zapiszemy gdzieś informację stanie komputera i wyłączymy komputer to po ponownym uruchomieniu komputera i załadowaniu do niego zapisanej uprzednio informacji komputer wznowi pracę tak jakby się nic nie stało. Stan składników a więc i stan komputera zmienia się z czasem. Każdy składnik stanu posiada dwa wejścia i jedno wyjście. Jedno wejście wprowadza sygnał zegara podający czas (niepokazane na rysunku), pozostałe wejścia wprowadzają dane, a na wyjściu znajduje się informacja o stanie składnika w poprzednim cyklu zegara.
