[ { "content": "Strona 1Programowanie w języku asembleraProgramowanie w języku asemblera niewiele różni się od programowania w językach wysokiego poziomu. Podstawowa różnica polega na konieczności korzystania ze znacznie uboższego zestawu instrukcji. W językach asemblera brak np. instrukcji strukturalnych bądź instrukcji pozwalających w prosty sposób zapisać obliczanie wyrażenia arytmetycznego. Jednakże wszystko co możemy zapisać w językach wysokiego poziomu z pewnością można też zapisać używając instrukcji asemblera. Można także zrobić wiele działań niemożliwych do zapisania w językach wysokiego poziomu. Programista piszący w języku asemblera ma pełną kontrolę nad tym co się dzieje w trakcie obliczeń w procesorze. Nie jest on także ograniczany przez różne reguły obowiązujące w językach wysokiego poziomu. Pełna kontrola i brak ograniczeń oznaczają jednak także pełną odpowiedzialność za pisany program.Pisząc program w języku asemblera posługujemy się niemal wyłącznie instrukcjami odpowiadającymi rozkazom danego procesora. Dlatego konieczne jest poznanie tych rozkazów, podobnie jak zaznajomienie się z architekturą tegoż procesora. Program w języku asemblera tworzą rozkazy oraz dane, na których te rozkazy działają. Program składa się z kolejnych linii, w każdej linii może znaleźć się jeden rozkaz lub deklaracja pojedynczej danej. Formalnie składnia linii programu jest następująca:[:] []gdzie: – ciąg liter i cyfr będący symboliczną reprezentacją określonego adresu – symboliczna nazwa jednego z rozkazów procesora lub jednego z tzw. pseudorozkazów rezerwacji miejsca w pamięci na dane (RST, RPA) – liczba dziesiętna lub jedna z etykiet wprowadzonych na początku linii", "source": "Asembler.pdf", "tags": [], "type": "prg" }, { "content": "Pseudorozkazy RST i RPA pozwalają odpowiednio zarezerwować miejsce w pamięci na pojedynczą daną o ustalonej (jako argument) wartości początkowej oraz zarezerwować miejsce w pamięci na daną bez wskazywania jej wartości początkowej. Jako rozkaz może pojawić się nazwa jednego z dostępnych rozkazów. Przyjmiemy, że w procesorze maszyny W dostępnych jest 8 rozkazów wymienionych w poniższej tabeli.NazwaKodDziałanieSTP000Zatrzymanie (zakończenie) pracy programuDOD001Dodanie do akumulatora zawartości komórki pamięci wskazanej przez argumentODE010Odjęcie od akumulatora zawartości komórki pamięci wskazanej przez argumentPOB011Pobranie do akumulatora zawartości komórki pamięci wskazanej przez argumentŁAD100Załadowanie zawartości akumulatora do komórki pamięci wskazanej przez argumentStrona 2NazwaKodDziałanieSOB101Ustalenie, że kolejnym wykonywanym rozkazem będzie ten, który znajduje się w komórce pamięci wskazanej przez argument (tzw. skok bezwarunkowy)SOM110Jeżeli w akumulatorze jest liczba ujemna, jako następny będzie wykonywany rozkaz umieszczony w komórce pamięci wskazanej przez argument. Jeżeli w akumulatorze jest liczba nieujemna, jako następny zostanie wykonany rozkaz umieszczony w pamięci bezpośrednio za rozkazem SOMSOZ111Skok pod adres wskazany argumentem wykonywany tylko, gdy w akumulatorze jest 0. W przeciwnym razie jako następny zostanie wykonany rozkaz umieszczony w pamięci bezpośrednio za rozkazem SOZ", "source": "Asembler.pdf", "tags": [], "type": "prg" }, { "content": "Aby napisać program w języku asemblera trzeba najpierw stworzyć algorytm rozwiązujący określone zadanie, sprecyzować go z wykorzystaniem wyłącznie dostępnych rozkazów i wreszcie zapisać go w formie linii programu w języku asemblera. Pisanie tego typów programów zilustruję kilkoma przykładami.Przykład 1Napisać program obliczający iloczyn dwóch liczb naturalnych a i b i umieszczający wynik w komórce oznaczonej etykietą c.Pierwszym krokiem rozwiązania tego zadania jest wymyślenie odpowiedniego algorytmu. By znaleźć iloczyn dwóch liczb naturalnych a i b, wystarczy na wstępie założyć, że jest on równy 0 a następnie a-krotnie zwiększać jego wartość o b. Ilustruje to schemat blokowy na poniższym rysunku:Rysunek 1. Schemat blokowy algorytmu mnożenia", "source": "Asembler.pdf", "tags": [], "type": "prg" }, { "content": "Startc = 0a = 0 ?c = c + ba = a - 1StopPoniżej zamieszczono listing odpowiedniego programu w sytuacji, gdy zmienne a i b są równe Strona 3odpowiednio 4 i 5. Każdej operacji na schemacie zwykle będzie odpowiadać jedna lub więcej linii w tekście programu w języku asemblera. Zauważmy, że nadanie wartości początkowej zmiennej c nie jest reprezentowane za pomocą sekwencji rozkazów maszyny W ale zostało zrealizowane dzięki użyciu pseudorozkazu RST (linia 14 w kodzie). Testowanie, czy a przyjmuje wartość 0 realizuje kod umieszczony w liniach 1 i 2. Jeśli warunek jest spełniony (a = 0), należy zakończyć wykonywanie pętli, pobrać wynik do akumulatora i zakończyć program (linie 10 i 11).1.POB a2.pętla:SOZ koniec3.POB c4.DOD b5.ŁAD c6.POB a7.ODE Jeden8.ŁAD a9.SOB pętla10.koniec:POB c11.STP12.a:RST 413.b:RST 514.c:RST 015.Jeden:RST 1Zwiększenie wartości zmiennej c o wartość b realizowane jest przez rozkazy z linii 3, 4 i 5, zaś dekrementacja zmiennej a to linie 6, 7 i 8. Zauważmy, że argumentem rozkazu odejmowania (linia 7) nie jest liczba 1 (ODE 1) ale etykieta Jeden wskazująca na komórkę pamięci zawierającą jedynkę (linia 15). W naszym procesorze stosowany jest tryb adresowania bezpośredniego co oznacza, że zapis ODE 1 zostałby zinterpretowany jako chęć odjęcia od akumulatora zawartości komórki pamięci o adresie 1, tymczasem w tej komórce pamięci zostanie umieszczony rozkaz znajdujący się w drugiej linii kodu naszego programu1. Wreszcie w linii 9 wracamy na początek pętli do testowania warunku jej zakończenia.Podany program można poddać asemblacji (skompilować) i, po załadowaniu do pamięci operacyjnej, wykonać. Po jego wykonaniu w akumulatorze powinna się znaleźć końcowa wartość zmiennej oznaczonej etykietą c, czyli w tym przypadku wartość 20.", "source": "Asembler.pdf", "tags": [], "type": "prg" }, { "content": "Operacje na tablicachRozkazy wymienione w tabeli na stronie 1 pozwalają zapisać wiele nawet bardzo złożonych programów operujących na różnorodnych danych. Jednakże operowanie za ich pomocą na danych tworzących złożone struktury nie jest prostym zadaniem. Wymaga to wykonania dość skomplikowanych przekształceń wykorzystujących wiedzę o położeniu i organizacji danych w pamięci komputera. Problem ten zilustruję przykładem.W pamięci komputera znajduje się n-elementowa tablica. Pierwszy element tej tablicy jest zapisany w komórce pamięci oznaczonej etykietą Tablica. Do komórki pamięci oznaczonej etykietą Suma należy wpisać sumę wszystkich n elementów tablicy.Zanim przedstawimy rozwiązanie zadania, wyjaśnijmy jak elementy tablicy są rozmieszczone w pamięci. Tablica w pamięci komputera tworzy spójny obszar, każdy kolejny element tablicy zapisany jest w kolejnej komórce tego obszaru. Na przykład czteroelementową tablicę wypełnioną Strona 4czterema kolejnymi liczbami naturalnymi zapiszemy w języku asemblera maszyny W w następujący sposób:1.Tablica:RST 12.RST 23.RST 34.RST 4Znając adres pierwszego elementu tablicy z łatwością możemy wyznaczyć położenie w pamięci (adres) któregokolwiek innego elementu tablicy. Założymy, że tablica, podobnie jak w języku C, będzie indeksowana od 0. Aby wyznaczyć adres w pamięci trzeciego elementu tablicy (czyli elementu o indeksie 2), należy do adresu początku tablicy dodać indeks odpowiedniego elementu. Jeżeli tablica rozpoczyna się od komórki pamięci o adresie 20, to trzeci element tej tablicy znajdziemy pod adresem 22 (20 + 2 = 22).", "source": "Asembler.pdf", "tags": [], "type": "prg" }, { "content": "Aby zsumować wszystkie elementy tablicy zaczniemy od wyzerowania zmiennej Suma. Następnie będziemy do zmiennej Suma w pętli dodawać wartości kolejnych elementów poczynając od pierwszego z nich, czyli tego, który znajduje się pod adresem symbolicznym reprezentowanym etykietą Tablica. W każdym kolejnym przebiegu pętli będzie dodawana wartość kolejnego elementu tablicy, czyli adres dodawanego elementu za każdym przebiegiem pętli musimy zwiększać o 1. Tego typu zadanie łatwo byłoby zrealizować posługując się rozkazami używającymi adresowania pośredniego bądź indeksowego. Wiele procesorów oferuje takie rozkazy.Na liście rozkazów naszego komputera nie znajdziemy jednak rozkazów posługujących się innymi trybami adresowania niż adresowanie bezpośrednie. Dlatego też nasze rozwiązanie będzie wymagać modyfikacji treści programu w trakcie jego działania.1.Pętla:POB n2.ODE Jeden3.SOM Koniec4.ŁAD n5.POB Suma6.Rozkaz:DOD Tablica7.ŁAD Suma8.POB Rozkaz9.DOD Jeden10.ŁAD Rozkaz11.SOB Pętla12.Koniec:POB Suma13.STP14.n:RST 415.Tablica:RST 116.RST 217.RST 318.RST 419.Suma:RST 020.Jeden:RST 1", "source": "Asembler.pdf", "tags": [], "type": "prg" }, { "content": "Za każdym przebiegiem pętli trzeba modyfikować treść rozkazu dodawania kolejnego elementu tablicy, tak aby rozkaz ten rzeczywiście za każdym razem używał adresu kolejnego elementu. Skoro elementy tablicy są zapisane w pamięci po kolei jeden za drugim, oznacza to, że, jak już wcześniej Strona 5powiedziano, w każdym przebiegu pętli musimy zwiększać adres dodawanego elementu o 1. Zadanie to realizują rozkazy umieszczone w liniach 8, 9 i 10. Do akumulatora pobierany jest z pamięci rozkaz dodawania kolejnego elementu tablicy (linia 6 w programie), zwiększany o 1 i ponownie zapisywany w to samo miejsce do pamięci. Dzięki temu, gdy rozkaz ten (z linii 6) będzie ponownie wykonywany, jego argumentem będzie już kolejny element tablicy. Należy tu wyraźnie zaznaczyć, że modyfikacja z linii 8 – 10 zmienia wyłącznie treść rozkazu z linii 6 a nie powoduje zmiany znaczenia etykiety Tablica. Jeżeli w programie w kilku rozkazach wystąpiłaby konieczność odwoływania się do kolejnych elementów tablicy w kolejnych przebiegach pętli, wszystkie te rozkazy należałoby w podobny sposób modyfikować.Zadanie sumowania elementów tablicy można zrealizować także nieco inaczej.1.Pętla:POB n2.ODE Jeden3.SOM Koniec4.ŁAD n5.POB Pob06.DOD Adres7.ŁAD Rozkaz8.POB Suma9.Rozkaz:RPA// tu jest rozkaz dodawania kolejnego elementu tablicy10.ŁAD Suma11.POB Adres12.DOD Jeden13.ŁAD Adres14.SOB Pętla15.Koniec:POB Suma16.STP17.n:RST 318.Tablica:RST 1019.RST -520.RST 321.Suma:RST 022.Jeden:RST 123.Pob0:POB 024.Adres:RST TablicaI w tym przypadku w pętli dodawane są kolejne elementy tablicy, ale nieco inaczej działa modyfikacja kodu. Rozwiązanie to przypomina rozwiązanie wykorzystujące wskaźniki w języku C. Komórka oznaczona etykietą Adres (linia 24) zawiera adres początku tablicy (jest jakby wskaźnikiem na tą tablicę). W każdym przebiegu pętli do dotychczasowej sumy dodawana jest wartość elementu tablicy wskazywanego przez wskaźnik Adres (linia 9). Aktualna wartość komórki Adres dodawana jest do kodu rozkazu POB 0 (linia 23) i wynik zapisywany w miejsce oznaczone etykietą Rozkaz (linia 9). W ten sposób uzyskujemy rozkaz dodający do akumulatora zawartość odpowiedniej komórki pamięci, tej której adres zawiera komórka Adres.", "source": "Asembler.pdf", "tags": [], "type": "prg" }, { "content": "Operacje wejścia/wyjściaDotychczasowe programy nie wymieniały informacji z otoczeniem a jedynie przetwarzały dane Strona 6na wstępie umieszczone w pamięci i tam też (w pamięci) zapisywały wyniki. Programy te działałyby znacznie bardziej ogólnie i byłyby bardziej użyteczne, gdyby dane wejściowe można było wprowadzić z klawiatury a wynik działania programu wyświetlić na ekranie. Aby to jednak było możliwe, konieczne jest uzupełnienie listy rozkazów o tzw. rozkazy wejścia/wyjścia.Rozkazy wejścia/wyjściaDla zapewnienia wymiany informacji z otoczeniem należy dodać co najmniej 2 rozkazy: rozkaz wczytania pojedynczego znaku z urządzenia wejściowego (np. klawiatury) oraz rozkaz umożliwiający wyprowadzenie zawartości akumulatora na urządzenie wyjściowe (np. ekran). Argumentami obydwu tych rozkazów będzie numer urządzenia, którego dotyczy rozkaz. Przyjmiemy, że standardowe urządzenie wejściowe (klawiatura) oznaczone jest numerem 1, zaś standardowe urządzenie wyjściowe oznaczone jest numerem 2. Rozkaz wczytywania znaku nazwiemy WPR (wprowadź znak). Po wczytaniu kod wczytanego znaku zostaje umieszczony w akumulatorze. Rozkaz wyprowadzania znaku (WYP) wypisze znak, którego kod jest w akumulatorze, na urządzenie wyjściowe o podanym numerze. Wykorzystując te rozkazy można na przykład napisać program kopiujący na urządzenie wyjściowe znaki wprowadzone na klawiaturze. Program w pętli wczytuje znak i wypisuje go na standardowe wyjście. Sygnałem do zakończenia programu może być wprowadzenie jakiegoś umówionego znaku kończącego. U nas takim znakiem będzie spacja. Poniżej znajduje się kod tego programu.1.Pętla:WPR 12.ODE Spacja3.SOZ Koniec4.DOD Spacja5.WYP 26.SOB Pętla7.Koniec:STP8.Spacja:RST 32", "source": "Asembler.pdf", "tags": [], "type": "prg" }, { "content": "Zwykle programy obliczeniowe jako danych wejściowych nie potrzebują pojedynczych znaków ale liczb zapisanych w postaci ciągu cyfr. Także wyniki liczbowe należałoby wyświetlać jako ciągi cyfr dziesiętnych. Oznacza to konieczność konwersji wczytanych ciągów cyfr do postaci liczby oraz oraz odwrotnej zamiany liczby zapisanej binarnie na odpowiednią sekwencję cyfr dziesiętnych. Wydaje się, że najlepiej będzie, jeśli zadania te zostaną zrealizowane w postaci specjalnych podprogramów.PodprogramyKorzystanie z podprogramów oznacza konieczność dodania kolejnych kilku rozkazów do naszego procesora. Rozkaz skoku do podprogramu SDP podobnie do zwykłego skoku powoduje przejście do wykonywania rozkazu, którego adres jest argumentem rozkazu SDP. Dodatkowo jednak na stosie zapisywana jest zawartość licznika rozkazów (tzw. ślad). Dzięki zachowaniu śladu na stosie możliwy jest powrót do wykonywania następnego rozkazu po rozkazie SDP w momencie, gdy zakończono wykonywanie podprogramu. Powrót ten realizuje rozkaz PWR. Ponadto wprowadzimy jeszcze 2 rozkazy związane ze stosem: DNS – dopisujący zawartość akumulatora na szczyt stosu oraz PZS zdejmujący wartość ze szczytu stosu i zapisujący ją w akumulatorze. Rozkazy te często są używane do przekazywania parametrów między programem wywołującym a podprogramem. Poniżej przedstawiono podprogram obliczający kwadrat danej liczby. Liczba, której kwadrat chcemy znaleźć powinna najpierw zostać umieszczona w akumulatorze. Także w Strona 7akumulatorze podprogram zwróci wynik.", "source": "Asembler.pdf", "tags": [], "type": "prg" }, { "content": "1.SDP kwadrat// obliczamy kwadrat liczby zapisanej w akumulatorze2.STP// po wykonaniu podprogramu wynik w akumulatorze, kończymy program3.kwadrat:ŁAD liczba// tu zaczyna się podprogram, parametr zachowany w zmiennej liczba4.SOM ujemna// gdy ujemna, obliczamy kwadrat z jej wartości bezwzględnej5.SOZ zero// gdy zero, nic nie trzeba liczyć (wynikiem też jest zero), wracamy6.dodatnia:ŁAD iloczyn// nie ujemna i nie zero, więc dodatnia; pierwszy przebieg pętli7.ŁAD liczba// potrzebne, gdy była liczba ujemna i obliczono jej wartość bezwzględną8.pętla:ODE jeden// w każdym przebiegu pętli dekrementujemy licznik wykonań9.SOZ wracaj// gdy licznik osiągnie zero, kończymy10.ŁAD licznik// gdy nie koniec, trzeba zapamiętać licznik11.POB iloczyn// w każdym przebiegu pętli12.DOD liczba// do iloczynu dodajemy liczbę, której kwadrat liczymy13.ŁAD iloczyn14.POB licznik// a potem znów dekrementacja licznika i sprawdzenie czy nie koniec15.SOB pętla16.wracaj:POB iloczyn// na koniec wynik w zmiennej iloczyn a powinien znaleźć się w akumulatorze17.zero:PWR// i wracamy do programu głównego18.ujemna:ODE liczba// parametrem liczba ujemna, a zatem obliczamy najpierw jej wartość19.ODE liczba// bezwzględną, a potem postępujemy identycznie20.SOB dodatnia// jak z liczbą dodatnią (-a)2 = a 221.liczba:RPA// wartość parametru podprogramu22.iloczyn:RPA// wynik obliczania kwadratu liczby23.licznik:RPA// licznik przejść pętli (inicjowany identycznie jak liczba)24.jeden:RST 1Program główny (linie 1 i 2) został tu uproszczony do maksimum i sprowadza się do wywołania podprogramu obliczającego kwadrat liczby zapisanej w akumulatorze2. Treść podprogramu rozpoczyna się w linii 3. Parametr (liczba, której kwadrat chcemy policzyć) znajduje się w akumulatorze. Najpierw podprogram sprawdza z jaką wartością parametru ma do czynienia. Jeżeli jest to zero, natychmiast przechodzimy do rozkazu powrotu z podprogramu a zwracanym wynikiem jest 0. Gdy w akumulatorze znajduje się liczba ujemna, obliczana jest liczba do niej przeciwna (lub jeśli ktoś tak woli wartość bezwzględna) a następnie postępuje się identycznie jak dla liczby dodatniej. W przypadku liczby dodatniej, by wyznaczyć jej kwadrat wystarczy liczbę tę dodać do siebie określoną liczbę razy. Zadanie to realizuje pętla, której treść zapisano w liniach od 8 do 15.", "source": "Asembler.pdf", "tags": [], "type": "prg" }, { "content": "Podprogram wypisywania liczby całkowitej na urządzenie wyjścioweZadanie wypisywania liczby umieszczonej w akumulatorze na urządzenie wyjściowe można zrealizować w postaci podprogramu Write o kodzie przedstawionym poniżej.1.SDP Write2.STP3.Write:ŁAD liczbaStrona 84.POB Zero5.DNS6.POB liczba7.SOM Abs8.Posit:DZI St109.MNO St1010.ŁAD tmp11.POB liczba12.ODE tmp13.DOD Znak014.DNS15.POB tmp16.DZI St1017.SOZ Kończ18.ŁAD liczba19.SOB Posit20.Abs:POB Minus21.WYP 222.POB Zero23.ODE liczba24.ŁAD liczba25.SOB Posit26.Kończ:PZS27.SOZ Wracaj28.WYP 229.SOB Kończ30.Wracaj:PWR31.Zero:RST 032.liczba:RPA33.tmp:RPA34.St10:RST 1035.Znak0:RST '0'36.Minus:RST '-'Lista rozkazów została wzbogacona o rozkazy mnożenia (MNO) i dzielenia (DZI). Podstawowym zadaniem tej procedury jest przekształcenie liczby binarnej do postaci ciągu cyfr dziesiętnych (reprezentowanych jako znaki ASCII). Konwersja ta została zrealizowana z wykorzystaniem stosu. Na stos ładowane są po kolei cyfry (zapisane z użycie kodu ASCII) będące kolejnymi resztami z dzielenia liczby binarnej przez 10. Do każdej reszty dodawany jest kod ASCII odpowiadający znakowi 0, dzięki czemu od razu dokonywana jest konwersja na znaki tego kodu. Cyfry tworzące zapis liczby generowane są zatem od końca, dzięki zastosowaniu stosu będą jednak wyprowadzane na wyjście w odwrotnej, czyli poprawnej, kolejności. W kolejnym kroku liczba zostaje podzielona przez 10 i czynności są powtarzane aż do osiągnięcia wartości 0. Wtedy ze stosu pobieramy po kolei cyfry i wypisujemy na urządzenie wyjściowe. Aby łatwo wykryć kiedy kończą się cyfry, zanim zapisywano je na stosie umieszczono tam tzw. wartownika (tu w postaci liczby 0, Strona 9zob. linie 4 i 5 w kodzie podprogramu). Pobranie ze stosu wartownika powoduje zakończenie wypisywania cyfr na wyjście i tym samym oznacza zakończenie podprogramu.", "source": "Asembler.pdf", "tags": [], "type": "prg" }, { "content": "Także podczas wczytywania liczby dokonywana jest konwersja kolejnych tworzących ją znaków na odpowiednią postać binarną. Zadanie to realizuje procedura Read. Czyta ona kolejne cyfry tworzące zapis liczby naturalnej i konwertuje na postać binarną aż do natrafienia na znak inny niż cyfra. Po wykonaniu wczytana liczba znajduje się w akumulatorze. Kod wczytywania liczby pozostawiamy czytelnikowi do analizy.1.SDP Read2.STP3.Read:POB Zero4.Wróć:ŁAD Liczba5.WPR 16.ODE Znak07.SOM Gotowe8.ODE St109.SOM Dalej10.Gotowe:POB Liczba11.PWR12.Dalej:DOD St1013.ŁAD Cyfra14.POB Liczba15.MNO St1016.DOD Cyfra17.SOB Wróć18.Cyfra:RPA19.Liczba:RPA20.St10:RST 1021.Zero:RST 022.Znak0:RST '0'Zadania do wykonania1. Napisać program obliczający największy wspólny dzielnik NWD dwu liczb naturalnych umieszczonych w komórkach oznaczonych etykietami A i B.2. Napisać program obliczający najmniejszą wspólną wielokrotność NWW dwu liczb naturalnych umieszczonych w komórkach oznaczonych etykietami A i B.3. Napisać program obliczający iloczyn dwu liczb naturalnych umieszczonych w komórkach oznaczonych etykietami A i B.4. Napisać program obliczający resztę z dzielenia dwu liczb naturalnych umieszczonych w komórkach oznaczonych etykietami A i B.5. Dana jest n-elementowa tablica oznaczona etykietą Tab. Napisać program sprawdzający ile razy w tej tablicy pojawia się bajt o wartości podanej w komórce Wzorzec.6. Dana jest n-elementowa tablica oznaczona etykietą Tab. Napisać program zamieniający parami elementy tej tablicy. Założyć, że n jest liczbą parzystą. Np. jeśli w tablicy były kolejno liczby 1 2 3 i 4, to po wykonaniu programu ma być 2 1 4 3.Strona 107. Dana jest n-elementowa tablica oznaczona etykietą Tab. Napisać program odwracający zawartość tej tablicy. Np. jeśli w tablicy były kolejno liczby 1 2 3 4 i 5, to po wykonaniu programu ma być 5 4 3 2 1.8. Dana jest n-elementowa tablica oznaczona etykietą Tab. Napisać program znajdujący wartość największego elementu tej tablicy i wpisujący ją do komórki Max.", "source": "Asembler.pdf", "tags": [], "type": "prg" }, { "content": "MINUT 2020 (2), s. 1 11 Alina MOMOT Wydziaª Automatyki, Elektroniki i Informatyki, Politechnika ‘l¡ska, ul. Akademicka 16, 44-100 Gliwice Projektowanie rozkazów dla maszyny W konspekt ¢wicze« laboratoryjnych Streszczenie. Artykuª opisuje propozycj¦ przeprowadzenia ¢wicze« laboratoryjnych dotycz¡cych podstaw projektowania rozkazów dla maszyny W. Zakªada si¦ przy tym, »e uczestnicy laboratorium dysponuj¡ programowym symulatorem maszyny W oraz przyswoili ju» podstawowe wiadomo±ci na temat architektury tej maszyny, sposobu dziaªania ukªadu steruj¡cego i ogólnych zasad projektowania rozkazów. Sªowa kluczowe: maszyna W, projektowanie rozkazów, konspekt zaj¦¢. 1. Wst¦p Skutecznie przeprowadzone zaj¦cia lekcyjne powinny obejmowa¢ przede wszystkim prezentacj¦ zrozumienia materiaªu przez ucznia. Wymaga to od uczniów kierowania si¦ celem uczenia si¦ i pogª¦biania rozumienia omawianego materiaªu. Prezentacja taka stanowi dowód zrozumienia tre±ci i nabycia umiej¦tno±ci zawartych w celu uczenia si¦ [5]. Dlatego te» bardzo wa»ne jest, aby zarówno ucze«, jak i nauczyciel znali ten cel i zmierzali w jego kierunku. Równie wa»ne jest okre±lenie i przygotowanie odpowiednich kryteriów sukcesu oraz odpowiednie zwi¦kszanie stopnia trudno±ci realizowanych zada« w zale»no±ci od mo»liwo±ci danego ucznia. Jak pisz¡ autorki ksi¡»ki Cele uczenia si¦. Jak pomóc uczniom zrozumie¢ ka»d¡ lekcj¦ (zob. [5], s. 76): Bardzo wa»ne jest tutaj rozró»nienie celu uczenia si¦ i oceny. Nie chodzi nam o to, »e oceny nie s¡ wa»ne. Uwa»amy jednak, »e kiedy nauczyciele zach¦caj¡ uczniów do uczenia si¦ na konkretny stopie«, a nie do opanowania materiaªu, który spowoduje wystawienie takiego stopnia, ograniczaj¡ mo»liwo±ci swoich uczniów.", "source": "B-20-001 Konspekt.pdf", "tags": [], "type": "prg" }, { "content": "Zach¦canie uczniów do samodzielno±ci jest kluczowym elementem procesu uczenia si¦. Potrzeb¦ samodzielno±ci w zdobywaniu wiedzy zauwa»ano ju» w ubiegªym wieku. Jak pisze bowiem w wydanej w 1938 roku ksi¡»ce Ignacy Schreiber (zob. [7], s. 8 9): ucze« naprawd¦ musi wprawi¢ si¦ w samodzielne zdobywanie wiedzy i nauczy¢ si¦ samodzielnie osi¡gni¦tymi ju» wiadomo±ciami operowa¢. W przeciwnym bowiem wypadku przyjmuje gotow¡ potraw¦ ju» pokrajan¡ i przygotowan¡ ostatecznie do spo»ycia, ale mo»e j¡ tylko poªkn¡¢ i w miar¦ nabywanej wprawy coraz to lepiej poªyka, nie mo»e jej jednak strawi¢; i nigdy nie nauczy si¦ samodzielnie swych potraw przyrz¡dza¢. W ksi¡»ce tej autor zwraca równie» uwag¦ na problem przywi¡zywania przez uczniów nadmiernej wagi do otrzymywanych ocen (zob. [7], s. 96): Ucze« widzi w nauce nie warto±ci istotne a tylko mo»liwo±¢ uzyskania tych czy innych stopni, za którymi idzie patent. Ten ±wistek papieru, któremu ustawa nadaªa moc prawn¡, jest wytyczn¡ jego dziaªania. Z nielicznymi wyj¡tkami dziecko nie chce posi¡±¢ wiedzy [...]. W zasadzie uczniowi chodzi o dodatni stopie« i za niego, pobawmy si¦ w paradoks, gotów zrzec si¦ caªej wiedzy. Autor stawia dalej tez¦, »e w zwi¡zku z tym jako jeden z najwa»niejszych ±rodków nauki ucze« widzi ±ci¡ganie, za±: To absurdalne stanowisko jest naturalnym wynikiem uto»samienia nauki z ocen¡, uzale»nieniem warto±ci intelektualnych od praktycznych celów. Dodaje te», »e: Mo»na zapatrywanie to zwalcza¢, je»eli kto± lubi donkiszoteri¦ i walk¦ z wiatrakami, ale jest ono racjonalne z punktu widzenia dzieci, a ojcami jego jeste±my my sami, pedagogowie, którzy oddzielili±my si¦ od dusz dzieci¦cych murem naszego systemu not i kar (zob. [7], s. 96).", "source": "B-20-001 Konspekt.pdf", "tags": [], "type": "prg" }, { "content": "Bior¡c pod uwag¦ powy»sze rozwa»ania, mo»na stwierdzi¢ zatem, »e w procesie skutecznego uczenia kluczowe jest tzw. ocenianie ksztaªtuj¡ce (ang. formative assessment). Termin ten wprowadziª do edukacji w latach 70. ubiegªego stulecia Benjamin Samuel Bloom [1], wskazuj¡c jako gªówn¡ cech¦ oceniania ksztaªtuj¡cego informacj¦ zwrotn¡, która ma pomóc uczniowi si¦ uczy¢ oraz umo»liwi¢ nauczycielowi doskonalenie techniki nauczania. Pod koniec lat 90. ubiegªego wieku Brytyjskie Stowarzyszenie Bada« Edukacyjnych powoªaªo specjalny zespóª pracuj¡cy nad szkolnym ocenianiem, za± po roku 2000 ocenianie ksztaªtuj¡ce staªo si¦ wa»nym przedmiotem bada« naukowych. Prof. John Hatti z Nowej Zelandii, podsumowuj¡c w 2009 roku wyniki 1287 bada« edukacyjnych, stwierdziª, i» wpªyw informacji zwrotnej przekazywanej uczniowi jest silniejszy ni» inne mo»liwe do zastosowania sposoby oddziaªywania nauczyciela na ucznia [3]. W ksi¡»ce Ucz¦ (si¦) w szkole Danuta Sterna stwierdza (zob. [8], s. 17): w ocenianiu ksztaªtuj¡cym staramy si¦, aby uczniowie byli gotowi wzi¡¢ odpowiedzialno±¢ za swój proces uczenia si¦, aby bardziej zale»aªo im na wiedzy ni» na wynikach testów, które t¦ wiedz¦ sprawdzaj¡. Opisuje ona pi¦¢ podstawowych strategii oceniania ksztaªtuj¡cego, które mo»na stre±ci¢ w poni»szych punktach (zob. [8], s. 18 19): 1) Okre±lanie i wyja±nianie uczniom celów uczenia si¦ i kryteriów sukcesu. Z perspektywy ucznia: Lepiej si¦ ucz¦, je±li wiem po co i czego mam si¦ nauczy¢. 2) Organizowanie w klasie dyskusji, zadawanie pyta« i zada« daj¡cych informacje, czy i jak uczniowie si¦ ucz¡. Z perspektywy ucznia: Lepiej si¦ ucz¦, je±li nauczyciel rozmawia ze mn¡ o moich post¦pach i w ka»dej chwili wie, na jakim etapie nauki jestem. 3) Udzielanie uczniom takich informacji zwrotnych, które umo»liwiaj¡ im widoczny post¦p. Z perspektywy ucznia: Lepiej si¦ ucz¦, je±li nauczyciel udziela mi informacji zwrotnej, co zrobiªem dobrze, co i jak powinienem poprawi¢ i jak mog¦ si¦ dalej rozwija¢. 4) Umo»liwianie uczniom korzystania z siebie nawzajem jako zasobów edukacyjnych. Z perspektywy ucznia: Lepiej si¦ ucz¦, je±li korzystam z wiedzy i umiej¦tno±ci moich kole»anek i kolegów. 5) Wspomaganie uczniów, by stali si¦ odpowiedzialnymi autorami procesu swojego uczenia si¦. Z perspektywy ucznia: Lepiej si¦ ucz¦, gdy jestem ±wiadomy, jak przebiega proces mojego uczenia si¦ i odpowiadam za niego.", "source": "B-20-001 Konspekt.pdf", "tags": [], "type": "prg" }, { "content": "Opisan¡ wy»ej koncepcj¦ oceniania ksztaªtuj¡cego mo»na z powodzeniem stosowa¢ w procesie ksztaªcenia studentów wy»szych uczelni podczas zaj¦¢ laboratoryjnych. W odró»nieniu od wykªadów, gdzie gªównym celem jest jedynie przekazywanie okre±lonych tre±ci, zaj¦cia laboratoryjne umo»liwiaj¡ bardziej indywidualne podej±cie do studenta, poniewa» prowadzone s¡ w maªych grupach. W trakcie tego typu zaj¦¢ prowadz¡cy ma mo»liwo±¢ bezpo±redniej weryfikacji posiadanych przez studenta umiej¦tno±ci. Zakªada si¦ przy tym, »e student nie tylko ma rozwi¡zywa¢ kolejno stawiane przed nim zadania, ale nale»y wymaga¢ od niego równie» dokonywania jasnej prezentacji tych rozwi¡za«, co b¦dzie stanowi¢ dowód zrozumienia materiaªu. Poprzez wskazywanie niedoci¡gni¦¢ oraz porównanie oceny zaprezentowanego rozwi¡zania przez innych, student ma mo»liwo±¢ rozwijania swoich umiej¦tno±ci praktycznych jak równie» samodzielnej oceny swoich dokona«. Na Wydziale Automatyki, Elektroniki i Informatyki Politechniki ‘l¡skiej dla studentów kierunku informatyka od lat prowadzone s¡ zaj¦cia z przedmiotu podstawy informatyki. W ramach tych zaj¦¢ prowadzone s¡ wykªady, ¢wiczenia tablicowe oraz ¢wiczenia laboratoryjne. Podczas zaj¦¢ laboratoryjnych studenci zapoznaj¡ si¦ mi¦dzy innymi z zagadnieniami dotycz¡cymi budowy i dziaªania komputerów o architekturze von Neumanna na bardzo prostym przykªadzie maszyny W komputera wykªadowego zaprojektowanego w latach siedemdziesi¡tych ubiegªego wieku przez prof. Stefana W¦grzyna [9]. Pocz¡tkowo studenci poznawali zasady dziaªania komputera przy u»yciu fizycznej implementacji projektu [2], obecnie za± do tego celu wykorzystywany jest programowy symulator maszyny W.", "source": "B-20-001 Konspekt.pdf", "tags": [], "type": "prg" }, { "content": "Niniejszy artykuª jest prób¡ pokazania, jak mog¡ wygl¡da¢ przykªadowe zaj¦cia laboratoryjne. Podczas tych zaj¦¢ studenci b¦d¡ rozwi¡zywa¢ kolejne zadania, poznaj¡c podstawy dziaªania maszyny W w praktyce: rozpoczynaj¡c od u±wiadomienia sobie przeznaczenia i roli poszczególnych rejestrów oraz ukªadu steruj¡cego, poprzez projektowanie przesyªów mi¦dzyrejestrowych i rozkazów dla procesora, a» po u»ycie uprzednio zaprojektowanych rozkazów w krótkim programie testuj¡cym poprawno±¢ ich dziaªania. Zakªada si¦ przy tym, »e zaj¦cia te realizowane s¡ w ramach jednego spotkania trwaj¡cego 3 godziny zegarowe (czyli 4 godziny lekcyjne, jak ma to miejsce obecnie). Przy tworzeniu zaprezentowanego ni»ej konspektu wykorzystywano sugestie zawarte w ksi¡»ce Technologie informacyjno-komunikacyjne na lekcjach. Przykªadowe konspekty i polecane praktyki [6]. Autorki przedstawiaj¡ tam wskazówki jak tworzy¢ konspekty lekcji z zastosowaniem oceniania ksztaªtuj¡cego, sugeruj¡ stawianie polece« pobudzaj¡cych gª¦bokie my±lenie uczniów oraz zadawanie pyta« otwartych, daj¡c przy tym uczniom czas na ustalenia odpowiedzi. Podkre±laj¡ przy tym, i» nale»y wykorzystywa¢ w procesie uczenia bª¦dne odpowiedzi uczniów i zwracaj¡ uwag¦ na fakt, »e informacja zwrotna wi¡»e si¦ z kryteriami sukcesu (zob. [6], s. 24): okre±la, co jest dobre, co wymaga poprawy, w jaki sposób t¦ popraw¦ wykona¢ i jak post¦powa¢ dalej, a podstaw¡ uczenia si¦ jest szukanie i eliminowanie bª¦dów.", "source": "B-20-001 Konspekt.pdf", "tags": [], "type": "prg" }, { "content": "2. Konspekt ¢wicze« laboratoryjnych Zanim przejdziemy do opisu planowanego przebiegu zaj¦¢, warto okre±li¢ formalnie kilka podstawowych faktów. - Temat: Projektowanie rozkazów dla maszyny W. - Cel: praktyczne poznanie zasad dziaªania ukªadu steruj¡cego komputera w architekturze von Neumanna. - Kryteria sukcesu dla studenta: umiem opisa¢ i scharakteryzowa¢ najwa»niejsze elementy skªadowe komputera w architekturze von Neumanna, rozumiem zapisy przesyªów mi¦dzyrejestrowych w notacji nawiasowej, umiem zaprojektowa¢ przesyª mi¦dzyrejestrowy dla maszyny W, umiem sprawdzi¢ dziaªanie napisanego przesyªu w symulatorze maszyny W, rozró»niam poj¦cie przesyªu mi¦dzyrejestrowego od rozkazu procesora, umiem zaprojektowa¢ nowy rozkaz dla maszyny W, umiem przetestowa¢ dziaªanie napisanego rozkazu w symulatorze maszyny W. - Dotychczasowa wiedza i umiej¦tno±ci uczniów: zakªada si¦, »e student poznaª na wykªadzie z przedmiotu podstawy informatyki podstawowe elementy konstrukcyjne komputera, takie jak: rejestry, liczniki, jednostka arytmetyczno logiczna, ukªad pami¦ci, ukªad steruj¡cy; umie wyja±ni¢ ró»nice mi¦dzy poziomowymi i impulsowymi sygnaªami steruj¡cymi; zna poj¦cia cyklu zegarowego (taktu) oraz cyklu instrukcji; potra opisa¢ schemat budowy i zasady dziaªania komputera w architekturze von Neumanna na przykªadzie maszyny W; zna standardow¡ list¦ rozkazów maszyny W. Ponadto zakªada si¦, »e podczas ¢wicze« tablicowych student zapoznaª si¦ z notacj¡ nawiasow¡ sªu»¡c¡ do opisu przesyªów mi¦dzyrejestrowych oraz potra teoretycznie zaprojektowa¢ proste przesyªy i rozkazy dla maszyny W [4]. - Wykorzystywane narz¦dzia TIK (technologii informacyjno-komunikacyjnych) oraz cel ich zastosowania: podczas zaj¦¢ studenci korzysta¢ b¦d¡ z programowego symulatora maszyny W (dost¦pnego na Platformie Zdalnej Edukacji Politechniki ‘l¡skiej dla studentów zapisanych na kurs Podstawy Informatyki), aby lepiej zrozumie¢ dziaªanie komputera, maj¡c mo»liwo±¢ bezpo±redniego ±ledzenia zmian zawarto±ci poszczególnych rejestrów oraz pami¦ci operacyjnej w zale»no±ci od aktywowanego sygnaªu steruj¡cego.", "source": "B-20-001 Konspekt.pdf", "tags": [], "type": "prg" }, { "content": "Poni»ej przedstawiony zostanie przykªadowy przebieg zaj¦¢ laboratoryjnych. Ze wzgl¦du na przejrzysto±¢ zastosowano tu podziaª na trzy etapy. Najpierw studenci podczas dyskusji z prowadz¡cym powinni przypomnie¢ sobie, jak zbudowana jest maszyna W i jakie s¡ konsekwencje zastosowania architektury von Neumanna. Nast¦pnie studenci, pracuj¡c samodzielnie lub w parach, realizuj¡ pierwsze zadania projektuj¡ przesyªy mi¦dzyrejestrowe przy nieaktywnym ukªadzie steruj¡cym jednostki centralnej. Na ostatnim etapie studenci projektuj¡ rozkazy, zapisuj¡ je w odpowiedniej dla symulatora maszyny W notacji, a nast¦pnie testuj¡ ich dziaªanie, pisz¡c krótkie programy z u»yciem utworzonych rozkazów. Ka»dy z tych etapów jest opisany w oddzielnym podrozdziale. 2.1. Wprowadzenie przypomnienie charakterystyki maszyny W Na pocz¡tku zaj¦¢ prowadz¡cy prosi studentów o uruchomienie symulatora maszyny W (rys. 1), nast¦pnie pyta studentów o poszczególne elementy skªadowe jednostki centralnej. - Do czego sªu»y rejestr I (instrukcji)? Dlaczego jest on podzielony na dwie cz¦±ci? Dlaczego ma on wej±cie od strony magistrali danych? Dlaczego ma on wyj±cie na magistral¦ adresow¡? - Do czego sªu»y rejestr L (licznika)? Dlaczego jest on podpi¦ty tylko do magistrali adresowej? Dlaczego ma on sygnaª il (inkrementuj¡cy jego zawarto±¢)? - Jak dziaªa JAL (jednostka arytmetyczno logiczna)? Dlaczego sygnaª wej±ciowy (weja) jest sygnaªem poziomowym? Do czego sªu»y rejestr Ak (akumulator)? Jakie s¡ konsekwencje uaktywnienia sygnaªów przep, dod lub ode? - Jak dziaªa PaO (pami¦¢ operacyjna)? Do czego sªu»y rejestr A (adresowy), a do czego S (sªowa)? Dlaczego nie ma mo»liwo±ci wyprowadzenia zawarto±ci rejestru A (nie ma sygnaªu wya)? Jakie s¡ konsekwencje uaktywnienia sygnaªów czyt lub pisz? Czy s¡ to sygnaªy poziomowe czy impulsowe? Rysunek 1. Widok okna symulatora podstawowej wersji maszyny W.", "source": "B-20-001 Konspekt.pdf", "tags": [], "type": "prg" }, { "content": "W dalszej cz¦±ci studenci poproszeni zostaj¡ o odª¡czenie ukªadu steruj¡cego maszyny W (zaznaczenie opcji sterowanie r¦czne w widoku jednostki centralnej) oraz o samodzielne wprowadzenie przykªadowej, niezerowej warto±ci do rejestru L (za pomoc¡ lewego przycisku myszy w obszarze prostok¡ta wizualizuj¡cego ten rejestr w widoku jednostki centralnej). Nast¦pnie prowadz¡cy pyta, jakie sygnaªy steruj¡ce nale»y uaktywni¢, aby zrealizowa¢ przesyª (L) -> A (przesªanie zawarto±ci rejestru licznika do rejestru adresowego pami¦ci operacyjnej). Po wybraniu odpowiednich sygnaªów (wyl, wea) poprzez wskazanie ich lewym przyciskiem myszy, studenci realizuj¡ wykonanie taktu (cyklu zegarowego), wybieraj¡c odpowiedni¡ opcj¦ z menu wykonaj lub przy u»yciu przycisku F7. Warto przy tym zwróci¢ uwag¦, »e oba sygnaªy (wyl, wea) musz¡ by¢ aktywne równocze±nie w tym samym takcie, gdy» aktywacja tylko jednego sygnaªu steruj¡cego w pojedynczym takcie spowoduje powstanie bª¦du. Gdyby±my chcieli w jednym takcie aktywowa¢ jedynie sygnaª wyl, a w kolejnym sygnaª wea, przy próbie wprowadzenia warto±ci do rejestru A symulator maszyny W zgªosi komunikat o bª¦dzie: Magistrala A jest pusta. W tym momencie warto przypomnie¢ studentom i zwróci¢ uwag¦ na konsekwencje stosowania poziomowych i impulsowych sygnaªów steruj¡cych. Sygnaª wyl jest poziomowy, czyli jest aktywny przez caªy czas trwania cyklu zegarowego (taktu) i jest u»ywany przy wyprowadzaniu zawarto±ci rejestru na magistral¦. Natomiast sygnaª wea jest impulsowy, czyli jest aktywowany na ko«cu cyklu zegarowego (taktu) i sªu»y do wprowadzania warto±ci z magistrali do rejestru. Nast¦pnie prowadz¡cy zadaje studentom pytanie, co spowoduje równoczesna aktywacja sygnaªów wyl, wea, il (sygnaªy aktywujemy w tym samym cyklu zegarowym), a po chwili studenci proszeni s¡ o sprawdzenie swojej odpowiedzi przy u»yciu symulatora maszyny W. Warto równie» przypomnie¢, co si¦ stanie, gdy do aktywnych w jednym takcie sygnaªów wyl, wea, il doª¡czymy dodatkowo sygnaª czyt. Aby lepiej zobrazowa¢ t¦ sytuacj¦, prowadz¡cy mo»e poprosi¢ studentów o wypeªnienie kilku kolejnych komórek pami¦ci operacyjnej ró»nymi warto±ciami i ±ledzenie zawarto±ci rejestrów L, A oraz S podczas kilkukrotnego wykonywania taktu (F7).", "source": "B-20-001 Konspekt.pdf", "tags": [], "type": "prg" }, { "content": "Przeprowadzone eksperymenty prowadz¡cy mo»e podsumowa¢ uwag¡, aby optymalizacj¦ czasow¡ realizacji przesyªów mi¦dzyrejestrowych dokonywa¢ z odpowiednim wyczuciem i trosk¡ o poprawne wykonanie zadania, za ka»dym razem porównuj¡c otrzymane w symulatorze maszyny W wyniki z warto±ciami przewidywanymi. Nale»y przy tym uwa»nie czyta¢ zgªaszane przez symulator komunikaty. Jako przykªad prowadz¡cy mo»e wskaza¢ prób¦ jednoczesnej aktywacji sygnaªów wyl, wyad (próba wysªania na magistral¦ adresow¡ dwóch warto±ci: z rejestru licznika i z rejestru instrukcji). Wykonanie taktu w tej sytuacji poskutkuje komunikatem o bª¦dzie: Magistrala A jest ju» zaj¦ta. Nast¦pnie warto przypomnie¢ stosowane w maszynie W kodowanie liczb ujemnych w postaci zapisu uzupeªnieniowego do 2. Zastosowanie tego kodowania w architekturze 8-bitowej pozwala na zapisanie liczb z zakresu od −128 do 127. Zauwa»amy, »e warto±¢ 127 po zinkrementowaniu zmieni si¦ na −128. Prowadz¡cy mo»e poprosi¢ studentów o wprowadzenie do rejestru Ak (akumulatora) warto±ci np. 250 i zapyta¢ ich jaka jest to liczba: dodatnia czy ujemna. Prowadz¡cy zwraca uwag¦, »e wskazuj¡c prawym przyciskiem myszy dowolny rejestr w symulatorze maszyny W, mo»na zmieni¢ domy±lny tryb wy±wietlania warto±ci (u»ywaj¡c opcji Poka» jako mo»emy wybra¢ spo±ród: dziesi¦tnie bez znaku, dziesi¦tnie ze znakiem, binarnie, szesnastkowo). Wybieraj¡c binarny tryb wy±wietlania warto±ci, widzimy, »e w przypadku liczb 8-bitowych dla warto±ci 250 pierwszy od lewej bit (bit znaku) jest równy jeden. Zatem wprowadzona do akumulatora warto±¢ jest ujemna (w architekturze 8-bitowej). Na koniec pierwszej cz¦±ci zaj¦¢ prowadz¡cy prosi studentów o realizacj¦ przesyªu (Ak) -> L, czyli o przesªanie zawarto±ci rejestru Ak (warto±ci 250) do rejestru L. Dla domy±lnej, standardowej architektury maszyny W (z uwagi na fakt, »e wyj±cie Ak jest podpi¦te do magistrali danych, za± wej±cie L do magistrali adresowej) jedynym mo»liwym rozwi¡zaniem jest przesyª za po±rednictwem rejestru instrukcji. Zatem w jednym takcie nale»y uaktywni¢ sygnaªy wyak, wei, w nast¦pnym za± wyad, wel. Warto przy tym zwróci¢ uwag¦, jaka warto±¢ pojawi si¦ docelowo w rejestrze L. W rejestrze tym powinna pojawi¢ si¦ warto±¢ 26 (binarnie 11010), gdy» sygnaª wyad umo»liwia wyprowadzenie na magistral¦ adresow¡ jedynie 5 bitów z 8-bitowego sªowa (3 najstarsze bity sªowa zostaj¡ obci¦te).", "source": "B-20-001 Konspekt.pdf", "tags": [], "type": "prg" }, { "content": "W tym momencie prowadz¡cy przypomina studentom o mo»liwo±ci rozszerzenia architektury maszyny W o poª¡czenie mi¦dzymagistralowe (menu Projekt -> Opcje.. -> Skladniki -> W+), prosi o jednoczesn¡ aktywacj¦ sygnaªów wyak, sa, wel i wykonanie taktu (F7), po czy zadaje pytanie, co si¦ staªo i dlaczego. Zawarto±¢ rejestru licznika nie zmieniªa si¦, gdy» w standardowej 8-bitowej architekturze maszyny W magistrala adresowa jest w¦»sza od magistrali danych i mo»na ni¡ przesyªa¢ jedynie 5-bitowe warto±ci. Zatem nawet przy wykorzystaniu poª¡czenia mi¦dzymagistralowego maszyny W+ nie jest mo»liwe przesªanie 8 bitów sªowa z 8-bitowej magistrali danych na 5-bitow¡ magistral¦ adresow¡. 2.2. Projektowanie przesyªów mi¦dzyrejestrowych Drug¡ cz¦±¢ zaj¦¢ stanowi praca wªasna studentów realizuj¡cych podane przez prowadz¡cego przykªadowe przesyªy mi¦dzyrejestrowych. Ka»demu ze studentów prowadz¡cy zadaje do zaprojektowania dwa przesyªy. Jeden z nich jest prostym, kilkutaktowym przesyªem, mo»liwym do wykonania w architekturze maszyny W. Drugi z nich jest bardziej skomplikowany i wymaga rozszerzonej architektury W+. Kilka przykªadowych propozycji przesyªów to: 1) ((Ad)) -> Ak oraz (Ak) -1 -> 0, 2) ((L)) -> Ak oraz |(Ak)| -> (2), 3) (Ak) -> (L) oraz ((Ad) + 1) -((Ad)) -> Ak, 4) (Ak) -((L)) -> Ak oraz (Ad) -(Ak) -> 1, 5) (Ak) -> (Ad) oraz ((Ad)) + ((Ad) + 1) -> 0, 6) 3 *(Ak) -> Ak oraz (0) + (1) -> (Ad), 7) 0 -> (Ad) oraz |(0)| -> (1), 8) (Ak) -> 0 oraz ((Ad)) + 1 -> (0).", "source": "B-20-001 Konspekt.pdf", "tags": [], "type": "prg" }, { "content": "Po podaniu zada« warto przedyskutowa¢ ze studentami kwesti¦ interpretacji tre±ci (zadania podawane s¡ w notacji nawiasowej). Wa»ne jest, aby ka»dy z uczestników laboratorium dobrze zrozumiaª tre±¢ swojego zadania. Prowadz¡cy mo»e zapyta¢ wybranych studentów o tre±¢ konkretnych zada«, podaj¡c przykªady jak poni»ej. - Co oznacza zapis (Ak) -> S? - Jak nale»y interpretowa¢ zapisy (Ad) -> Ak, ((Ad)) -> Ak oraz (((Ad))) -> Ak? - Jak nale»y interpretowa¢ zapisy (Ak) -> (Ad) oraz (Ak) -> ((Ad))? - Co stanowi bª¡d w zapisie (Ak) -> Ad? - Dlaczego zapis Ak -> Ad jest niepoprawny? Prowadz¡cy zwraca równie» uwag¦ studentów, »e w tre±ciach zada« czasami, prócz nazw rejestrów, pojawiaj¡ si¦ konkretne warto±ci liczbowe. Prowadz¡cy przypomina, »e zawarto±ci poszczególnych rejestrów nie s¡ okre±lone, zatem odpowiednie warto±ci liczbowe nale»y wypracowa¢ (nie mo»na r¦cznie wpisywa¢ potrzebnych warto±ci do rejestrów maszyny W). Przy tej okazji mo»na przypomnie¢, jak uzyska¢ na przykªad warto±¢: - zero, jako realizacj¦ przesyªu (Ak) -(Ak) -> Ak; - jeden, jako realizacj¦ przesyªu 0 -> L, a nast¦pnie (L) + 1 -> L. Studenci powinni te» pami¦ta¢ o mo»liwo±ci skorzystania z ró»nicy kolejnych warto±ci licznika, przed i po jego inkrementacji. W kontek±cie pojawiaj¡cych si¦ liczb w zapisie nawiasowym warto te» zapyta¢ o interpretacj¦ poni»szych zapisów. - Co oznaczaj¡ zapisy: 1 -> Ak, (1) -> Ak, ((1)) -> Ak? - Co oznaczaj¡ zapisy: (Ak) -> 1, (Ak) -> (1), (Ak) -> ((1))? Studenci proszeni s¡ o samodzieln¡ prac¦ przy projektowaniu przesyªów mi¦dzyrejestrowych z u»yciem sterowania r¦cznego w symulatorze maszyny W, natomiast prowadz¡cy, podchodz¡c do kolejnych stanowisk laboratoryjnych, sprawdza wyniki ich prac. Ka»dy ze studentów powinien pokaza¢ prowadz¡cemu swój projekt i potra uzasadni¢ wybór aktywacji konkretnych sygnaªów steruj¡cych w poszczególnych taktach rozwi¡zania. Je±li studenci zako«czyli ju» prac¦ nad swoim projektem i czekaj¡ na ocen¦ ich rozwi¡zania przez prowadz¡cego, powinni zosta¢ zach¦ceni do skonsultowania swoich rozwi¡za« z innymi oczekuj¡cymi. Prowadz¡cy mo»e równie» zach¦ci¢ studentów do cichej dyskusji w maªych grupach i dzielenia si¦ swoimi spostrze»eniami z innymi. Mo»na te» zasugerowa¢ oczekuj¡cym studentom, aby zacz¦li przygotowywa¢ si¦ do kolejnej cz¦±ci laboratorium, której celem jest projektowanie rozkazów (studenci mog¡ pozna¢ wcze±niej tre±ci swoich zada«).", "source": "B-20-001 Konspekt.pdf", "tags": [], "type": "prg" }, { "content": "2.3. Projektowanie rozkazów oraz testowanie ich dziaªania Trzeci¡ i ostatni¡ cz¦±¢ zaj¦¢ laboratoryjnych stanowi praca wªasna studentów realizuj¡cych podane przez prowadz¡cego przykªadowe rozkazy dla maszyny W lub rozszerzonej architektury W+. Na tym etapie zakªada si¦, »e studenci potraf¹ ju» samodzielnie zaprojektowa¢ przesyªy mi¦dzyrejestrowe stanowi¡ce tre±¢ rozkazów. Warto przypomnie¢ studentom, »e podczas projektowania rozkazu prócz zaprojektowania przesyªu trzeba te» pami¦ta¢ o poprawnym wykonaniu caªego cyklu rozkazowego ( pobierz, zdekoduj, wykonaj ). Mo»na przy tym zde niowa¢ rozkaz bezczynno±ci NOP (ang. no-operation), który nic nie robi. Musi on zawiera¢ dwa takty: 1) czyt wys wei il realizuj¡cy odczytanie tre±ci rozkazu z pami¦ci operacyjnej, przesªanie go i zdekodowanie w rejestrze instrukcji oraz równocze±nie przygotowuj¡cy adres kolejnej instrukcji w rejestrze licznika, 2) wyl wea realizuj¡cy przesªanie adresu kolejnej instrukcji do rejestru adresowego pami¦ci operacyjnej tak, aby w kolejnym takcie mo»na byªo poprawnie j¡ odczyta¢ (rozpocz¡¢ kolejny cykl instrukcji). Podkre±lamy przy tym, »e rejestr instrukcji i rejestr licznika s¡ bardzo wra»liwe na zmiany ze wzgl¦du na swoje funkcje. W trakcie caªego cyklu rozkazowego mo»na u»y¢ tylko jeden raz sygnaªu wei (sygnaª ten powinien by¢ aktywowany tylko w pierwszym takcie; ka»dorazowe u»ycie sygnaªu wei powoduje na nowo dekodowanie rozkazu, którego kod znajduje si¦ w cz¦±ci kodowej rejestru instrukcji, a wtedy jego wªa±ciwa realizacja rozpoczyna si¦ w kolejnym takcie) oraz trzeba pami¦ta¢, aby w ostatniej fazie rozkazu rejestry L i A miaªy t¦ sam¡ zawarto±¢ adresu kolejnej instrukcji. Warto przy tym wraz ze studentami omówi¢ kolejne takty kilku wybranych rozkazów ze standardowej listy rozkazów maszyny W (widocznej wybieraj¡c menu Widok -> Lista rozkazow lub przy u»yciu przycisku F10), zwracaj¡c uwag¦ zarówno na sposób podawania tre±ci rozkazu (aktywacja sygnaªów steruj¡cych, ±redniki ko«cz¡ce takty), jak i sªowa kluczowe typu ROZKAZ, ARGUMENTY, KONIEC, JE›ELI itp. Na przykªadzie rozkazu SOM warto prze±ledzi¢ mo»liwo±¢ realizacji rozkazu warunkowego.", "source": "B-20-001 Konspekt.pdf", "tags": [], "type": "prg" }, { "content": "Dobrze jest pokaza¢ studentom, jak wprowadzi¢ kolejny rozkaz na list¦ rozkazów, wybieraj¡c menu Plik -> Nowy -> Rozkaz i wpisuj¡c w nowe okno nast¦puj¡c¡ tre±¢: ROZKAZ NOP; ARGUMENTY 0; czyt wys wei il; wyl wea; Zwracamy uwag¦ na pojawiaj¡cy si¦ podczas kompilacji (prawy przycisk myszy Kompiluj lub CTRL+F9) komunikat widoczny na rysunku 2, który informuje, »e rozkaz jest ju» zde niowany na li±cie rozkazów, ale nie jest na razie dost¦pny. Mo»na zapyta¢ studentów jak rozumiej¡ ten komunikat i zasugerowa¢ im poprawn¡ odpowied¹. W tym celu przypominamy, ile rozkazów do tej pory widnieje na li±cie rozkazów i porównujemy t¦ liczb¦ z liczb¡ mo»liwych stanów, które mo»na zakodowa¢ na 3 bitach (w domy±lnej architekturze maszyny W 3 bity sªu»¡ do kodowania rozkazu, a 5 bitów do kodowania adresu). Zatem rozwi¡zanie problemu niedost¦pno±ci nowego rozkazu polega na rozszerzeniu standardowej architektury maszyny W o dodatkowy bit sªu»¡cy do kodowania rozkazu (menu Projekt -> Opcje... -> Architektura). Warto przy tym podkre±li¢, »e ten dodatkowy bit pozwala na poprawne dodanie 8 nowych rozkazów. Rysunek 2. Komunikat o bª¦dzie Na koniec cz¦±ci wst¦pnej, zanim studenci zajm¡ si¦ prac¡ samodzieln¡, warto omówi¢ jeszcze w jaki sposób mo»na testowa¢ dziaªanie rozkazów. Mo»na to zrobi¢ na dwa alternatywne sposoby: 1) poprzez obliczenie kodów rozkazów i wprowadzenie r¦czne po»¡danych warto±ci do odpowiednich komórek pami¦ci operacyjnej 2) lub za pomoc¡ krótkiego programu napisanego w j¦zyku asemblera maszyny W (menu Plik -> Nowy -> Program) i jego kompilacji (prawy przycisk myszy Kompiluj lub CTRL+F9), co powoduje wypeªnienie zawarto±ci pami¦ci operacyjnej odpowiednimi warto±ciami.", "source": "B-20-001 Konspekt.pdf", "tags": [], "type": "prg" }, { "content": "Mo»na pokaza¢ na przykªad program testuj¡cy rozkaz SOM (skok pod zadany adres, o ile zawarto±¢ akumulatora jest ujemna): POB A SOM B DOD A B: STP A: RST 10 Warto zasugerowa¢ studentom ±ledzenie zawarto±ci rejestrów maszyny podczas wykonywania tego programu w trybie pracy krokowej (nale»y przypomnie¢ studentom o potrzebie wyª¡czenia opcji sterowanie r¦czne w widoku jednostki centralnej). Mamy przy tym dwie mo»liwo±ci: wykonywanie programu rozkaz po rozkazie (menu Wykonaj -> Rozkaz lub F8) lub takt po takcie (menu Wykonaj -> Takt lub F7). Po zako«czeniu dziaªania naszego programu testowego w akumulatorze powinni±my widzie¢ warto±¢ 20 (podwojenie warto±ci zapisanej w komórce pami¦ci o adresie symbolicznym A). Mo»na teraz zmieni¢ zawarto±¢ komórki A, wpisuj¡c zamiast RST 10, np. warto±¢ RST -10 i zobaczy¢, »e po skompilowaniu i ponownym uruchomieniu programu, po zako«czeniu dziaªania programu, w akumulatorze zostaje warto±¢ -10. Jednak sposób prezentacji tej liczby zale»y od wybranego trybu wy±wietlania zawarto±ci rejestru Ak i mo»emy zobaczy¢ -10 (gdy wy±wietlamy liczb¦ ze znakiem) lub 502 (w przypadku liczby bez znaku), lub 111110110 (binarnie). Nale»y te» przypomnie¢ studentom o mo»liwo±ci realizacji rozkazów dwuargumentowych (przyjmujemy wtedy, »e nast¦pny rozkaz znajduje si¦ 2 komórki dalej za projektowanym rozkazem, natomiast komórka nast¦pna sªu»y do przekazania drugiego argumentu rozkazu). Wymagana jest wówczas dodatkowa inkrementacja zawarto±ci licznika. Z kolei w przypadku rozkazów realizowanych z zastosowaniem adresacji po±redniej bardzo wa»ne jest odpowiednie zaplanowanie tre±ci programu testuj¡cego tak, aby odpowiednio zaprezentowa¢ dziaªanie rozkazu. W przypadku testowania rozkazów warunkowych nale»y tak zaprojektowa¢ program testowy, aby mo»na byªo sprawdzi¢ dziaªanie obu wersji rozkazu. Warto te» zwróci¢ uwag¦, »e w wielu przypadkach do realizacji operacji arytmetycznych wykorzystywany jest akumulator, wi¦c (je±li nawet w tre±ci zadania nie wspomina si¦ wprost o odtwarzaniu jego warto±ci pocz¡tkowej) o ile to mo»liwe nale»y zapami¦tywa¢ i przywraca¢ jego poprzedni¡ warto±¢.", "source": "B-20-001 Konspekt.pdf", "tags": [], "type": "prg" }, { "content": "Podobnie jak uprzednio, podczas gdy studenci zaj¦ci s¡ samodzieln¡ prac¡ przy projektowaniu rozkazów i testowaniu ich poprawno±ci, prowadz¡cy podchodzi do kolejnych stanowisk laboratoryjnych i sprawdza wyniki ich prac. Ka»dy ze studentów powinien umie¢ przedstawi¢ projekt rozkazu w postaci pliku rozkazu oraz uruchomi¢ program testuj¡cy jego dziaªanie. Prowadz¡cy powinien zwraca¢ uwag¦ nie tylko na poprawno±¢ realizacji rozkazów, ale równie» na optymalizacj¦ czasow¡ ich dziaªania. Ka»dy ze studentów dostaje do zaprojektowania dwa rozkazy: jeden prostszy (dla architektury W) i jeden trudniejszy (dla rozszerzonej architektury W+). Przykªadowe rozkazy podane s¡ poni»ej: 1) NEG: -(Ak) -> Ak oraz DDP Ad: (Ak) + (((Ad))) -> Ak, 2) NEG Ad: -((Ad)) -> (Ad) oraz ŠDP Ad: (Ak) -> ((Ad)), 3) MIN Ad: min{(Ak), ((Ad))} -> Ak oraz INC: (Ak) + 1 -> Ak, 4) MAX Ad: max{(Ak), ((Ad))} -> Ak oraz INC Ad: ((Ad)) + 1 -> (Ad), 5) ABS Ad:|((Ad))| -> Ak oraz DEC Ad: ((Ad)) -1 -> (Ad), 6) PGM Ad: je»eli (Ak) < ((Ad)), to (Ad) -> L oraz DEC: (Ak) -1 -> Ak, 7) DD2 Ad (L)+1: ((Ad)) + ((L) + 1) -> Ak oraz PBP Ad: (((Ad))) -> Ak, 8) MN3 Ad: 3 *((Ad)) -> Ak oraz ŠD2 Ad (L)+1: ((Ad)) -> ((L) + 1).", "source": "B-20-001 Konspekt.pdf", "tags": [], "type": "prg" }, { "content": "2.4. Podsumowanie Zwró¢my uwag¦, »e nie zawsze studenci s¡ odpowiednio przygotowani do zaj¦¢, a czasami po prostu w wolniejszym tempie przyswajaj¡ wiedz¦. Mo»na zatem zasugerowa¢ osobom, które nie byªy w stanie doko«czy¢ realizacji wszystkich zada« w regulaminowym czasie (3 godziny zegarowe), napisanie sprawozdania zawieraj¡cego rozwi¡zania wszystkich zada« wraz z odpowiednimi komentarzami i dodatkowy kontakt mailowy lub osobisty w czasie konsultacji. Mo»na te» zaleci¢ studentom, którzy nie czuj¡ si¦ zbyt pewni w rozwi¡zywaniu prezentowanych zada«, aby w ramach zadania domowego spróbowali zrealizowa¢ pozostaªe zadania z listy zada« takie, które nie zostaªy im przydzielone podczas zaj¦¢ laboratoryjnych. Warto przypomina¢ studentom, »e studiowanie wymaga od nich samodzielno±ci w wi¦kszym stopniu ni» miaªo to miejsce w szkole ±redniej oraz aby nie zapominali o mo»liwo±ci regularnych konsultacji z prowadz¡cymi tak, aby w peªni wykorzysta¢ ich wiedz¦ w procesie nabywania nowych umiej¦tno±ci. Pami¦tajmy te» o zaleceniach opisanych w ksi¡»ce Cele uczenia si¦. Jak pomóc uczniom zrozumie¢ ka»d¡ lekcj¦. Autorki ksi¡»ki stwierdzaj¡, »e nale»y zadawa¢ uczniom zadanie domowe, które jednak nie powinno nigdy wymaga¢ nauczenia si¦ czego± nowego albo wykonania ¢wiczenia, które nie b¦dzie jasne [...]. Je±li rozwi¡zanie zadania domowego przyjdzie z du»ym trudem, oznacza to, »e utrwalone zostan¡ nie±cisªo±ci i braki w wiedzy. Uczniowie powinni uczy¢ si¦ nowych poj¦¢ i procesów podczas bie»¡cej lekcji, we wspóªpracy z nauczycielem. Zadanie domowe mo»e jednak by¢ efektywne i zosta¢ wykorzystane w zwi¡zku z celem uczenia si¦, je±li poprosimy uczniów o wykonanie w domu pracy, która poszerza to, czego dokonali±my na lekcji, aby opanowa¢ dany materiaª (zob. [5], s. 68). W podobnym tonie wypowiadaj¡ si¦ autorki ksi¡»ki Technologie informacyjno-komunikacyjne na lekcjach. Przykªadowe konspekty i polecane praktyki, które stwierdzaj¡ ponadto, »e praca domowa powinna mie¢ sens, by¢ jasna i atrakcyjna; powinna te» dawa¢ wybór i zosta¢ bezzwªocznie sprawdzona (zob. [6], s. 26). Warto te» pod koniec zaj¦¢ zada¢ studentom pytanie, w jakim stopniu przeprowadzone zaj¦cia pomogªy im w osi¡gni¦ciu sukcesu zde niowanego na wst¦pie i zasugerowa¢ im zastanowienie si¦, co byªo pomoc¡, a co przeszkod¡ w zdobywaniu nowych umiej¦tno±ci. Warto wysªucha¢ ich uwag tak, aby sam prowadz¡cy w przyszªo±ci mógª udoskonala¢ swój sposób przekazywania i wery kowania wiedzy.", "source": "B-20-001 Konspekt.pdf", "tags": [], "type": "prg" }, { "content": "Literatura 1. B.S. Bloom, J.T. Hastings, G.F. Madaus, Handbook of formative and summative evaluation of student learning, McGraw-Hill, New York 1971. 2. M. Chªopek, R. Tutajewicz, Cwiczenia laboratoryjne z Podstaw Informatyki maszyna W, skrypt uczelniany Politechniki Slaskiej nr 2062. Wydawnictwo Politechniki Slaskiej, Gliwice 1997. 3. J. Hattie, Visible learning: a synthesis of over 800 meta-analyses relating to achievement, Routledge, New York 2009. 4. A.Momot, R. Tutajewicz, Maszyna W jak zaprojektowaæ prosty rozkaz, MINUT(2019), s. 24 35. 5. C.M. Moss, S.M. Brookhart, Cele uczenia sie. Jak pomóc uczniom zrozumieæ ka¿d¹ lekcjê, Centrum Edukacji Obywatelskiej, Warszawa 2014. 6. M. Ostrowska, D. Sterna, Technologie informacyjno-komunikacyjne na lekcjach. Przykªadowe konspekty i polecane praktyki, Centrum Edukacji Obywatelskiej, Warszawa 2015. 7. I. Schreiber, Sciaga w praktyce szkolnej, Księgarnia Nauka i Sztuka, Kraków 1938. 8. D. Sterna, Ucze (sie) w szkole, Centrum Edukacji Obywatelskiej, Warszawa 2014. 9. S. Wegrzyn, Podstawy informatyki, PWN, Warszawa, 1982.", "source": "B-20-001 Konspekt.pdf", "tags": [], "type": "prg" }, { "content": "MINUT 2019 (1), s. 24–35 Alina MOMOT1, Robert TUTAJEWICZ1 1Wydział Automatyki, Elektroniki i Informatyki, Politechnika Śląska, ul. Akademicka 16, 44-100 Gliwice Maszyna W – jak zaprojektować prosty rozkaz Streszczenie. Budowa współczesnych komputerów jest niezwykle skomplikowana, jednakże w większości przypadków ich podstawowa architektura opiera się na założeniach sformułowanych przez Johna von Neumanna, Johna W. Mauchly’ego oraz Johna Presper Eckerta w 1945 roku. Tak więc, aby zrozumieć podstawowe zasady działania komputera wystarczy prosty model komputera zaprojektowany w ten sposób, aby spełniał te założenia. W latach siedemdziesiątych ubiegłego wieku zespół pracowników Politechniki Śląskiej pod kie-rownictwem prof. Stefana Węgrzyna zaprojektował taki właśnie uproszczony model komputera wykładowego i nazwał go maszyną W. Niniejszy artykuł w skrótowy sposób opisuje budowę i spo-sób działania maszyny W oraz szczegółowo opisuje zasady projektowania prostych rozkazów dla tego modelowego komputera. W końcowej części artykułu zamieszczono również kilka przykładów zadań (projektów rozkazów) do samodzielnego wykonania wraz z rozwiązaniami.", "source": "C-19-004_Maszyna.pdf", "tags": [], "type": "prg" }, { "content": "1. Wstęp Architektura komputera opisana przez Johna von Neumanna zakłada [2], że komputer jest urządze-niem składającym się z: • układu sterowania, którego głównym zadaniem jest pobieranie instrukcji z pamięci oraz ich se-kwencyjne przetwarzanie, • jednostki arytmetyczno-logicznej, w której przetwarzane są dane, • pamięci, w której przechowywane są dane oraz instrukcje programu, • urządzeń wejścia/wyjścia, które służą do interakcji z otoczeniem. Przy czym dwoma podstawowymi rejestrami wchodzącymi w skład układu sterowania są: • rejestr instrukcji, który przechowuje kod wykonywanego rozkazu programu, • licznik rozkazów, który przechowuje adres następnej instrukcji, która ma być wykonana w ramach programu. Autor korespondencyjny: A. Momot (alina.momot@polsl.pl). Data wpłynięcia: 07.11.2019. Maszyna W – jak zaprojektować prosty rozkaz 25 Aby przybliżyć zasady działania komputerów kolejnym pokoleniom tworzone są uproszczone modele komputerów. Przykładem tego może być między innymi Minivac 601 Digital Computer Kit – elektro-mechaniczny cyfrowy system komputerowy zaprojektowany w 1961 r. przez pioniera teorii informacji Claude’a Shannona jako zabawka edukacyjna ucząca zasad działania obwodów cyfrowych, czy też opisa-ny przez Lindę Null i Julię Lobur prosty komputer MARIE (ang. A Machine Architecture that is Really Intuitive and Easy), za pomocą którego autorki prezentują przebieg cyklu rozkazu „pobierz, dekoduj, wy-konaj” oraz pokazują sposób działania prawdziwych komputerów [4]. Autorki na stronie domowej książki udostępniają również symulator, który pozwala wykonywać programy napisane w asemblerze MARIE. W internecie dostępny jest również, na licencji BSD1, program komputerowy SPIM – symulator proce-sora MIPS (ang. Microprocessor without Interlocked Piped Stages), napisany przez profesora Jamesa R. Larus’a i zaprojektowany do uruchamiania kodu języka asemblera dla tej architektury typu RISC (ang. Reduced Instruction Set Computing) [5]. Przy tej okazji warto też wspomnieć o witrynie internetowej nand2tetris.org, która to zawiera wszystkie materiały projektowe i narzędzia programowe niezbędne do zbudowania ogólnego systemu komputerowego od podstaw.", "source": "C-19-004_Maszyna.pdf", "tags": [], "type": "prg" }, { "content": "Również na Politechnice Śląskiej w zespole kierowanym przez prof. Węgrzyna powstał, w latach sie-demdziesiątych ubiegłego wieku, projekt uproszczonego modelu komputera wykładowego mającego przy-bliżać studentom zasady działania komputerów [6]. Do dnia dzisiejszego, na wykładach z przedmiotu Podstawy Informatyki, studenci kierunku Informatyka zapoznają się na przykładzie tego modelu z pod-stawowymi zasadami działania komputerów [3]. Początkowo studenci szczegółowo poznawali te zasady ćwicząc podczas zajęć laboratoryjnych na modelu fizycznym – rzeczywistej implementacji projektu [1], aczkolwiek obecnie do ćwiczeń tych wykorzystywany jest programowy symulator maszyny W. 2. Podstawy budowy i działania maszyny W Maszyna W to uproszczony model rzeczywistego komputera zaprojektowanego przy wykorzystaniu architektury von Nemanna. Schemat podstawowej wersji maszyny W przedstawia rysunek 1. Rysunek 1. Schemat podstawowej wersji maszyny W 1Licencje BSD (Berkeley Software Distribution Licenses) zezwalają nie tylko na modyfikacje kodu źródłowego i jego rozprowadzanie w takiej postaci, ale także na rozprowadzanie produktu bez postaci źródłowej czy włączenia do zamkniętego oprogramowania, pod warunkiem załączenia do produktu informacji o autorach oryginalnego kodu i treści licencji. 26 A. Momot, R. Tutajewicz", "source": "C-19-004_Maszyna.pdf", "tags": [], "type": "prg" }, { "content": "W schemacie maszyny W można wyróżnić kilka podstawowych składowych, takich jak: • pamięć operacyjna (PaO), wraz z wyróżnionymi rejestrami: adresu A oraz słowa S, • jednostka arytmetyczno-logiczna (JAL), wraz z wyróżnionym rejestrem Akumulatora Ak i wcho-dzącym w jego skład bitem znaku Z, • układ sterujący, w którego skład wchodzą rejestr instrukcji I oraz licznika rozkazów L. Elementy te połączone są poprzez magistralę słowową (zwaną również magistralą danych) i magistralę adresową. Przesyłanie danych miedzy tymi elementami jest sterowane za pomocą kilkunastu sygnałów binarnych zwanych sygnałami sterującymi. Aby zrozumieć działanie całego układu należy najpierw za-poznać się z działaniem każdego z elementów składowych oraz rolą, jaką pełnią poszczególne sygnały sterujące.", "source": "C-19-004_Maszyna.pdf", "tags": [], "type": "prg" }, { "content": "2.1. Pamięć operacyjna Pamięć operacyjna (PaO) przechowuje program w postaci ciągu rozkazów komputera oraz dane, na których ten program jest wykonywany. W dowolnym momencie obliczeń, na życzenie procesora, pamięć udostępnia przechowywane przez siebie dane i rozkazy. Procesor ma także możliwość zapisywania w pa-mięci wyników wykonywanych przez siebie obliczeń. Pamięć składa się z komórek, z których każda przechowuje pojedyncze słowo i jest identyfikowana poprzez numer komórki nazywany adresem. Aby wykonać jakąkolwiek operację na pamięci, procesor musi zawsze podać adres komórki, której ta operacja dotyczy. Aby odczytać określoną komórkę pamięci, należy najpierw wpisać adres komórki do rejestru adre-sowego pamięci A przy użyciu sygnału wea. Aktywacja tego sygnału umożliwia wpisanie do rejestru adresowego pamięci A adresu przesyłanego magistralą adresową. W następnym kroku możliwe jest od-czytanie odpowiedniej komórki z pamięci (operację aktywuje sygnał czyt, który wprowadza do rejestru słowa S odczytaną wartość) i przesłanie odczytanej wartości na magistralę danych za pomocą sygnału wys. Aby zapisać coś w pamięci, należy najpierw wpisać adres odpowiedniej komórki pamięci w rejestrze adresowym A (sygnał wea) oraz wprowadzić do rejestru słowowego pamięci S wartość, jaka ma być zapisana w pamięci przy użyciu sygnału wes. Aktywacja tego sygnału umożliwia przesłanie zawartości magistrali danych do rejestru S. W następnym kroku należy aktywować sygnał pisz, który spowoduje zapisanie zawartości rejestru S w komórce pamięci, której adres znajduje się w rejestrze A.", "source": "C-19-004_Maszyna.pdf", "tags": [], "type": "prg" }, { "content": "2.2. Jednostka arytmetyczno-logiczna Jednostka arytmetyczno-logiczna (JAL) jest elementem procesora odpowiedzialnym za wykonywanie obliczeń takich jak dodawanie, odejmowanie, suma i iloczyn logiczny lub przesunięcia bitowe. Zakłada się przy tym, że wynik obliczeń zostanie zapamiętany w rejestrze akumulatora Ak, będącym częścią składową JAL. Ponieważ jednostka arytmetyczno-logiczna w maszynie W ma tylko jedno wejście, podczas wykonywa-nia operacji dwuargumentowych pierwszy argument, potrzebny do wykonania operacji, zostaje pobrany z akumulatora. Zatem należy pamiętać, aby przed wykonaniem właściwej operacji dwuargumentowej za-dbać o odpowiednie wypełnienie akumulatora (poprzez uprzednie wprowadzenie do akumulatora wartości pierwszego argumentu planowanej do wykonania operacji). Można to zrealizować przy użyciu sygnału Maszyna W – jak zaprojektować prosty rozkaz 27 przep, który aktywuje operację przepisywania stanu wejścia JAL. Do poprawnego wykonania operacji wprowadzenia wartości argumentu do rejestru akumulatora niezbędna jest również aktywacja sygnału weja, który umożliwia wprowadzenie na wejście JAL wartości podanej na magistralę danych, oraz sygna-łu weak, który umożliwia wprowadzenie wypracowanej w jednostce arytmetyczno-logicznej wartości do rejestru akumulatora. Podsumowując, aby wypełnić rejestr akumulatora wartością podaną na magistralę danych, konieczna jest aktywacja trzech sygnałów: weja, przep oraz weak.", "source": "C-19-004_Maszyna.pdf", "tags": [], "type": "prg" }, { "content": "W najprostszej wersji maszyny W (widocznej na rysunku 1), jednostka arytmetyczno-logiczna potrafi wykonywać tylko trzy operacje: przepisywanie stanu podanego na wejście (aktywowane sygnałem przep), dodawanie arytmetyczne2 (aktywowane sygnałem dod) i odejmowanie3 (aktywowane sygnałem ode). Sy-gnał weja powoduje udostępnienie wartości będącej na magistrali danych na wejście JAL, zaś sygnał weak pozwala wynik obliczeń zapisać do rejestru akumulatora. Zawartość rejestru akumulatora można wyprowadzić na magistralę danych przy użyciu sygnału wyak. Obliczenia w JAL wykonywane są na liczbach binarnych zapisanych w kodzie uzupełnieniowym do 24. W dowolnym momencie obliczeń możliwe jest sprawdzenie, czy w akumulatorze znajduje się liczba ujem-na, czy też nieujemna. W tym celu wystarczy sprawdzić bit znaku liczby przechowywanej w akumulatorze (nazywany sygnałem stanu Z). Jeśli liczba w akumulatorze jest liczbą ujemną, bit Z będzie miał wartość jeden. W przeciwnym przypadku bit ten będzie równy zero. Układ sterujący procesora może sterować wykonywaniem obliczeń w różny sposób w zależności od stanu bitu Z.", "source": "C-19-004_Maszyna.pdf", "tags": [], "type": "prg" }, { "content": "2.3. Układ sterujący Układ sterujący, na podstawie stanu maszyny W (czyli zawartości poszczególnych rejestrów, two-rzących ten układ), określa sygnały sterujące, jakie w danym momencie mają być aktywne. Rejestrami wpływającymi na działanie układu sterującego oprócz akumulatora są rejestr instrukcji I oraz rejestr licznika rozkazów L. Licznik rozkazów przechowuje adres kolejnego rozkazu do wykonania. Ponieważ najczęściej kolejne, następujące po sobie rozkazy znajdują się w kolejnych komórkach pamięci, do licznika rozkazów dodano sygnał il, którego zadaniem jest inkrementacja (czyli zwiększenie o 1) zawartości tego rejestru. Ponadto z licznikiem rozkazów związane są sygnały: wel, który aktywuje operację zapisania w rejestrze L aktu-alnej zawartości magistrali adresowej oraz wyl, który powoduje wyprowadzenie zawartości rejestru na tę magistralę. W rejestrze instrukcji przez większość czasu wykonywania rozkazu znajduje się słowo opisujące wy-konywany rozkaz. Rejestr ten można podzielić na dwie części: kodową i adresową (patrz rysunek 1). Pierwsza część rejestru przechowuje kod rozkazu, zaś druga argument. Przy czym najczęściej argumen-tem jest adres komórki, do której odwołuje się dany rozkaz, stąd też nazwa drugiej części (część adresowa) i oznaczenie symboliczne Ad. Z rejestrem instrukcji związane są dwa sygnały: wyad oraz wei. Pierwszy z nich, sygnał wyad pozwala wyprowadzić argument (zawartość części adresowej rejestru I) na magistralę adresową. Drugi, sygnał wei pozwala na przepisanie słowa opisującego rozkaz do wykonania z magistrali danych do rejestru I. Warto w tym miejscu podkreślić fakt, że szerokość (pojemność) magistrali adresowej i magistrali danych są 28 A. Momot, R. Tutajewicz różne. W przypadku najprostszej wersji maszyny W, magistralą danych można przesyłać słowa 8-bitowe, natomiast magistralą danych – słowa 5-bitowe.", "source": "C-19-004_Maszyna.pdf", "tags": [], "type": "prg" }, { "content": "2.4. Sygnały sterujące: impulsowe i poziomowe Podczas analizy pracy maszyny W należy zwrócić uwagę na fakt, że układ sterujący jest układem sekwencyjnym synchronicznym, zatem wymaga do prawidłowej pracy sygnału zegarowego (taktującego). Wszystkie operacje wewnątrz jednostki centralnej jak i operacje w całym systemie odbywają się w takt sygnału zegarowego, który to sygnał powinien być doprowadzony do wszystkich elementów systemu. Czę-stotliwość sygnału zegarowego ma bezpośredni wpływ na szybkość operacji wykonywanych przez procesor, układy pamięci czy też urządzenia wejścia/wyjścia. Odwrotność częstotliwości generatora zegarowego to okres sygnału zegarowego nazywany zwykle cyklem zegarowym lub taktem zegara. Na schemacie maszyny W widocznym na rysunku 1 można wyróżnić 16 sygnałów sterujących. Sygnały te można podzielić na dwie kategorie: • sygnały impulsowe – bardzo krótkie sygnały aktywowane na koniec taktu sygnału zegarowego (wy-różnione na rysunku poprzez podkreślenie ich nazw) oraz • sygnały poziomowe – długie sygnały, aktywne przez całą długość taktu sygnału zegarowego. Sygnały poziomowe służą przede wszystkim do aktywowania operacji wyprowadzania danych zapisanych w rejestrach na magistrale, natomiast sygnały impulsowe używane są w celu wpisywania nowych da-nych do rejestrów. Wynika to z faktu iż wyprowadzając daną wartość z rejestru na magistralę musi minąć pewien czas, aby pojawiająca się na magistrali dana wartość mogła być traktowana jako wiarygodna (sta-bilny poziom napięcia). Dopiero wtedy (pod koniec taktu zegarowego) można tę daną wartość przepisać do kolejnego rejestru.", "source": "C-19-004_Maszyna.pdf", "tags": [], "type": "prg" }, { "content": "Operacje aktywowane poszczególnymi sygnałami sterującymi można opisać używając symboliki prze-syłów międzyrejestrowych5: • dla sygnałów poziomowych 1. wyl : (L) →magA – wyprowadzenie zawartości rejestru licznika na magistralę adresową, 2. wyad : (Ad) →magA – wyprowadzenie zawartości części adresowej rejestru instrukcji na magistralę adresową, 3. wyak : (Ak) →magS – wyprowadzenie zawartości rejestru akumulatora na magistralę danych, 4. wys : (S) →magS – wyprowadzenia zawartości rejestru słowa pamięci operacyjnej na magi-stralę danych, 5. pisz : (S) →(A) – wpisanie zawartości rejestru słowa S pamięci operacyjnej do komórki pamięci o adresie zawartym w rejestrze adresowym A pamięci operacyjnej, 6. czyt : ((A)) →S – wpisanie zawartości komórki pamięci o adresie zawartym w rejestrze adresowym A pamięci operacyjnej do rejestru słowa S, 7. weja : (magS) →JAL – wpisanie wartości podanej na magistralę danych na wejście jednostki artymetyczno-logicznej, 29 8. przep – przepisanie danej podanej na na wejście jednostki artymetyczno-logicznej, 9. dod – dodanie do zawartości rejestru akumulatora wartości podanej na wejście JAL, 10. ode – odjęcie od zawartości rejestru akumulatora wartości podanej na wejście JAL, • dla sygnałów impulsowych 1. wel : (magA) →L – wprowadzenie zawartości magistrali adresowej do rejestru licznika, 2. wea : (magA) →A – wprowadzenie zawartości magistrali adresowej do rejestru adresowego pamięci operacyjnej, 3. wes : (magS) →S – wprowadzenie zawartości magistrali danych do rejestru słowa pamięci operacyjnej, 4. wei : (magS) →I – wprowadzenie zawartości magistrali danych do rejestru instrukcji, 5. weak : (JAL) →Ak – wprowadzenie wypracowanej w jednostce arytmetyczno-logicznej war-tości do rejestru akumulatora, 6. il : (L) + 1 →L – inkrementacja zawartości rejestru licznika.", "source": "C-19-004_Maszyna.pdf", "tags": [], "type": "prg" }, { "content": "3. Projektowanie rozkazów Jednym z etapów projektowania procesora jest ustalenie listy rozkazów realizowanych przez dany pro-cesor oraz zdefiniowanie, dla każdego rozkazu, sekwencji działań potrzebnych do jego wykonania. Pod pojęciem projektowania rozkazu będziemy rozumieć ustalenie przebiegów sygnałów sterujących, aktywu-jących wykonanie wszystkich przesyłów międzyrejestrowych, składających się na dany rozkaz. Każdy rozkaz wykonywany jest etapami. Pierwszy etap to pobranie i zdekodowanie rozkazu. Dopiero po zakończeniu tego etapu procesor jest w stanie określić jaki rozkaz wykonuje. Oznacza to, że etap pobrania i dekodowania musi być wykonywany identycznie dla wszystkich projektowanych rozkazów. W maszynie W wykonanie tego etapu realizowane jest jako pierwsza faza rozkazu i składają się na nią sygnały: czyt (odczytanie komórki pamięci), wys (przesłanie zawartości odczytanej komórki na magistralę danych), wei (wprowadzenie odczytanej zawartości do rejestru instrukcji) i il (inkrementacja licznika rozkazów). Przy czym zakłada się, że w momencie odczytu zawartości komórki pamięci operacyjnej, w rejestrze adresowym pamięci operacyjnej A oraz rejestrze licznika znajduje się ta sama wartość – adres mającego się wykonać rozkazu. Należy też podkreślić, że w poprawnie zaprojektowanym rozkazie sygnał wei występuje zawsze tylko i wyłącznie w pierwszej fazie rozkazu (zatem przez wszystkie kolejne fazy potrzebne do zrealizowania rozkazu jego kod znajduje się w części kodowej rejestru instrukcji). W kolejnych fazach realizowane są dalsze etapy wykonania rozkazu. Są to: ustalenie adresu efektyw-nego argumentu, jego odczyt i wykonanie na nim właściwej operacji oraz przygotowanie do wykonania następnego rozkazu (zadbanie o to, aby w rejestrze adresowym pamięci operacyjnej A oraz rejestrze licz-nika znajdowała się ta sama wartość – adres kolejnego rozkazu do wykonania). Cały proces projektowania rozkazów zostanie przedstawiony na przykładzie opisanych poniżej rozkazów DOD, ŁAD oraz SOM.", "source": "C-19-004_Maszyna.pdf", "tags": [], "type": "prg" }, { "content": "3.1. Rozkaz DOD Działanie rozkazu DOD można opisać symbolicznie za pomocą przesyłu międzyrejestrowego: (Ak) + ((Ad)) →Ak. 30 A. Momot, R. Tutajewicz W wyniku działania tego rozkazu do rejestru akumulatora jednostki arytmetyczno-logicznej należy dodać zawartość komórki pamięci, której adres jest podany jako argument projektowanego rozkazu i znajduje się w części adresowej rejestru instrukcji (po pobraniu i zdekodowaniu rozkazu). Podobnie jak w przypadku każdego innego rozkazu, projektowanie rozkazu zaczniemy od fazy pobrania i dekodowania rozkazu. Najpierw należy odczytać rozkaz z pamięci i przesłać go do rejestru instrukcji oraz zwiększyć o 1 zawartość licznika rozkazów. Wykonanie tych działań wymaga uaktywnienia sygnałów czyt, wys, wei oraz il. Te właśnie sygnały będą tworzyć pierwszą fazę wykonania rozkazu dodawania. Po zdekodowaniu konkretnego rozkazu można przystąpić do realizacji charakterystycznych dla nie-go działań. W tym przypadku do akumulatora musimy dodać zawartość komórki pamięci, której adres jest argumentem rozkazu. Samo dodawanie musi być poprzedzone odczytaniem zawartości odpowiedniej komórki pamięci. Należy przy tym pamiętać, że przy aktywacji sygnału czyt zawsze odczytywana jest komórka, której adres znajduje się w rejestrze adresowym układu pamięci (rejestrze A). Tymczasem adres komórki, którą mamy odczytać znajduje się w części adresowej (Ad) rejestru instrukcji. Przed odczyta-niem z pamięci należy zatem przesłać zawartość rejestru Ad do rejestru A, co można zapisać symbolicznie jako (Ad) →A. Przesył taki będzie wykonany po uaktywnieniu sygnałów wyad (wyprowadzenie zawar-tości części adresowej rejestru instrukcji na magistralę adresową) i wea (zapisanie zawartości magistrali adresowej w rejestrze A układu pamięci). Te dwa sygnały (wyad i wea) tworzą drugą fazę realizacji rozkazu dodawania. Wszystkie pozostałe czynności zostaną wykonane w trzeciej fazie wykonania tego rozkazu. A będą to: – odczytanie argumentu z pamięci (aktywowane sygnałem czyt), – przesłanie go do jednostki arytmetyczno-logicznej (co wymaga sygnałów wys i weja), – wykonanie dodawania (sygnał dod) i zapisanie jego wyniku w akumulatorze (sygnał weak). Czynności te można zapisać symbolicznie jako (Ak) + ((A)) →Ak. Dodatkowo, ponieważ trzecia faza będzie ostatnią fazą realizacji rozkazu dodawania, musimy pamiętać o przesłaniu adresu następnego rozkazu do wykonania z rejestru licznika rozkazów L do rejestru adresowego pamięci A, co można zapisać symbolicznie jako (L) →A. Ten przesył zostanie zrealizowany dzięki sygnałom wyl i wea. Warto przy tym też zwrócić uwagę na pewną optymalizację działań. Z uwagi na fakt iż przesył (Ak) + ((A)) →Ak jest niezależny od przesyłu (L) →A, a transfer danych w każdym z nich zajmuje inną magistralę (odpowiednio magistralę danych i adresową), operacje związane z tymi przesyłami mogą być wykonane w tym samym takcie zegarowym. Widzimy więc, że rozkaz dodawania DOD tworzą trzy fazy (takty zegara), w których muszą być aktywne następujące sygnały sterujące: 1. czyt wys wei il; 2. wyad wea; 3. czyt wys weja dod weak wyl wea.", "source": "C-19-004_Maszyna.pdf", "tags": [], "type": "prg" }, { "content": "3.2. Rozkaz ŁAD Działanie rozkazu ŁAD można opisać symbolicznie za pomocą przesyłu międzyrejestrowego: (Ak) →(Ad). W wyniku działania tego rozkazu zawartość rejestru akumulatora jednostki arytmetyczno-logicznej należy wpisać do komórki pamięci, której adres jest podany jako argument projektowanego rozkazu i znajduje się w części adresowej rejestru instrukcji (po pobraniu i zdekodowaniu rozkazu). Maszyna W – jak zaprojektować prosty rozkaz 31 Jak wspomniano uprzednio pierwszy takt każdego rozkazu rozpoczyna się od fazy pobrania i dekodo-wania rozkazu. Należy zatem odczytać rozkaz z pamięci i przesłać go do rejestru instrukcji oraz zwiększyć o 1 zawartość licznika rozkazów. Wykonanie tych działań wymaga uaktywnienia sygnałów czyt, wys, wei oraz il. Te właśnie sygnały będą tworzyć pierwszą fazę wykonania rozkazu. Po zdekodowaniu rozkazu można przystąpić do charakterystycznych dla niego działań. Ponieważ ak-tywny sygnał pisz powoduje zapis wartości zapisanej w rejestrze słowa S pamięci operacyjnej do komórki pamięci o adresie zawartym w rejestrze adresowym A pamięci operacyjnej, przed wykonaniem operacji zapisu należy odpowiednio wypełnić rejestry uczestniczące w tej operacji. Zatem do rejestru S należy przesłać zawartość rejestru akumulatora, co można symbolicznie zapisać jako (Ak) →S. Przesył ta-ki będzie wykonany po uaktywnieniu sygnałów wyak (wyprowadzenie zawartości rejestru akumulatora na magistralę danych) oraz wes (zapisanie zawartości magistrali danych w rejestrze S układu pamięci). Należy także przesłać zawartość części adresowej Ad rejestru instrukcji do rejestru adresowego pamięci operacyjnej A, co można zapisać symbolicznie jako (Ad) →A. Przesył taki będzie wykonany po uak-tywnieniu sygnałów wyad (wyprowadzenie zawartości części adresowej rejestru instrukcji na magistralę adresową) i wea (zapisanie zawartości magistrali adresowej w rejestrze adresowym układu pamięci). Z uwagi na fakt iż oba przesyły (Ak) →S oraz (Ad) →A są niezależne od siebie, a transfer danych w każdym z nich zajmuje inną magistralę (odpowiednio magistralę danych i adresową), operacje związane z tymi przesyłami mogą być wykonane w tym samym takcie zegarowym. Odbywać się to będzie drugim takcie naszego rozkazu, który będą tworzyć sygnały wyak, wes oraz wyad, wea. Po wpisaniu odpowiednich wartości do rejestru słowa i rejestru adresowego pamięci operacyjnej, w ko-lejnym (trzecim) takcie należy aktywować sygnał zapisu pisz. Dodatkowo, ponieważ trzecia faza będzie ostatnią fazą realizacji rozkazu, musimy pamiętać o przesłaniu adresu następnego rozkazu do wykonania z rejestru licznika rozkazów L do rejestru adresowego pamięci A, co można zapisać symbolicznie jako (L) →A. Ten przesył zostanie zrealizowany dzięki sygnałom wyl i wea. Widzimy więc, że rozkaz ŁAD tworzą trzy fazy (takty zegara), w których muszą być aktywne nastę-pujące sygnały sterujące: 1. czyt wys wei il; 2. wyak wes wyad wea; 3. pisz wyl wea.", "source": "C-19-004_Maszyna.pdf", "tags": [], "type": "prg" }, { "content": "3.3. Rozkaz SOM Działanie rozkazu SOM można opisać symbolicznie za pomocą przesyłu międzyrejestrowego: jeżeli Z=1, to (Ad) →L. W wyniku działania tego rozkazu zawartość części adresowej rejestru instrukcji powinna zostać wpisana do rejestru licznika, o ile tylko zawartość rejestru akumulatora jednostki arytmetyczno-logicznej jest ujemna. Oznacza to, że rozkaz ten powoduje ustalenie adresu następnego do realizacji rozkazu w zależności od zawartości akumulatora. Jeżeli w akumulatorze jest liczba nieujemna, następnym wykonywanym rozkazem ma być rozkaz znajdujący się w kolejnej komórce pamięci. Natomiast jeżeli zawartość akumulatora jest ujemna, następnym rozkazem do wykonania ma być ten, który zapisano w komórce pamięci o adresie podanym jako argument rozkazu. Jak zwykle pierwszą fazę projektowanego rozkazu tworzą sygnały czyt, wys, wei, il. Następnie należy sprawdzić, czy w akumulatorze znajduje się wartość ujemna. Jest to możliwe dzięki istnieniu odpowiednich sygnałów stanu procesora. W tym wypadku interesuje nas wartość bitu znaku Z rejestru akumulatora, 32 A. Momot, R. Tutajewicz czyli znak liczby przechowywanej w akumulatorze. Sygnał stanu Z informuje procesor czy w akumulatorze jest liczba ujemna (wtedy bit ten przyjmuje wartość 1). Rozkaz SOM jest więc rozkazem skoku warunkowego. Jeżeli Z = 1, to w akumulatorze jest liczba ujemna, a to oznacza, że należy wykonać skok, czyli przesłać do rejestrów L i A adres znajdujący się w części adresowej rejestru instrukcji, co można zapisać symbolicznie jako (Ad) →L, A. Wymaga to uaktywnienia sygnałów wyad, wel oraz wea. Warto przy tym podkreślić, że przesył (Ad) →A realizowany równocześnie z (Ad) →L wynika z optymalizacji, czyli dążenia do uzyskania pożądanego efektu w minimalnej liczbie taktów zegarowych. Zamiast więc realizować dwa przesyły: najpierw (Ad) →L, a potem (L) →A, wykorzystujemy fakt, że w obu wypadkach przesyłana jest ta sama wartość, po tej samej magistrali. Jeżeli Z = 0, to w akumulatorze jest liczba nieujemna, więc jedynie musimy zakończyć nasz bieżący rozkaz, przygotowując w rejestrze adresowym pamięci A adres kolejnego rozkazu. Adres następnego roz-kazu znajduje się w rejestrze licznika L (po wykonaniu inkrementacji w pierwszej fazie), zatem wystarczy go przesłać do rejestru A. Z tym przesyłem związane są sygnały wyl, wea. Widzimy więc, że rozkaz dodawania SOM tworzą dwie fazy (takty zegara), w których muszą być aktywne następujące sygnały sterujące: 1. czyt wys wei il; Jeżeli Z=1 2. wyad wel wea; w przeciwnym przypadku 2.’ wyl wea.", "source": "C-19-004_Maszyna.pdf", "tags": [], "type": "prg" }, { "content": "4. Zadania do samodzielnego wykonania Na zakończenie proponuje się Czytelnikowi samodzielne wykonanie kilku zadań, sformułowanych w dalszej części niniejszej sekcji, w celu utrwalenia opisywanych wyżej wiadomości i zasad projektowych. Pod treścią zadań zamieszczono ich rozwiązania w postaci opisu działania rozkazu w języku naturalnym oraz wyszczególniono nazwy niezbędnych sygnałów sterujących, które należy aktywować w poszczególnych fazach rozkazu. Przy czym sugeruje się czytelnikowi próbę samodzielnego zmierzenia się ze zrozumieniem symboliki rozkazu, wskazania aktywnych sygnałów sterujących oraz zastanowienia się nad optymaliza-cją czasową proponowanego rozwiązania, a dopiero potem, na koniec, porównanie swoich przemyśleń z gotowym (optymalnym) rozwiązaniem. 4.1. Treści zadań Zaprojektować rozkazy opisane w sposób symboliczny jako: 1. 2 ∗(Ak) →Ak, 2. 3 ∗(Ak) →Ak, 3. 5 ∗(Ak) →Ak, 4. 8 ∗(Ak) →Ak, 5. −(Ak) →Ak, Maszyna W – jak zaprojektować prosty rozkaz 33 6. ((L) + 1) →(Ad), 7. jeżeli Z = 1, to (Ak) −((Ad)) →Ak, 8. jeżeli Z = 1, to 2 ∗(Ak) →Ak, (Ad), 9. jeżeli ((Ad)) < 0, to 0 →Ak, (Ad); w przeciwnym przypadku ((Ad)) →Ak, 10. jeżeli (Ak) < ((Ad)), to (Ak) −2 ∗((Ad)) →Ak.", "source": "C-19-004_Maszyna.pdf", "tags": [], "type": "prg" }, { "content": "4.2. Rozwiązania zadań 1. Rozkaz powinien zrealizować podwojenie zawartości akumulatora. Do jego wykonania potrzebne są 2 fazy (takty zegara), w których muszą być aktywne następujące sygnały sterujące: 1. czyt wys wei il; 2. wyak weja dod weak wyl wea. 2. Rozkaz powinien zrealizować potrojenie zawartości akumulatora. Do jego wykonania potrzebne są 3 fazy (takty zegara), w których muszą być aktywne następujące sygnały sterujące: 1. czyt wys wei il; 2. wyak weja dod weak wes; 3. wys weja dod weak wyl wea. 3. Rozkaz powinien zrealizować pięciokrotone zwiększenie zawartości akumulatora. Do jego wykonania potrzebne są 4 fazy (takty zegara), w których muszą być aktywne następujące sygnały sterujące: 1. czyt wys wei il; 2. wyak weja dod weak wes; 3. wyak weja dod weak; 4. wys weja dod weak wyl wea. 4. Rozkaz powinien zrealizować ośmiokrotne zwiększenie zawartości akumulatora. Do jego wykonania potrzebne są 4 fazy (takty zegara), w których muszą być aktywne następujące sygnały sterujące: 1. czyt wys wei il; 2. wyak weja dod weak; 3. wyak weja dod weak; 4. wyak weja dod weak wyl wea. 5. W wyniku działania rozkazu wartość zawarta akumulatorze powinna zostać zmieniona na przeciwną. Do jego wykonania potrzebne są 3 fazy (takty zegara), w których muszą być aktywne następujące sygnały sterujące: 1. czyt wys wei il; 2. wyak weja ode weak wes; 3. wys weja ode weak wyl wea. 34 A. Momot, R. Tutajewicz", "source": "C-19-004_Maszyna.pdf", "tags": [], "type": "prg" }, { "content": "6. W wyniku działania rozkazu w pamięci, pod adresem podanym argumentem rozkazu, powinna zo-stać wpisana wartość zapisana w kolejnej komórce pamięci operacyjnej względem komórki pamięci, w której znajduje się dany rozkaz. Do jego wykonania potrzebne są 4 fazy (takty zegara), w których muszą być aktywne następujące sygnały sterujące: 1. czyt wys wei il; 2. wyl wea; 3. czyt wyad wea il6; 4. pisz wyl wea. 7. Rozkaz powinien zrealizować odejmowanie od zawartości akumulatora zawartości komórki pamięci, której adres podany jest argumentem rozkazu, o ile tylko zawartość rejestru akumulatora jednostki arytmetyczno-logicznej jest ujemna. Do jego wykonania potrzebne są maksymalnie 3 fazy (takty zegara), w których muszą być aktywne następujące sygnały sterujące: 1. czyt wys wei il; Jeżeli Z=1 2. wyad wea; 3. czyt wys weja ode weak wyl wea; w przeciwnym przypadku 2.’ wyl wea. 8. Rozkaz powinien zrealizować podwojenie zawartości akumulatora, a następnie wyznaczoną wartość pozostawić w akumulatorze i wpisać do komórki pamięci, której adres podany jest argumentem rozkazu, o ile tylko zawartość rejestru akumulatora jednostki arytmetyczno-logicznej jest ujemna. Do jego wykonania potrzebne są maksymalnie 4 fazy (takty zegara), w których muszą być aktywne następujące sygnały sterujące: 1. czyt wys wei il; Jeżeli Z=1 2. wyak weja dod weak; 3. wyak wes wyad wea; 4. pisz wyl wea; w przeciwnym przypadku 2.’ wyl wea. 35", "source": "C-19-004_Maszyna.pdf", "tags": [], "type": "prg" }, { "content": "9. W wyniku działania rozkazu wartość zero należy wpisać do akumulatora i do komórki pamięci, któ-rej adres podany jest argumentem rozkazu, o ile tylko zawartość tej komórki pamięci była ujemna. W przeciwnym przypadku do akumulatora należy wpisać zawartość komórki pamięci, której adres podany jest argumentem rozkazu. Do jego wykonania potrzebne jest maksymalnie 6 faz (taktów zegara), w których muszą być aktywne odpowiednio sygnały sterujące: 1. czyt wys wei il; 2. wyad wea; 3. czyt wys weja przep weak wyl wea; Jeżeli Z=1 4. wyak weja ode weak; 5. wyak wes wyad wea; 6. pisz wyl wea; 10. Rozkaz powinien zrealizować odejmowanie od zawartości akumulatora podwojonej zawartości ko-mórki pamięci, której adres podany jest argumentem rozkazu, o ile tylko zawartość tej komórki pamięci jest większa od wartości będącej przed wykonaniem rozkazu w akumulatorze. Do jego wykonania potrzebne są maksymalnie 4 fazy (takty zegara), w których muszą być aktywne odpo-wiednio sygnały sterujące: 1. czyt wys wei il; 2. wyad wea; 3. czyt wys weja ode weak; Jeżeli Z=1 4. wys weja ode weak wyl wea; w przeciwnym przypadku 4.’ wys weja dod weak wyl wea. Literatura 1. M. Chłopek, R. Tutajewicz, Ćwiczenia laboratoryjne z Podstaw Informatyki – maszyna W. Skrypt uczelniany Politechniki Śląskiej nr 2062. Wydawnictwo Politechniki Śląskiej, Gliwice, 1997. 2. H.H. Goldstine, The Computer: from Pascal to von Neumann. Princeton, New Jersey: Princeton University Pres, 1972. 3. K. Grochla, G. Hryń, S. Iwaszenko, P. Kasprzyk, J. Kubica, M. Widera, T. Wróbel, Wykłady z Pod-staw Informatyki profesora Stefana Węgrzyna. Skrypt uczelniany Politechniki Śląskiej nr 2321. Wy-dawnictwo Politechniki Śląskiej, Gliwice, 2003. 4. L. Null, J. Lobur, Struktura organizacyjna i architektura systemów komputerowych. Helion, Gliwice, 2004. 5. D.A. Patterson, J.L. Hennessy, Computer Organization and Design: The Hardware/Software Inter-face, wydanie piąte, Elsevier Morgan Kaufmann, Oxford, 2014. 6. S. Węgrzyn, Podstawy informatyki. PWN, Warszawa, 1982.", "source": "C-19-004_Maszyna.pdf", "tags": [], "type": "prg" }, { "content": "MINUT 2020 (2), s. 136 148ISSN 2719-3063Robert BRZESKI1[0000 −0001 −7127 −0989]1Wydziaª Automatyki, Elektroniki i Informatyki, Politechnika ‘l¡ska, ul. Akademicka 16, 44-100 GliwicePrawidªowe tworzenie rozkazów asemblerowych dla Maszyny Wcz.2Streszczenie. Artykuª ten stanowi kontynuacj¦ tematyki rozpocz¦tej w artykule `Prawidªowetworzenie rozkazów asemblerowych dla Maszyny W cz.1'. W bie»¡cym artykule przedstawiony jestkolejny zestaw bª¦dów popeªnianych przez studentów. Tym razem s¡ to bª¦dy zwi¡zane z bardziejdogª¦bn¡ wiedz¡ lub takie które mimo wszystko na zaj¦ciach si¦ pojawiaj¡. W tym artykule s¡ onezebrane w jeden zbiór, wraz z krótkim omówieniem problemu i przedstawieniem rozwi¡za« prawi-dªowych. Podsumowaniem jest spis opisanych tu bª¦dów popeªnianych przez studentów. Artykuªten mo»e stanowi¢ wi¦c nie tylko uzupeªnienia wiedzy dotychczas posiadanej, ale tak»e swego ro-dzaju list¦ kontroln¡ podczas praktycznej implementacji rozkazów asemblerowych dla Maszyny W.Sªowa kluczowe: rozkaz, asembler, Maszyna W.1. Wprowadzenie do implementacji rozkazów dla Maszyny WBie»¡cy artykuª, jako kontynuacja tematyki zawartej w publikacji `Prawidªowe tworzenie rozkazówasemblerowych dla Maszyny W cz.1' [6], jest przeznaczony dla studentów maj¡cych styczno±¢ lub chc¡-cych poszerzy¢ swoj¡ wiedz¦ z zakresu projektowania rozkazów dla Maszyny W. Zagadnienie to poruszanejest mi¦dzy innymi na wydziale Automatyki Elektroniki i Informatyki Politechniki ‘l¡skiej, w ramachprzedmiotu Postawy Informatyki. Poj¦cie Maszyny W odnosi si¦ do idei konstrukcji i dziaªania uprosz-czonego komputera. Zawiera on w sobie podstawowe, najwa»niejsze elementy maszyny cyfrowej, zgodnejz obecnie powszechnie u»ywan¡ architektur¡ von Neumanna. Na prowadzonych zaj¦ciach, w szczególno±cipodczas laboratorium, studenci u»ywaj¡ Maszyny W, w postaci programowego symulatora [Rysunek 1].Na zaj¦ciach z tego przedmiotu zadaniem studenta jest zaimplementowanie przy u»yciu mikrosygnaªówrozkazu asemblerowego, zgodnie z otrzyman¡ tre±ci¡ opisuj¡c¡ co dokªadnie dany rozkaz ma realizowa¢.Przed implementacj¡ rozkazu mo»na utworzy¢ jego projekt w postaci algorytmu, zapisanego w dowol-ny sposób (np. sªownie lub przy u»yciu schematu blokowego, lub za pomoc¡ poszczególnych przesyªówpomi¦dzy rejestrami lub pami¦ci¡). Taki rozkaz wykonywany jest w kilku osobnych cyklach procesorazwanych taktami. W ka»dym takcie nale»y umie±ci¢ odpowiedni zestaw sygnaªów mikrosteruj¡cych i za-ko«czy¢ go znakiem reprezentuj¡cym koniec taktu. Dla obecnie u»ywanego na laboratorium symulatoraAutor korespondencyjny: R. Brzeski (Robert.Brzeski@polsl.pl).Data wpªyni¦cia: 01.10.2020.Prawidªowe tworzenie rozkazów asemblerowych dla Maszyny W cz.2", "source": "C-20-008.pdf", "tags": [], "type": "prg" }, { "content": "137 jest to ±rednik. Implementacja rozkazu na dost¦pnym symulatorze realizowana jest w oknie, dost¦pnympo wybraniu z menu Plik →Nowy →Rozkaz, w nast¦puj¡cej postaci [6]:// Dwa znaki uko±nika oznaczaj¡ komentarz. Jest on opcjonalny ale warto tu wpisa¢ tre±¢ rozkazu którab¦dzie implementowana.ROZKAZ nazwaRozkazu;Nast¦pnie trzeba umie±ci¢ prede niowane sªowo `ROZKAZ' oraz wªasn¡ nazw¦ implementowanegorozkazu. Caªo±¢ trzeba zako«czy¢ ±rednikiem.Argumenty liczbaArgumentów;Kolejn¡, tym razem opcjonaln¡ cz¦±ci¡ jest wpisanie liczby argumentów obsªugiwanych przez im-plementowany rozkaz. Warto±ci¡ domy±ln¡ jest jeden.czyt wys wei il;Pierwszy takt rozkazu. Jest on zawsze taki sam nie mo»na tu nic doda¢ ani niczego pomin¡¢. Dlakazdego rozkazu skªada si¦ z zestawu tych samych czterech mikrosygnaªów.Kolejne takty zestawy mikrosygnaªów;Ka»dy takt trzeba zako«czy¢ ±rednikiem.Rysunek 1. Widok okna symulatora Maszyny W, w wersji W+Tak zaimplementowany rozkaz, mo»na skompilowa¢ poprzez wybranie opcji Kompiluj z menu dost¦p-nego po naci±ni¦ciu prawego przycisku myszy na oknie rozkazu.Wykorzystanie skompilowanego rozkazu najcz¦±ciej odbywa si¦ poprzez u»ycie go i wykonanie w pro-gramie, napisanym w j¦zyku asemblera Maszyny W, czyli zestawie tego typu rozkazów [6].", "source": "C-20-008.pdf", "tags": [], "type": "prg" }, { "content": "138R. BrzeskiAby móc u»y¢, uruchomi¢ napisany rozkaz, musi on by¢ dost¦pny na li±cie rozkazów Maszyny W,menu: Widok →Lista rozkazów. Aby skompilowany rozkaz znalazª si¦ na tej li±cie, musz¡ by¢ zmienionedomy±lne ustawienia, w menu: Projekt →Opcje →Liczba bitów kodu - trzeba zmieni¢ warto±¢ ztrzy na cztery. Na trzech bitach mo»na zakodowa¢ 8 warto±ci, czyli tyle ile jest ju» w Maszynie W rozkazówprede niowanych. Na czterech bitach mo»na zakodowa¢ 16 ró»nych warto±ci, które b¦d¡ reprezentowa¢kody poszczególnych rozkazów - w ten sposób do symulatora Maszyny W, mo»na doda¢ 8 kolejnychrozkazów.W trakcie kompilowania rozkazów zostanie zrealizowana wst¦pna kontrola skªadniowa zaimplemen-towanego rozkazu. Je»eli kompilator znajdzie bª¡d, to uzyskamy odpowiedni komunikat zwrotny. Je»elikompilator b¦dzie w stanie skompilowa¢ rozkaz, to zostanie on dodany do listy dost¦pnych rozkazów:Widok →Lista rozkazów.W ramach laboratorium student b¦dzie miaª mo»liwo±¢ wdro»enia wiedzy teoretycznej w czasie imple-mentacji zadanych rozkazów asemblerowych. Tre±¢ zada« do wykonania b¦dzie przedstawiona w postaciopisu sªownego lub w formie skróconej przy u»yciu: nazw rejestrów (reprezentowanych przez skróty li-terowe), nawiasów, wykonywanych operacji lub warunków i wykonywanego przesyªu (przesyªu warto±cipomi¦dzy rejestrami lub pami¦ci¡). Przesyª reprezentowany przez znak `→' oznacza, »e warto±¢ uzyskanapo lewej stronie →jest przesyªana w miejsce wskazywane po prawej stronie →. Skróty literowe ozna-czaj¡ poszczególne rejestry. W najprostszej sytuacji np.: (A) →B oznacza, »e warto±¢ rejestru A nale»yprzesªa¢ do rejestru B [6].Wa»ne jest, aby utworzony rozkaz nie tylko dziaªaª prawidªowo, czyli realizowaª postawione przednim zadanie i byª mo»liwy do u»ycia w programie, ale tak»e wa»ne jest, aby byª optymalny, czyli byªwykonywany w najmniejszej mo»liwej liczbie taktów (cyklów) procesora.Podobnie jak w poprzednim artykule [6], tak i w tym zakªada si¦, »e czytelnik posiada podstawow¡wiedz¦ teoretyczn¡ na temat Maszyny W [1 6] i poprzez bie»¡cy artykuª chce poszerzy¢ j¡ o elementypraktycznych podpowiedzi i dodatkowych wyja±nie« z zakresu implementacji rozkazów. Pami¦ta¢ tak»enale»y, »e jedynie samodzielna realizacja zada« pozwala w peªni zrozumie¢ zale»no±ci pomi¦dzy elemen-tami tematyki zwi¡zanej z Maszyn¡ W. Kopiowanie rozwi¡za« od `s¡siada' nie skutkuje kopiowaniemumiej¦tno±ci ani wiedzy, a co najwy»ej kopiowaniem bª¦dów tam istniej¡cych. Artykuª ten jest efektemkilkunastoletnich do±wiadcze« autora w prowadzeniu zaj¦¢ z Podstaw Informatyki, a przedstawione wrozdziale 2 nieprawidªowo±ci w trakcie tworzenia rozkazów, s¡ oparte na faktycznie popeªnianych przezstudentów bª¦dach.", "source": "C-20-008.pdf", "tags": [], "type": "prg" }, { "content": "2. Przykªady bª¦dów przy implementacji rozkazówW bie»¡cym rozdziale zostan¡ zaprezentowane przykªady implementacji nieprawidªowych, wraz z ichomówieniem oraz przedstawieniem rozwi¡zania prawidªowego.2.1. Bª¡d zwi¡zany z brakiem zrozumienia liczby nawiasów wokóª rejestru.Omówienie zagadnienia:Nawiasy wyst¦puj¡ wokóª skrótów literowych rejestru. Liczba nawiasów ma kluczowe znaczenie. Ina-czej jest rozumiana po lewej, a inaczej po prawej stronie przesyªu. Wyja±nienie liczby nawiasów przed-stawione jest na przykªadowym rejestrze o nazwie R [6]:W zale»no±ci od liczby nawiasów po lewej stronie przesyªu:Prawidªowe tworzenie rozkazów asemblerowych dla Maszyny W cz.2139(R) oznacza warto±¢ znajduj¡c¡ si¦ w rejestrze R.((R)) oznacza warto±¢ znajduj¡c¡ si¦ w pami¦ci o adresie wskazywanym przez rejestr R.(((R))) oznacza, »e warto±¢ rejestru R jest adresem (wska¹nikiem) do komórki pami¦ci, któregowarto±¢ ponownie jest wska¹nikiem do pami¦ci, spod którego nale»y odczyta¢ (pobra¢) warto±¢.Natomiast po prawej stronie przesyªu:(R) - oznacza, »e uzyskan¡ wcze±niej warto±¢, nale»y zapisa¢ do pami¦ci o adresie wskazywanym przezrejestr R (adresie umieszczonym w rejestrze R).((R)) - oznacza, »e warto±¢ rejestru R jest adresem (wska¹nikiem) do komórki pami¦ci, którego warto±¢ponownie jest wska¹nikiem do pami¦ci, pod który nale»y zapisa¢ warto±¢ `operacji' uzyskan¡ z lewejstrony przesyªu `→'.", "source": "C-20-008.pdf", "tags": [], "type": "prg" }, { "content": "Bª¦dny przykªad 1.1 (Warto±¢ rejestru akumulatora doda¢ do warto±ci komórki pami¦ci o adresiezajduj¡cym si¦ w rejestrze AD, wynik dodawania pozostawi¢ w rejestrze akumulatora):// ((AD)) + (AK) →AKROZKAZ JJ-J;czyt wys wei il;wyad sa weja dod weak; // bª¡d - AD jest w dwóch nawiasach, a nie w jednymwyl wea;W tym bª¦dnym przykªadzie, niezgodnie z tre±ci¡ zadania, do akumulatora dodawana jest warto±¢przechowywana w rejestrze AD. Zgodnie z tre±ci¡ zadania, symbol rejestru AD jest w dwóch nawiasach,wi¦c w rejestrze AD jest adres komórki pami¦ci, w której znajduje si¦ warto±¢, któr¡ to nale»y doda¢do akumulatora. Dlatego w prawidªowym rozwi¡zaniu, warto±¢ rejestru AD najpierw przesyªana jestdo rejestru A (wyad wea), w kolejnym takcie jest odczytywana (sygnaª czyt) warto±¢ komórki pami¦ci(o adresie umieszczonym w rejestrze A), co powoduje umieszczenie tej warto±ci w rejestrze S, i nast¦pnieprzesyªana jest do jednostki arytmetyczno logicznej (wys weja) i dodawana do warto±ci akumulatora (dodweak).Prawidªowe rozwi¡zanie 1.1:// ((AD)) + (AK) →AKROZKAZ JJ-J;czyt wys wei il;wyad wea;czyt wys weja dod weak wyl wea;Gdyby symbol rejestru AD byª w trzech nawiasach, to dodatkowo nale»aªoby przesªa¢ odczytan¡warto±¢ z pami¦ci do rejestru A (wys sa wea) i w kolejnym takcie ponownie odczyta¢ (czyt) warto±¢z pami¦ci.140R. BrzeskiPrawidªowe rozwi¡zanie 1.2 (Warto±¢ rejestru akumulatora doda¢ do warto±ci komórki pami¦cio adresie znajduj¡cym si¦ w komórce pami¦ci o adresie znajduj¡cym si¦ w rejestrze AD, wynik dodawaniapozostawi¢ w rejestrze akumulatora):// (((AD))) + (AK) →AKROZKAZ JJ-D;czyt wys wei il;wyad wea;czyt wys sa wea; // dodatkowy takt realizuj¡cy `trzeci nawias'czyt wys weja dod weak wyl wea;2.2. Bª¡d zwi¡zany z niezrozumieniem lub zbytnim uproszczeniem tre±ci za-dania.Omówienie zagadnienia: Czasami zdarza si¦, »e student bª¦dnie zrozumie lub nieodpowiednioupro±ci tre±¢ zadania. Zadanie do wykonania trzeba odpowiednio przeanalizowa¢ przed jego wykona-niem. Powinno si¦ najpierw znale¹¢ algorytm realizuj¡cy potrzebne czynno±ci i wtedy dopiero przej±¢ doimplementacji rozkazu.", "source": "C-20-008.pdf", "tags": [], "type": "prg" }, { "content": "Przy analizie zadania nale»y wzi¡¢ pod uwag¦, »e warto±ci rejestrów które trzeba w zadaniu uwzgl¦dni¢s¡ z momentu rozpocz¦cia wykonywania rozkazu, natomiast dost¦p do warto±ci rejestrów, uzyskuje si¦dopiero po wykonaniu pierwszego taktu. Ten pierwszy takt jest standardowy dla ka»dego rozkazu i niemozna go zmieni¢ (ani nie mo»na doda¢ kolejnych mikrosygnaªów, ani nie mo»na usun¡¢ którego±).Bª¦dny przykªad 2.1 (Warto±¢ rejestru AK doda¢ do warto±ci rejestru L, wynik dodawania pozo-stawi¢ w rejestrze akumulatora oraz przesªa¢ do rejestru licznika):// (L) + (AK) →AK, LROZKAZ JD-J;czyt wys wei il; // w tym takcie warto±¢ licznika zostaje zmieniona zwi¦kszona o 1wyl sa weja dod weak; // bª¡d - dodawana jest ju» zmieniona warto±¢ licznikawiak sa wel wea;W zwi¡zku z tym, »e warto±¢ licznika ju» zostaªa w pierwszym takcie zmieniona zwi¦kszona o 1,to w drugim takcie dodawana jest ju» ta zinkrementowana o 1 warto±¢ licznika, a nie ta która byªa tamw momencie rozpocz¦cia wykonywania rozkazu. Dlatego wynik ko«cowy jest bª¦dny jest zwi¦kszonyo jeden. W zwi¡zku z tym, »e nie ma bezpo±redniego dost¦pu do warto±ci pocz¡tkowej licznika, to uzyskanywynik dodawania, aby byª prawidªowy, nale»y zdekrementowa¢ o warto±¢ jeden. Mo»na to zrobi¢ u»ywaj¡cmo»liwo±ci inkrementacji licznika (sygnaªem il) w ten sposób, »e do akumulatora zostanie dodana bie»¡cawarto±¢ rejestru L (wyl sa weja dod weak) a nast¦pnie, po inkrementacji warto±ci licznika, jego warto±¢zostanie odj¦ta od akumulatora (wyl sa weja ode weak). W ten sposób pierwotna warto±¢ akumulatorazostanie zmniejszona wªa±nie o warto±¢ 1: (AK) + (L) - [(L)+1] = (AK) 1.Prawidªowe tworzenie rozkazów asemblerowych dla Maszyny W cz.2141Prawidªowe rozwi¡zanie 2.1:// (L) + (AK) →AK, LROZKAZ JD-J;czyt wys wei il;wyl sa weja dod weak;wyl sa weja dod weak il;wyl sa weja ode weak;wyak sa wel wea;Warto tu jednak podkre±li¢ i zapami¦ta¢, »e w ogólno±ci nie mo»na w dowolny sposób zmienia¢zawarto±ci licznika podczas implementacji rozkazu. Je»eli jest to robione, to najcz¦±ciej nale»y zapami¦ta¢jego warto±¢ pierwotn¡ (po inkrementacji w pierwszym takcie), tak aby mo»na go byªo odtworzy¢. Jednakw tym przypadku nie jest to konieczne, gdy» jest to rozkaz skoku, w którym to w sposób ±wiadomymody kujemy warto±¢ licznika, zatem nie ma tu potrzeby zapami¦tywania (i odtwarzania) jego pierwotnejwarto±ci.2.3. Bª¡d zwi¡zany z myleniem rejestru AD z rejestrem A.Omówienie zagadnienia:Cz¦±¢ adresowa rejestru instrukcji reprezentowana symbolem AD cz¦sto jest mylona z rejestrem A.Odczyta¢ warto±¢ z rejestru AD mo»na sygnaªem wyad, który udost¦pnia t¦ warto±¢ na magistrali adre-sowej i z niej mo»na przesªa¢ j¡ dalej, zgodnie z tre±ci¡ zadania i implementowanym algorytmem.", "source": "C-20-008.pdf", "tags": [], "type": "prg" }, { "content": "Bª¦dny przykªad 3.1 (Warto±¢ rejestru akumulatora doda¢ do warto±ci komórki pami¦ci o adresiezajduj¡cym si¦ w rejestrze AD, wynik dodawania pozostawi¢ w rejestrze akumulatora):// ((AD)) + (AK) →AKROZKAZ JT-J;czyt wys wei il;czyt wys weja dod weak wyl wea;//bª¡d- do rejestru A najpierw nale»y przesªa¢ warto±¢ rejestru ADPrawidªowe rozwi¡zanie 3.1:// if (AK) < (AD) then (L)+3 →L else (L)+1 →L// ((AD)) + (AK) →AKROZKAZ JT-Jczyt wys wei il;wyad wea;czyt wys weja dod weak wyl wea;2.4. Bª¡d zwi¡zany z nieuprawnionym korzystaniem z pami¦ci.Omówienie zagadnienia:Korzystanie z pami¦ci, czyli odczytywanie lub zapisywanie warto±ci pod jaki± adres, mo»e odbywa¢si¦ tylko wtedy, gdy jest to jawnie okre±lone w tre±ci zadania. Dodatkowo tego typu operacje mog¡ by¢142R. Brzeskirealizowane tylko na tych adresach, które zostaªy wskazane w tre±ci zadania. Aby nie generowa¢ niepo-trzebnych bª¦dów w zakresie rozumienia operacji na pami¦ci, potrzebne jest rozumienie liczby nawiasówwokóª rejestru, omówione w rozdziale 2.1. Pami¦ta¢ nale»y, »e przy tworzeniu algorytmu dla otrzyma-nego zadania, nie mo»na samowolnie zapisywa¢ warto±ci pod jakikolwiek adres w pami¦ci. Pod ka»dymadresem w pami¦ci mo»e znajdowa¢ si¦ inny kod rozkazu lub zmienna wykorzystywana programie.", "source": "C-20-008.pdf", "tags": [], "type": "prg" }, { "content": "Bª¦dny przykªad 4.1 (Od warto±ci komórki pami¦ci o adresie znajduj¡cym si¦ w rejestrze AD odj¡¢warto±¢ rejestru akumulatora, wynik pozostawi¢ w rejestrze akumulatora):// ((AD)) - (AK) →AKROZKAZ JC-J;czyt wys wei il;wyl wea wyak wes;pisz; // bª¡d - nieuprawniony zapis do pami¦ciwyad wea;czyt wys weja przep weak;wyl wea;czyt wys weja ode weak;W tym nieprawidªowym przykªadzie, warto±¢ akumulatora zostaªa zapisana do komórki pami¦ci, o ad-resie znajduj¡cym si¦ w liczniku, aby zapami¦ta¢ warto±¢ akumulatora, któr¡ student planuje odj¡¢ odwpisanej najpierw do AK (niszcz¡c pierwotn¡ jego warto±¢) warto±ci komórki pami¦ci o adresie znajdu-j¡cym si¦ w rejestrze AD. Niestety, zapisuj¡c w pami¦ci (pod adres znajduj¡cy si¦ w liczniku) pierwotn¡warto±¢ AK, kod programu znajduj¡cy si¦ w tej komórce pami¦ci (domy±lnie nast¦pny rozkaz) zostaªnadpisany/zniszczony. W zwi¡zku z tym nie b¦dzie mo»liwo±ci wykonania rozkazu nast¦pnego po bie»¡-cym, a maszyna W jako nast¦pny b¦dzie realizowaªa rozkaz, b¦d¡cy interpretacj¡ liczby - pocz¡tkowejwarto±ci akumulatora sprzed wykonania bª¦dnie zrealizowanego rozkazu JC-J.W prawidªowym rozwi¡zaniu najpierw uzyskiwana jest ujemna warto±¢ akumulatora, a dopiero wtedydodawana jest do niego warto±¢ komórki pami¦ci, o adresie zawartym w rejestrze AD. W takim przypadkuniema potrzeby zapisywania w pami¦ci pierwotnej warto±ci akumulatora.Prawidªowe rozwi¡zanie 4.1:// ((AD)) - (AK) →AKROZKAZ JC-J;czyt wys wei il;wyak wes weja ode weak; // zapisanie warto±ci AK do rejestru S i jednoczesne zerowanie AKwys weja ode weak wyad wea; // odj¦cie od wyzerowanego akumulatora wcze±niejszej jego warto±ciczty wys weja dod weak wyl wea;", "source": "C-20-008.pdf", "tags": [], "type": "prg" }, { "content": "Prawidªowe tworzenie rozkazów asemblerowych dla Maszyny W cz.2143Bª¦dny przykªad 4.2 (Od warto±ci rejestru AD odj¡¢ jeden. Wynik nale»y umie±ci¢ w rejestrzeakumulatora):Uwaga napisana przez studenta do poni»szego bª¦dnego rozkazu: `pod adresem 1 musi by¢ warto±¢1'. Takie zaªo»enie jest nieuprawnione, nie mo»na zakªada¢, »e pod jakim± adresem w pami¦ci b¦dzieprzydatna w algorytmie warto±¢.// (AD) - 1 →AKROZKAZ JC-D;czyt wys wei il;wyad sa weja przep weak;wyl wea;czyt wys weja ode weak;wyl wea;W tym nieprawidªowym rozwi¡zaniu student nie tylko w sposób nieuprawniony korzysta z pami¦ci,ale jednocze±nie zakªada, »e warto±¢ licznika b¦dzie równa jeden, co b¦dzie prawd¡ jedynie dla pierwszegorozkazu umieszczonego w caªym programie.W prawidªowym rozwi¡zaniu wynik jest dekrementowany o warto±¢ 1 przy u»yciu licznika, podobniejak w przykªadzie 2.1. Dodatkowo warto±¢ licznika jest zachowywana w rejestrze S, gdy» w tym rozkazienie mo»e ona ulec utraceniu i na ko«cu trzeba t¦ warto±¢ przywróci¢ (wys sa wel).Prawidªowe rozwi¡zanie 4.2:// (AD) - 1 →AKROZKAZ JC-D;czyt wys wei il;wyad sa weja przep weak;wyl sa weja dod weak wea wes il;wyl sa weja ode weak;wys sa wel;2.5. Bª¡d zwi¡zany z nieprawidªowym wyborem architektury Maszyny W.Omówienie zagadnienia:Maszyna W, poprzez dodawanie do niej kolejnych komponentów, umo»liwia zmian¦ swojej architek-tury. Najbardziej podstawowa to architektura W oraz W+ (zawieraj¡ca dodatkowo poª¡czenie mi¦dzymagistral¡ danych i adresow¡). Zadania do realizacji zazwyczaj ustalane s¡ na konkretn¡ architektur¦i samowolnie nie mo»na u»ywa¢ elementów dodatkowych, zawartych w innej architekturze. Oczywi±ciezada« typowych dla architektury W+ nie da si¦ wykona¢ na architekturze W. Je»eli jawnie nie jest po-dane, na jak¡ architektur¦ nale»y zaimplementowa¢ rozkaz, to mo»na powiedzie¢, »e zadanie powinno si¦wykona¢, w na tyle prostej architekturze na ile to mo»liwe.", "source": "C-20-008.pdf", "tags": [], "type": "prg" }, { "content": "Bª¦dny przykªad 5.1: (Warto±¢ rejestru akumulatora doda¢ do warto±ci komórki pami¦ci o adresiezajduj¡cym si¦ w rejestrze AK, wynik dodawania pozostawi¢ w rejestrze akumulatora):144R. Brzeski// (AK) + ((AK)) →AKtego zadania nie da si¦ zrealizowa¢ na architekturze WROZKAZ JP-J;czyt wys wei il;wyak wei; // bª¡d opisany w artykule [6]wyad wea;czyt wys weja weak dod wyl wea;Prawidªowe rozwi¡zanie 5.1:// (AK) + ((AK)) →AKDo realizacji tego zadania trzeba wykorzysta¢ architektur¦ W+ROZKAZ JP-J;czyt wys wei il;wyak sa wea; // warto±¢ przesyªana jest przez dodatkowe poª¡czenie mi¦dzymagistraloweczyt wys weja weak dod wyl wea;Bª¦dny przykªad 5.2 (Od warto±ci komórki pami¦ci o adresie znajduj¡cym si¦ w rejestrze L odj¡¢warto±¢ rejestru akumulatora, wynik pozostawi¢ w rejestrze akumulatora):// ((L)) - (AK) →AKDo tego zadania nie trzeba W+, wystarczy WROZKAZ JP-D;czyt wys wei il;wyl wea;wyak sa wel;czyt wys weja przep weak;wyl sa weja weak ode weak wyl wea;W tym bª¦dnym przykªadzie poprzez przesªanie akumulatora do licznika, nast¦puje utrata jego war-to±ci - bª¡d opisany w artykule [6]. Dodatkowo w ostatnim takcie wyst¦puje podwójnie sygnaª wyl -w obecnie u»ywanym symulatorze Maszyny W nie generuje to »adnego bª¦du (symulator traktuje to jakpojedyncze wywoªanie sygnaªu wyl), jednak kolejne wypisanie w tym samym takcie tego samego sygnaªujest nadmiarowe i nie powinno mie¢ miejsca.Prawidªowe rozwi¡zanie 5.2:// ((L)) - (AK) →AKROZKAZ JP-D;czyt wys wei il;wyl wea wyak weja ode weak wes;wys weja ode weak;czyt wys weja dod weak;Dla rozwi¡zania prawidªowego, dodatkowo warto zwróci¢ uwag¦ na brak w ostatnim takcie sygnaªówwyl wea. W tym rozkazie przesªanie warto±ci licznika do rejestru adresowego zostaªo ju» zrealizowanew drugim takcie.", "source": "C-20-008.pdf", "tags": [], "type": "prg" }, { "content": "Prawidªowe tworzenie rozkazów asemblerowych dla Maszyny W cz.21452.6. Bª¡d zwi¡zany z zamian¡ ±cie»ek instrukcji `JE»ELI'.Omówienie zagadnienia:Warunkowa instrukcja JE»ELI zawiera dwie alternatywne ±cie»ki rozwi¡za«. Czasami zdarza si¦ po-myªka interpretacji, która ±cie»ka kiedy jest wykonywana (przy speªnieniu którego warunku). Dotyczyto zarówno sprawdzania sygnaªu Z (warto±¢ ujemna lub nieujemna) jak i sygnaªu ZAK (warto±¢ zerolub nie zero). Przy tego typu zadaniach nale»y upewni¢ si¦, czy przy danym warunku, wykonywana jestodpowiednia ±cie»ka operacji.Bª¦dny przykªad 6.1 (Mniejsz¡ z dwóch warto±ci nale»y umie±ci¢ w rejestrze akumulatora. Pierwszaz tych dwóch warto±ci znajduje si¦ w rejestrze AK, natomiast druga warto±¢ w rejestrze AD):// min{ (AK), (AD) } →AKROZKAZ JS-J;czyt wys wei il;wyad sa wes weja ode weakJE»ELI z TO @wieksza GDY NIE @mniejsza;@wieksza wys weja przep weak wyl wea KONIEC; // bª¡d@mniejsza wys weja dod weak wyl wea; // bª¡dW tym bª¦dnym przykªadzie operacje przepisania (przep) oraz dodawania (dod) s¡ wykonane przyodwrotnych warunkach, w trakcie innej - tej drugiej ±cie»ki wykonania instrukcji JE»ELI. W wynikuczego zamiast rozkazu wyznaczaj¡cego minimum, otrzymamy rozkaz wyznaczaj¡cy maksimum.W rozwi¡zaniu prawidªowym, dziaªanie przepisania jest wykonane w ±cie»ce oznaczonej etyki¡@mniejsza zamiast @wieksza, natomiast dziaªanie dodawania - odwrotnie.Prawidªowe rozwi¡zanie 6.1:// min{ (AK), (AD) } →AKROZKAZ JS-J;czyt wys wei il;wyad sa wes weja ode weakJE»ELI z TO @wieksza GDY NIE @mniejsza;@wieksza wys weja dod weak wyl wea KONIEC;@mniejsza wys weja przep weak wyl wea;Bª¦dny przykªad 6.2 (Je»eli warto±¢ znajduj¡ca si¦ w akumulatorze jest równa zero, wtedy po-cz¡tkow¡ warto±¢ licznika nale»y zwi¦kszy¢ o warto±¢ trzy, w przeciwnej sytuacji warto±¢ licznika nale»yzwi¦kszy¢ o warto±¢ jeden):// if (AK) = 0 then (L) + 3 →L else (L) + 1 →LROZKAZ JS-D;czyt wys wei il;JE»ELI zak TO @jeden GDY NIE @trzy; // bª¡d@trzy il;il DALEJ @jeden;146R. Brzeski@jeden wyl wea;W tym bª¦dnym przykªadzie zamieniony zostaª warunek wykonania poszczególnych ±cie»ek instrukcjiJE»ELI.W prawidªowym rozwi¡zaniu etykiety poszczególnych ±cie»ek przy instrukcji JE»ELI s¡ umieszczoneodwrotnie, co spowoduje poprawne wykonanie tego rozkazu: gdy warto±¢ znajduj¡ca si¦ w akumula-torze jest równa zero, nale»y pomin¡¢ realizacj¦ dwóch nast¦pnych rozkazów zapisanych w programie,a w przeciwnej sytuacji przej¡¢ do realizacji kolejnego rozkazu programu.Prawidªowe rozwi¡zanie 6.2:// if (AK) = 0 then (L) + 3 →L else (L) + 1 →LROZKAZ JS-D;czyt wys wei il;JE»ELI zak TO @trzy GDY NIE @jeden;@trzy il;il DALEJ @jeden;@jeden wyl wea;", "source": "C-20-008.pdf", "tags": [], "type": "prg" }, { "content": "2.7. Bª¡d zwi¡zany z prób¡ umieszczania w liczniku warto±ci ujemnej.Omówienie zagadnienia:W zwi¡zku ze sposobem zapisu liczb ujemnych w trybie dopeªnieniowym do 2, stosowanym typowow maszynach cyfrowych, w liczniku nie mo»na przechowywa¢ warto±ci ujemnych. W Maszynie W przesªa-nie warto±ci ujemnej do licznika, powoduje uzyskanie w liczniku innej warto±ci dodatniej. Zdecydowanienie nale»y wykonywa¢ takiej operacji.Bª¦dny przykªad 7.1 (Podwójn¡ warto±¢ rejestru AD zdekrementowa¢ o jeden i taki wynik umie±ci¢w liczniku. Dodatkowe zaªo»enie: warto±¢ akumulatora nie musi by¢ zachowana):// 2*(AD) - 1 →LROZKAZ JSI-J;czyt wys wei il;wyl sa weja przep weak il;wyl sa weja ode weak;wyak sa wel; // bª¡d - w tym momencie nast¡pi zmiana warto±ci z minus 1 na warto±¢// maksymaln¡ dodatni¡ mo»liw¡ do przechowania w licznikuwyad sa weja przep weak;wyak weja dod weak;wyl was weja ode weak;wyak sa wel wea;W bª¦dnym przykªadzie niepotrzebnie utworzono warto±¢ minus jeden. Warto±¢ ta w akumulatorzekodowana jest standardowo na 8 bitach, natomiast po przesªaniu jej do licznika (poprzez magistral¦adresow¡, która jest w¦»sza od magistrali danych) otrzymujemy standardowo warto±¢ 5-bitow¡ z obci¦tymiPrawidªowe tworzenie rozkazów asemblerowych dla Maszyny W cz.2147trzema najbardziej znacz¡cymi bitami. Zagadnienie problemu przesyªów mi¦dzy magistralami MaszynyW i utrata bitów jest dokªadniej opisana w [2] (str.6-7).W prawidªowym rozwi¡zaniu najpierw uzyskano podwojon¡ warto±¢ rejestru AD, a dopiero w nast¦p-nym kroku zmniejszono t¦ warto±¢ o jeden. Zmniejszenie warto±ci o jeden zrealizowano analogicznie jakw przykªadzie 4.2Prawidªowe rozwi¡zanie 7.1:// 2*(AD) - 1 →LROZKAZ JSI-J;czyt wys wei il;wyad sa weja przep weak;wyak weja dod weak;wyl sa weja dod weak il;wyl sa weja ode weak;wyak sa wel wea;3. Wnioski ko«coweRealizuj¡c zadanie utworzenia rozkazu, czyli znalezienia odpowiedniego algorytmu i jego implementa-cji, mo»na popeªni¢ wiele ró»nych bª¦dów. Wynikaj¡ one najcz¦±ciej z braku jakiego± elementu wiedzy, aleczasami tak»e s¡ skutkiem zastosowania nieodpowiedniego algorytmu lub zwykªej pomyªki. Aby uªatwi¢,zarówno unikanie tych bª¦dów jak i znalezienie prawidªowych rozwi¡za«, mo»na utworzy¢ list¦ bª¦dówmaj¡cych miejsce podczas tworzenia rozkazu:1. Brak zrozumienia liczby nawiasów wokóª rejestru - nale»y w peªni rozumie¢ zapis tre±ci rozkazuw postaci nawiasowej.2. Niezrozumienie lub zbytnie uproszczenie tre±ci zadania - nale»y dokªadnie przeczyta¢ i przeanali-zowa¢ tre±¢ zadania.3. Mylenie rejestru AD z rejestrem A - s¡ to zupeªnie inne, osobne rejestry.4. Nieuprawnione korzystanie z pami¦ci (zapis, odczyt) - je»eli w tre±ci zadania nie ma takiego pole-cenia, to nie mo»na korzysta¢ z pami¦ci.5. Nieprawidªowy wybór architektury Maszyny W - zadania nale»y wykona¢ na takiej architektu-rze na jak¡ zostaªo to zlecone. Je»eli nie ma jawnej informacji o wyborze architektury, to nale»yzaimplementowa¢ rozkaz w na tyle prostej architekturze na ile to mo»liwe.6. Zamiana ±cie»ek instrukcji `JE»ELI' - nale»y upewni¢ si¦, czy przy danym warunku, wykonywanajest odpowiednia ±cie»ka operacji.7. Bª¡d zwi¡zany z przesyªaniem do licznika warto±ci ujemnej - w liczniku nie mo»na umieszcza¢warto±ci ujemnych.", "source": "C-20-008.pdf", "tags": [], "type": "prg" }, { "content": "148R. BrzeskiArtykuª ten, w szczególno±ci dla studentów, mo»e by¢ nie tylko materiaªem pomocnym przy realizacjiotrzymanych zada« i rozwi¡zywaniu potencjalnych problemów, ale tak»e, przy odpowiednim opanowaniuzawartych tu wskazówek, pozwala tych problemów unikn¡¢. Stanowi tak»e dobre narz¦dzie dla studentówdo sprawdzenia stopnia opanowania umiej¦tno±ci praktycznych i prawidªowej implementacji rozkazów.Podzi¦kowaniaAutor pragnie podzi¦kowa¢ recenzentom za trud wªo»ony w recenzje.Literatura1. A. Momot, R. Tutajewicz, Maszyna W - jak zaprojektowa¢ prosty rozkaz, MINUT 2019 (1), s. 24-35ISSN 2719-3063.2. A. Momot, Projektowanie rozkazów dla maszyny W - konspekt ¢wicze« laboratoryjnych , MINUT2020 (2), s. 1-11 ISSN 2719-3063.3. M. Chªopek, R. Tutajewicz, Wykªady z Podstaw Informatyki profesora Stefana W¦grzyna, Skryptuczelniany Politechniki ‘l¡skiej nr 2062. Wydawnictwo Politechniki ‘l¡skiej, Gliwice, 1997.4. K. Grochla, G. Hry«, S. Iwaszenko, P. Kasprzyk, J. Kubica, M. Widera, T. Wróbel, Wykªady z Pod-staw Informatyki profesora Stefana W¦grzyna, Skrypt uczelniany Politechniki ‘l¡skiej nr 2321. Wy-dawnictwo Politechniki ‘l¡skiej, Gliwice, 2003.5. S. W¦grzyn, Podstawy informatyki, PWN, Warszawa, 1982.6. R. Brzeski, Prawidªowe tworzenie rozkazów asemblerowych dla Maszyny W cz.1, MINUT 2020 (2),s. 124-135 ISSN 2719-3063.", "source": "C-20-008.pdf", "tags": [], "type": "prg" }, { "content": "1 Faculty of Automatic Control, Electronics and Computer Science Informatics, 1st cycle of higher education, semester 1 Programming in assembler language Programming in assembler language is not much different from programming in high-level languages. The main difference is the need to use a much poorer set of instructions. In assembler languages, for example, there are no structural instructions or instructions that allow you to easily describe the calculation of an arithmetic expression. However, anything you can write in high-level languages can certainly be expressed using assembler instructions. You can also do many things that are impossible to easily formulate in high-level languages. A programmer writing in assembler language has full control over what is happening during calculations in the processor. It is also not limited by various rules in high-level languages. However, full control and no restrictions mean also full responsibility for the written program. When writing a program in assembler language, we use almost exclusively the instructions corresponding to the instructions of a given processor. Therefore, it is necessary to know these instructions, as well as familiarize yourself with the architecture of the processor. The assembler language program consists of instructions and data on which these instructions operate. The program is a sequence of successive lines, in each line there may be one instruction statement or a single data declaration. Formally, the syntax of the program line is as follows: [