08a

Transkrypt

08a
Rzut oka na zagadnienia zwi¡zane z projektowaniem list
rozkazów
1
Wst¦p
Przypomnijmy, »e komputer skªada si¦ z procesora, pami¦ci, systemu wej±cia-wyj±cia oraz poª¡cze« mi¦dzy nimi. W procesorze mo»emy wyró»ni¢ jednostk¦ steruj¡c¡, zestaw rejestrów oraz
jednostk¦ arytmetyczno-logiczn¡ (oczywi±cie komponenty te s¡ ze sob¡ poª¡czone). Na pami¦¢
patrze¢ b¦dziemy jak na liniow¡ tablic¦, do której pól odwoªujemy si¦ podaj¡c ich
Program to ci¡g rozkazów.
adresy.
Rozkazy umieszczone s¡ w pami¦ci. Wykonanie programu polega
na realizacji nast¦puj¡cego cyklu:
•
•
Pobranie rozkazu zaªadowanie do znajduj¡cego si¦ w procesorze rejestru rozkazów rozkazu
znajduj¡cego si¦ w pami¦ci pod adresem wskazywanym przez inny rejestr licznik rozkazów.
Zdekodowanie rozkazu wygenerowanie na podstawie kodu rozkazu odpowiednich sygnaªów, które spowoduj¡ prawidªowe wykonanie rozkazu
•
Wykonanie rozkazu
np.
wykonanie odpowiednich operacji arytmetycznych, przesªanie
danych, itp.
Po wykonaniu rozkazu nast¦puje zwi¦kszenie licznika rozkazów (wyj¡tkiem s¡ rozkazy
skoku,
które same ustawiaj¡ warto±¢ licznika rozkazów) i cykl si¦ powtarza.
Rozkazy s¡ kodowane oczywi±cie za pomoc¡ ci¡gów zero-jedynkowych. Cz¦±¢ rozkazu to
operacji
(co zrobi¢?), reszta to zazwyczaj opis
operandów
argumenty operacji?).
Na tym wykªadzie zwrócimy uwag¦ na kilka zagadnie« zwi¡zanych z projekotwaniem
rozkazów.
kod
(gdzie w rejestrach lub pami¦ci s¡
listy
Listy rozkazów s¡ jednym z najwa»nieszych elemetnów odró»niaj¡cych poszczególne
architektury. Co wi¦cej, listy rozkazów s¡ zazwyczaj trwalsze od konkretnych implementacji
sprz¦towych.
1.1
Decyzje podejmowane przy projektowaniu list rozkazów
Projektuj¡c ISA warto zwróci¢ uwag¦ na nast¦puj¡ce zagadnienia:
•
dªugo±¢ instrukcji: krótkie s¡ szybciej wykonywane i zajmuj¡ mniej miejsca, ale nie mo»e
ich by¢ zbyt du»o (bo potrzebujemy pewnej liczby bitów na kody operacji) i nie mog¡ mie¢
zbyt wielu operandów;
•
liczba operandów w instrukcji (0,1,2,3), nie zawsze staªa
•
staªa czy zmienna dªugo±¢ instrukcji: instrukcje o staªej dªugo±ci upraszczaj¡ architektur¦,
ale marnuje si¦ wtedy zazwyczaj miejsce.
1
•
organizacja pami¦ci (bajtowa, sªowowa)
•
sªowo maszynowe to zazwyczaj kilka bajtów (2,4,8); w jakiej kolejno±ci przechowywa¢ bajty
sªowa (little endian, big endian)
•
tryby adresowania
•
liczba rejestrów i ich organizacja
•
poªo»enie operandów (rejestr-rejestr, rejestr-pami¦¢, pami¦¢-pami¦¢)
•
rodzaje instrukcji
•
rodzaje argumentów (liczby, adresy, znaki,...)
1.2
Little endian i big endian
Wi¦kszo±¢ wspóªczesnych komputerów adresuje pami¦¢ bajtowo.
Istotne jest zatem w jakiej
kolejno±ci le»¡ bajty sªowa. Dwie mo»liwo±ci: kolejno±¢ naturalna (big endian) i odwrotna (little
endian). Wi¦kszo±¢ komputerów unixowych jest zgodna z big endian, wi¦kszo±¢ pecetów z little
endian. Niektóre procesory obsªuguj¡ oba standardy.
Przykªad: jak pami¦ta¢ szesnastkow¡ warto±¢ 12345678 w obu standardach. Rysunek 1.
Rysunek 1: Little endian i big endian
1.3
Format rozkazów
Liczba operandów i liczba dost¦pnych rejestrów ma bezpo±redni wpªyw na dªugo±¢ rozkazów. Jak
wspomnieli±my dªugo±¢ rozkazów mo»e by¢ staªa lub zmienna.
Oba rozwi¡zania maj¡ wady i
zalety. Najcz¦±ciej wybiera si¦ rozwi¡zanie po±rednie: mamy ustalone z góry 2-3 mo»liwe dªugo±ci
rozkazów.
Najcz¦±ciej spotykane formaty rozkazów przewiduj¡ od zera do trzech operandów:
•
sam kod operacji
•
kod operacji + jeden adres (zazwyczaj w pami¦ci)
•
kod operacji + dwa adresy (2 rejestry lub rejestr, pami¦¢)
•
kod operacji + trzy adresy (3 rejestry lub rejestry i pami¦¢)
Istniej¡ architektury, w których prawie wszystkie instrukcje u»ywaj¡ zera operandów chodzi
o architektury stosowe.
Rozwa»my wyra»enie
Z = (X · Y ) + (W · U )
i spróbujmy napisa¢ programy, które je wylicza u»ywaj¡¢ kolejno ISA bazuj¡cych na rozkazach
o ró»nych liczba operandów. Na pocz¡tek trzy operandy (tego typu rozkazy przewa»aj¡ w architekturze MIPS, któr¡ niedªugo poznamy):
2
Mult R1, X, Y
Mult R2, W, U
Add Z, R2, R1
Teraz ISA dwuargumentowa. Zazwyczaj wtedy jeden argument jest w rejestrze, a drugi jest
rejestrem lub jest w pami¦ci.
Load R1, X
Mult R1, Y
Load R2, W
Mult R2, U
Add R1, R2
Store Z, R1
W powy»szych przykªadzie pierwszy operand okre±la adres docelowy. Tak zorganizowane s¡
rozkazy Intela. W Motoroli jest odwrotnie.
Teraz nasz program napiszemy za pomoc¡ rozkazów jednoargumentowych (drugi argument i
adres docelowy s¡ domy±lne specjalny rejestr akumulatorowy) :
Load X
Mult Y
Store Temp
Load W
Mult U
Add Temp
Store Z
I na koniec architektura stosowa:
Push X
Push Y
Mult
Push W
Push U
Mult
Add
Pop Z
2
Rodzaje rozkazów
Standardowy podziaª rozkazów:
•
przenosz¡ce dane (pami¦¢-rejestry, rejestry-rejestry; mo»emy mie¢ osobne rozkazy dla obu
grup)
•
arytmetyczne (caªkowitoliczbowe i zmiennoprzecinkowe; ró»ne rozkazy dla danych ró»nej
dªugo±ci; inne rozkazy na rejestrach, inne na pami¦ci; ró»ne rozkazy dla ró»nych trybów
adresowania)
•
logiczne (AND, OR, NOT, XOR)
•
manipuluj¡ce bitami (przesuwanie bitów arytmetyczne i logiczne, obracanie)
3
•
I/O (bardzo zró»nicowane w ró»nych architekturach; obsªuga programowa, przerwania,
urz¡dzenia DMA)
•
przekazuj¡ce sterowanie (skoki warunkowe i bezwarunkowe, rozkazy pomini¦cia, wywoªania
procedur)
•
specjalne (przetwarzanie ªa«cuchów znaków, wspomaganie j¦zyków wysokiego poziomu,
zapewniaj¡ce ochron¦, steruj¡ce rejestrem agowym, zarz¡dzaj¡ce pami¦ci¡ podr¦czn¡)
3
Adresowanie
3.1
Podstawowe tryby adresowania
1. adresowanie natychmiastowe warto±ci przechowywane w rozkazie to rzeczywiste argumenty staªe (a nie ich adresy)
2. adresowanie bezpo±rednie warto±¢ w rozkazie to adres rzeczywistego argumentu w pami¦ci
3. adresowanie rejestrowe warto±¢ w rozkazie to numer (adres) rejstru
4. adresowanie po±rednie warto±¢ w rozkazie to adres adresu rzeczywistego argumentu
5. adresownaie po±rednie rejestrowe warto±¢ w rozkazie to numer rejestru, w którym jest
adres rzeczywistego argumentu w pami¦ci
6. adresowanie indeksowe i adresowanie wzgl¦dem bazy w adresowaniu indeksowym wykorzystuje si¦ rejestr indeksowy (domy±lny lub okre±lony w rozkazie), w którym przechowywana jest warto±¢ przesuni¦cia, któr¡ trzeba doda¢ do operandu, aby uzyska¢ rzeczywisty
adres argumentu; w adreswoaniu bazowym adres wylicza si¦ identycznie; ró»nica polega na
ogólnej koncepcji u»ycia: rejestr indeksowy zawiera przesuni¦cie, rejestr bazowy baz¦);
oba tryby przydaj¡ si¦ przy operacjach na tablicach i ªa«cuchach.
7. adresowanie stosowe operand na stosie
8. inne tryby adresowania: po±rednie indeksowe, automatycznie zwi¦kszaj¡ce si¦ lub malej¡ce
adresy, wzgl¦dne adres wzgl¦dem aktualnej instrukcji;
Ilustracja ró»nych trybów adresowania na rysunku 2
4
Rysunek 2: Podstawowe tryby adresowania
5

Podobne dokumenty