Maszyna von Neumanna (ang. von Neumann machine) - koncepcja komputera, utrzymującego w pamięci zarówno program jak i dane; możliwość wymiany programu i danych na inne; zarówno program, jak i dane są przechowywane w pamięci w kodzie dwójkowym, a ich przetwarzanie odbywa się w arytmometrze; rozkazy są podzielone na dwie części: polecenie i adres argumentu (argumentów).
Operacje sprzętowe w komputerze:
odczyt z pamięci programu do procesora,
odczyt z pamięci danych do procesora,
zapis danych z procesora do pamięci danych,
odczyt z układów wejścia-wyjścia do procesora,
zapis danych z procesora do układów wejścia-wyjścia,
bezpośredni odczyt z pamięci danych przez układy wejścia-wyjścia (ang. direct memory access, DMA),
bezpośredni zapis do pamięci danych przez układy wejścia-wyjścia (ang. direct memory access, DMA),
operacje na rejestrach wewnętrznych procesora,
obsługa przerwań.
Elementy składowe komputera:
Szyna, magistrala (ang. bus) - wiązka przewodów lub zespół ścieżek na płytce obwodu drukowanego, do wzajemnej komunikacji pomiędzy elementami komputera. W definicji szyny, prócz samych przewodów sygnałowych, mieści się ściśle zdefiniowany protokół (standard) precyzujący zbiór komunikatów. Przykłady standardów szyn: ISA, PCI, SCSI, PCMCIA.
Jednostka centralna (ang. central processing unit, CPU) - element komputera, który pobiera i wykonuje rozkazy. Składa się z jednostki arytmetyczno-logicznej, jednostki sterującej, rejestrów, dekodera rozkazów. W przypadku komputerów jednoprocesorowych oznacza po prostu procesor. Natomiast, jeśli mówimy o komputerze wieloprocesorowym, CPU oznacza wszystkie procesory lub procesor nadrzędny.
Pamięć danych (ang. data memory) – pamięć do zapisu i odczytu przeznaczona do przechowywania danych.
Pamięć programu (ang. program memory) – pamięć do odczytu przeznaczona do przechowywania kodu programu.
Układ wejścia-wyjścia (ang. input-output circuit, I/O) - element komputera, służący do wymiany informacji między komputerem a urządzeniem zewnętrznym.
Elementy składowe procesora:
Jednostka arytmetyczno-logiczna zwana również arytmometrem (ang. Arithmetic Logical Unit), część procesora wykonująca podstawowe operacje arytmetyczne i logiczne, pobierającą argumenty działań z rejestrów procesora lub z pamięci oraz określająca znaczniki w rejestrze stanu procesora.
Typowe operacje wykonywane przez ALU:
suma logiczna OR (funkcja alternatywy),
iloczyn logiczny AND (funkcja koniunkcji),
różnica symetryczna EX-OR (funkcja różnowartościowości),
negacja logiczna NOT,
dodawanie i odejmowanie arytmetyczne liczb w naturalnym kodzie dwójkowym (NKB) i liczb dziesiętnych w kodzie BCD (ang. binary coded decimal),
mnożenie i dzielenie arytmetyczne liczb w naturalnym kodzie dwójkowym (NKB) i liczb dziesiętnych (BCD),
porównywanie logiczne dwóch sekwencji bitów,
porównywanie arytmetyczne dwóch liczb,
przesunięcia i rotacje,
zerowanie, ustawianie, negowanie i testowanie bitów.
Typowe znaczniki (flagi) ustawiane w wyniku operacji:
zera (ang. zero, Z),
znaku (ang. sign, S),
parzystości (ang. parity, P),
przepełnienia (ang. overflow, OV),
przeniesienia (ang. carry, C),
przeniesienia połówkowego (ang. auxiliary carry, AC).
Jednostka sterująca (ang. control unit) - część procesora, która zapewnia przebieg operacji zdefiniowanej kodem rozkazu, steruje przenoszeniem danych wewnątrz procesora oraz wymianą danych i sygnałów sterujących poprzez magistrale zewnętrzne.
Dekoder rozkazu (ang. instruction decoder) – dekoder tłumaczący kod rozkazu na mikrorozkazy realizowane przez układy wewnętrzne procesora.
akumulator (ang. accumulator, A, ACC),
rejestry robocze (ang. general purpose registers),
licznik rozkazów (ang. program counter, PC),
wskaźnik stosu (ang. stack pointer, SP),
rejestr stanu (wskaźników, flag) (ang. flag register, F, program status word, PSW),
rejestr rozkazów (ang. instruction register, IR),
pamięć podręczna (ang. cache memory) - jako zbiór rejestrów,
rejestry buforowe danych i adresu (ang. buffer registers).
Cykl pracy komputera:
Cykl rozkazowy (ang. instruction cycle) - ciąg czynności, które wykonuje układ sterowania jednostki centralnej w czasie realizowania jednego rozkazu. Na cykl rozkazowy składają się: jednakowa dla wszystkich rozkazów faza pobrania, w której pobierany jest kod operacji z komórki pamięci o adresie zapisanym w liczniku rozkazów (zawartość licznika zwiększa się, a kod operacji jest dekodowany) oraz faza wykonania, w której następuje realizacja operacji wskazanej przez rozkaz. Jeżeli w treści wykonywanego rozkazu jest adres lub argument bezpośredni, to w fazie wykonywania może nastąpić kolejne zwiększenie zawartości licznika rozkazów. Na cykl rozkazowy składają się jeden lub kilka cykli maszynowych.
Cykl maszynowy (ang. machine cycle) - cykl, w którym następuje przesłanie danych (odczyt lub zapis) między:
- jednostką centralną a pamięcią lub układem wejścia–wyjścia, - rejestrami procesora.
W zależności od rodzaju przesłania rozróżnia się cykl maszynowy: pobrania kodu operacji, odczytu i zapisu pamięci/rejestrów, odczytu i zapisu wejścia-wyjścia, przyjęcia przerwania. Jeden cykl maszynowy wykonywany jest w czasie jednego lub kilku/kilkunastu (w zależności od procesora i rodzaju cyklu) taktów zegara systemowego.
Zegar systemowy (ang. system clock) – generator impulsów prostokątnych, taktuje procesor, układy pamięciowe i układy wejścia-wyjścia.
Cykl pamięci (ang. memory cycle) - ciąg operacji składających się na jeden dostęp (odczyt lub zapis) do pamięci. W każdym cyklu maszynowym następuje wysłanie:
adresu na magistralę adresową,
danych na magistralę danych,
sygnałów sterujących, informujących o rodzaju cyklu, na magistralę sterującą.
Układy pamięci lub wejścia - wyjścia powinny w tym czasie wykonać odpowiednie czynności - zapisać dane lub wysłać je na magistralę danych. Cykl pamięci często jest utożsamiany z cyklem maszynowym.
Licznik rozkazów (ang. program counter) – rejestr procesora; adresuje pamięć programu, przechowując adres, spod którego należy pobrać kod następnego rozkazu lub argument bieżącego rozkazu (np. rozkaz MOVC A,@A+PC z listy procesora Intel 8051).
Przykład:
Rozkazy Znaczenie
MOV R2, #n; R2 n
MOV [R1],[R3+]; wykonaj n-razy:
{
[R1] [R3]
R1 R1 + 1
R3 R3 + 1
}
R1, R2, R3 – rejestry robocze,
[Rx] – adres komórki pamięci zapisanej w Rx.
Wskaźnik stosu (ang. stack pointer) – rejestr procesora; adresuje pamięć o organizacji typu „stos” (ang. LIFO – last in first out), wskazując tzw. wierzchołek stosu, czyli adres ostatnio zapisanych danych. Wykorzystywany jest do:
tymczasowego zapisu danych:
przechowywanych w rejestrach (rozkazy połóż na stos, zdejmij ze stosu),
w fazie wykonywania niektórych rozkazów przez mikroprocesor (np. dodawanie danych wielobajtowych);
zapisu zawartości licznika rozkazów PC podczas wykonywania rozkazu wywoływania podprogramu lub obsługi przerwania. Adres przechowywany w PC zostaje zapamiętany na stosie w celu umożliwienia powrotu do programu głównego po zakończeniu wykonywania podprogramu;
przechowywania danych wyrażanych za pomocą notacji przyrostkowej, zwanej również odwrotną notacją polską.
Rozkazy procesora – typy i przetwarzanie
Rozkazy maszynowe są przetwarzane przez procesor jako dane binarne (zerojedynkowe). Każdy rozkaz posiada unikatowy kod operacji oraz opcjonalnie dodatkowe elementy:
przedrostek (ang. prefix) – warunkuje sposób wykonania rozkazu,
kod operacji (ang. opcode) – określa operację, jaka ma być przeprowadzona;
przyrostek (ang. postfix) – określa rodzaj i typ argumentów,
odniesienie do argumentów źródłowych (ang. source), którymi mogą być: dane bezpośrednie, adresy pamięci lub układów we-wy, rejestry procesora;
odniesienie do argumentów przeznaczenia (ang. destination) lub wyniku (ang. result), którymi mogą być: adresy pamięci lub układów we-wy, rejestry procesora;
odniesienie do następnego rozkazu – określa adres następnego rozkazu, który będzie wykonany po rozkazie bieżącym.
Przykład 1:
NOP; nic nie rób
NOP – opcode zapisany w języku symbolicznym, tzw. mnemonik,
Przykład 2:
ADD A , R1; A A + R1
ADD – opcode,
A, R1 – argumenty źródłowe, A – argument przeznaczenia.
Przykład 3:
MOVX A , @R1; A [R1]
MOV – opcode, X – przyrostek, oznacza zewnętrzną pamięć lub układy wejścia-wyjścia,
[R1] – argument źródłowy, A – argument przeznaczenia.
Przykład 4:
LJMP adres; PC adres
L – przyrostek (ang. long)
JMP – opcode,
adres – adres następnego rozkazu.
Typowe rodzaje operacji wykonywane przez procesor:
transferu (przesłań) danych,
arytmetyczne,
logiczne,
konwersji (translacji),
wejścia-wyjścia,
sterowania systemowego,
przekazywania sterowania.
Opis skrótów:
aź – argument źródłowy,
ad – argument docelowy (przeznaczenia),
aźd – argument jednocześnie źródłowy i docelowy.
Rodzaj operacji | Nazwa operacji |
Opis |
---|---|---|
Transfer danych | Move Store Load Exchange Clear Set Push Pop |
skopiuj aź ad zapisz aź w pamięci odczytaj ad z pamięci aźd1 aźd2 wyzeruj aźd (0...0b) ustaw aźd (1...1b) zachowaj aź na stosie załaduj ad ze stosu |
Arytmetyczne | Add Subtract Multiply Divide Absolute Negate Increment Decrement Compare |
aźd aźd + aź aźd aźd – aź ad1...2 aź * aź ad1...2 aź / aź aźd |aźd| aźd - aźd aźd aźd + 1 aźd aźd – 1 aź1 – aź2, (flagi OV, Z, C, S) |
Logiczne | AND OR NOT EX-OR Test Compare Shift Rotate |
aźd aźd ∧ aź aźd aźd ∨ aź aźd neguj aźd aźd aźd ⊕ aź aź1 ∧ aź2, (flaga Z) aź1 – aź2, (flaga Z) przesuń w prawo/lewo aźd obracaj w prawo/lewo aźd |
Konwersji | Translate Convert |
aźdtabela przyporząd.aźd zmiana postaci aźd na inną |
Wejścia-wyjścia | Input Output Start I/O Test I/O |
odczytaj aź z układu we-wy zapisz ad do układu we-wy zapisz kod do układu I/O odczytaj kod stanu z układu I/O |
Sterowania systemowego | Set control bits Clear control bits |
ustaw flagi ogólnego przeznaczenia i systemowe zeruj flagi ogólnego przeznaczenia i systemowe |
Przekazywania sterowania | Jump (branch) Jump conditional Jump to Subroutine Return Execute Skip Skip conditional Halt Wait (hold) No operation |
skocz pod adres ad, czyli PC ad skocz pod adres ad, jeśli warunek spełniony/nie spełniony skocz do podprogramu, zachowaj na stosie adres powrotu wróć z podprogramu (pobierz ze stosu adres powrotu) pobierz argument i wykonaj jak rozkaz, PC bez zmian pomiń następny rozkaz pomiń następny rozkaz, jeśli warunek spełniony/nie spełniony zatrzymaj wykonywanie programu zatrzymaj wykonywanie programu a następnie wznów po spełnieniu warunku nie wykonuj żadnego działania |