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