Jednostka arytmetyczno-logiczna (ang. ALU ─ arithmetic and logical unit) to jedna z głównych części procesora prowadząca proste operacje na liczbach całkowitych,jest też zespołem programowalnych 2- wejściowych bramek logicznych operujących na równoległych bitach danych o szerokości 4, 8, 16 lub 32 bity.
Służy do wykonywania operacji arytmetycznych i logicznych na liczbach binarnych A i B. ALU ?181 realizuje 16 funkcji logicznych dwóch zmiennych A i B oraz podstawowe działania arytmetyczne: dodawanie A+B, odejmowanie A-B, przesunięcie arytmetyczne w lewo 2* A, następnik A+1, poprzednik A-1. Wszystkie te działania uwzględniają przeniesienie z poprzedniego stopnia, a więc mogą być wykonywane na liczbach wielobitowych.
oznaczenia do rysunku:
S - wejście sterujące, określające realizowaną funkcję
C0, C4 - wejścia i wyjścia przeniesienia
M - wejście trybu pracy
F - wyjście wyniku
A = B - wejście porównujące =1, gdy F=1
X, Y - wyjście do generatora przeniesień jednoczesnych
Typowe ALU ma dwa wejścia odpowiadające parze argumentów i jedno wyjście na wynik. Operacje jakie prowadzi to:
operacje logiczne AND, OR, NOT, XOR
dodawanie
często też, odejmowanie, negacja liczby, dodawanie z przeniesieniem, zwiększanie/zmniejszanie o 1
przesunięcia bitowe o stałą liczbę bitów, czasem też o zmienną liczbę
dość często mnożenie i czasem dzielenie/modulo
Przyczyną dla której operacje te grupuje się w ALU jest to, że bramek logicznych potrzebnych do zaimplementowania wszystkich operacji z zestawu: dodawanie (z przeniesieniem i bez), odejmowanie (z przeniesieniem i bez), negacja liczby zwiększanie i zmniejszanie o 1, AND, OR, NOT, XOR jest niewiele trudniejsze od zaimplementowania samego dodawania. Mnożenie jest już droższe, a dzielenie jest bardzo drogie w porównaniu do tych operacji.
Klasyczne procesory zawierały jedno ALU. Procesory o architekturze superskalarnej zawierają kilka ALU, i mogą ich używać jednocześnie. Często ALU te są nieidentyczne ─ np. z trzech ALU wszystkie potrafią wykonywać podstawowe operacje (dodawanie, odejmowanie i logiczne), a jedynie jedno potrafi mnożyć i dzielić. Taki procesor w jednym cyklu może wykonać np. 1 mnożenie i 2 dodawania, nie może natomiast wykonać 2 mnożeń. Jest to uzasadnione, ponieważ typowy program wykonuje o wiele więcej dodawań (często niejawnych dla programisty, np. przy wyliczaniu adresu pola obiektu na podstawie adresu obiektu czy dostępu do n-tej zmiennej na stosie) niż mnożeń, a dodanie mnożenia mocno komplikuje ALU.
Zadaniem jednostki arytmetyczno-logicznej jest wykonywanie operacji arytmetycznych i logicznych.
Operacje te przeprowadzane są na argumentach, które zawarte są w akumulatorze i rejestrze przejściowym. Pod względem funkcjonalności akumulator różni się od rejestru przejściowego tym, że jego zawartość może być czytana i wysyłana do innego rejestru lub pamięci, natomiast zawartość rejestru przejściowego nie może być wyprowadzana na szynę danych. Po wykonaniu operacji jednostka ALU generuje wynik, natomiast pewne specyficzne informacje typu:
-wynik równy zeru,
-przeniesienie,
-pożyczka,
-przepenienie,
-znak wyniku,
Rejestr wskaźników zwany jest też często rejestrem stanu. Za pomocą specjalnych instrukcji możliwe jest testowanie stanu poszczególnych bitów rejestru wskaźnikowego i stosowanie w programie rozgałęzień.
Zastosowanie:
W procesorach, CPU (Central Processing Unit)