SPRAWKO ASK, WAT, SEMESTR I, AOK, LAB


0x01 graphic

Wojskowa Akademia Techniczna

im. Jarosława Dąbrowskiego

Laboratorium

Architektury Systemów Komputerowych

Prowadzący mgr inż. Artur Miktus

Sprawozdanie z ćwiczenia laboratoryjnego

Wykonał: Arkadiusz Prymek

Grupa: I7X3S1

Treść zadania

1.    na ocenę „dostatecznie”: zaprojektować (algorytm, opis) i zaimplementować program p1, który::

a.      Wypisze komunikat „Uruchomiono program p1.” i przeniesie kursor do nowego wiersza.

b.     Wypisze komunikat „Autorem programu jest ... z grupy …”  (gdzie miejsca … należy wypełnić danymi autora programu) i przeniesie kursor do nowego wiersza.

c.     Wypisze komunikat „Jesli chcesz zakonczyc prace tej czesci programu, nacisnij A spacja Z”. (Bez przenoszenia kursora do nowego wiersza).

  1. Wczyta tekst z klawiatury. Jeśli wprowadzony tekst to znak „A Z” (i oczywiście Enter), program, zakończy się, jeśli naciśnięto inny klawisz (np. sam Enter) lub sekwencję klawiszy (np. Xx), powtórnie wypisze komunikat z punktu 1c.

Rozwiązanie:

Zadanie polegało na wypisaniu odpowiednich komunikatów które zostały

wyświetlone na ekran za pomocą rejestru r14 oraz trap 5.

Następnie należało sprawdzić poprawność wczytanego ciągu znaków. W pierwszej kolejności wczytujemy dane za pomocą trap 3, a następnie wczytujemy dane do r2. Z rejestru r2 znaki czytamy pierwszy znak za pomocą rozkazu lb r3,(r2), sprawdzamy czy ten znak to „A” jeżeli nie, to prosimy użytkownika o ponowne wpisanie ciągu znaków. Lecz jeżeli pierwszą literą jest „A” za pomocą addi r2,r2,2 przechodzimy do 3 znaku z ciągu i ładujemy go do r3 za pomocą rozkazu lb r3,(r2) a następnie porównujemy z kodem znaku „Z” jeżeli jest nie poprawny zaczynamy wczytywanie ciągu od początku. W Przeciwnym wypadku sprawdzamy czy kolejny znak to „Enter” jezelu tak kończymy prace programu, jeżeli nie zaczynamy wszystko od początku.

W programie pomineliśmy sprawdzanie drugiego znaku z ciągu ponieważ on mogłbyć dowolnym znakiem.

2.     na ocenę „dobrze”: na podstawie biblioteki input.s zaprojektować (algorytm, opis) i zaimplementować dla komputera WinDLX moduł we_1.s, zawierający procedurę czytaj, która będzie wykonywać poprawne wczytywanie liczby całkowitej, ewentualnie poprzedzonej znakiem „+” lub „ - „. Zaprojektować (algorytm, opis) i zaimplementować program L6_1, który:

a.      przy wykorzystaniu procedury czytaj wypisze komunikat „Pierwsza liczbe calkowita (może być ze znakiem) === „ i wczyta pierwszą z 5 liczb całkowitych jako danych wejściowych do programu.

b.     Kolejno wypisze komunikat jak w punkcie 2b, po słowie „Podaj” zwiększając kolejno numer wczytywanej liczby całkowitej i wczyta przy wykorzystaniu procedury czytaj kolejne 3 liczby całkowite ze znakiem. Wczytane liczby mają być przechowane w zmiennych typu .word o nazwach licz1, licz2 ... licz5 (uwaga: nie w rejestrach GPR). Wartości liczb zostaną na zajęciach podane przez prowadzącego.

  1. Student samodzielnie przygotuje pokaz uruchomienia programu z ustawieniem breakpointa tak, aby w okienku podglądu zawartości pamięci operacyjnej można było sprawdzić, czy wczytane liczby rzeczywiście są poprawnie wczytane, przekonwertowane i zapamiętane.

3.     na ocenę „dobrze +” wykona to, co w punkcie 2, a ponadto

a.      Wyszuka wśród wczytanych liczb liczbę najmniejszą min i największą max i , oraz wypisze te liczby z komunikatami: „Min wsrod wprowadzonych liczb bylo=”i odpowiednio „Max wsrod wprowadzonych liczb bylo=”

Rozwiązanie:

Zadanie polegało na wczytaniu 5 liczb za pomocą procedury „Czytaj” a następnie wyszukanie z tych liczb min i max.

Wczytywanie liczb polegało na wypisaniu komunikatu „Podaj ..... liczbe calkowita (może być ze znakiem) === „ a następnie wywoływana zostawała procedura czytaj z pliku we_1.s za pomocą skoku „jal” czyli jump and link, z adresem powrotu w R31.

Procedura „Czytaj”

W procedurze czytaj wywoływany jest trap3 do wczytania liczby,

Poźniej ładujemy ją do rejestru r20 gdzie nasza liczba będzie przechowywana.

Na samym początku sprawdzamy czy pierwszy znak to odpowiednio Enter, „-” lub „+” jeżeli enter to wychodzimy z procedury czytaj. Jeżeli jest to znak „-” lub „+” ustawiamy odpowiedni rejestr na „1” i dodajemy do r20 tą „1” aby przejść do kolejnego znaku. Następnie znowu sprawdzamy czy kolejny znak to Enter jeżeli nie przechodzimy do „wyłuskiwania” liczby gdyż znaki wczytujemy pojedyńczo a wiec odczytujemy kody ASCII.

Algorytm wyłuskiwania :

petla:

lbu r24,0(r20)

seqi r25,r24,10 ; sprawdza czy ENTER (LF)

bnez r25,koniec

subi r24,r24,48 ;odejmij '0'

multu r21,r21,r27 ; mnoz przez 10

add r21,r21,r24 ;dodaj wartość róznicy kodów ASCII

addi r20,r20,1 ;inkrementacja miejsca czytania znaku

j petla

Przykład liczby „1234LF”

Liczba kod ASCII

„0” = 48

„1” = 49

„2” = 50

„3” = 51

„4” = 51

Wczytujemy pierwszy znak czyli „1” w kodzie ASCII „49” musimy odjać od „0” czyli „48” następnie mnożymy przez 10, pobieramy kolejny znak i dodajemy do poprzedniego wyniku i tak, aż do napotkania Entera

Realizacja:

„1” 49-48=1 1x10=10

„2” 50-48=2 2+10=12 12*10=120

„3” 51-48=3 120+3=123 123*10=1230

„4” 52-48=4 1230+4=1234

Następnie sprawdzamy czy liczba była ze znakiem „-” jeżeli tak to odejmujemy tą liczbę od 0 a jeżeli nie wracamy do programy L6_1.s za pomocą

jr r31poniewaz w r31 zapisany był adres powrotu. Pobieramy tak kolejno 5 liczb i ostatnią wpisujemy do rejestrów r2 oraz r3 jako liczba min i max. Porównujemy z nią pierwszą liczbę czy jest mniejsza za pomocą rozkazu „slt” czyli Set least : czy mniejszy. Jeżeli tak to wpisujemy ją do rejestru r2 jako najmniejszą a jeżeli nie jest mniejsza sprawdzamy czy jest większa od max za pomocą rozkazu „sgt” Set greater czy wiekszy. Jeżeli tak wpisujemy tą liczbe jako maksimum jeżeli nie to wczytujemy kolejna liczbę i ją porównujemy z min i max. Gdy porównamy już wszystkie liczby zapisujemy wartoścu rejestrów r2 i r3 odpowiednio do zmiennych min i max. Wypisujemy liczby przez

addi r14,r0,wyswietlMinMax trap 5. w kolejności z jaką deklarowalismy zmienne min i max.

Forwading

0x01 graphic

0x01 graphic

Właczony forwarding

0x01 graphic

Wyłączony forwarding

Przy wyłączonym forwardingu cykli było 429, dzieki właczeniu forwardingu zostało liczba zmiejszyła się do 334 cykli.

429-334=95 cykli róznicy miedzy fowardingiem

Przy wyłączonym forwardingu hazardów typu RAW było 169, dzieki właczeniu forwardingu zostało 95 hazadrów danych typu RAW wyeliminowane zostało 74 hazadrdy danych typu RAW.

Patrząc na statystyki najwiecej czasu zajmuje mnozenie, oraz skoki, ponieważ hazardy danych w nich najtrudniej wyeliminować dlatego mimo, iż zostało wyeliminowane 74 hazardy to ilość cykli zmniejszyła się o 95.



Wyszukiwarka

Podobne podstrony:
WDA Lab2 Sprawko ask, WAT, semestr III, Wprowadzenie do automatyki
zadanie laboratoryjne 3-4 godzina, WAT, SEMESTR I, AOK, LAB
WDA Lab4 Sprawko ask, WAT, semestr III, Wprowadzenie do automatyki
zadanie laboratoryjne 5-6 godzina, WAT, SEMESTR I, AOK, LAB
WDA Lab5 Sprawko ask, WAT, semestr III, Wprowadzenie do automatyki
Sprawko M.W, Polibuda, II semestr, to lab
wda sprawko nr4, WAT, SEMESTR II, WDA
sprawko BD, WAT, semestr III, Bazy danych
Sprawko swb, WAT, semestr IV, Systemy wbudowane
W2K3-15-raport, WAT, SEMESTR VII, Systemy operacyjne windows, Systemy operacyjne windows, sow, W2K3-
Szablon 05, WAT, SEMESTR VI, podstawy zabezpieczeń sieci, lab
WDA LAB 3, WAT, semestr III, Wprowadzenie do automatyki
Szablon 03, WAT, SEMESTR VI, podstawy zabezpieczeń sieci, lab
sprawko ćw2, Szkoła, Semestr 4, Podstawy elektroniki, Bart, Podstawy Elektroniki LAB, Podstawy Elekt
1 lab TIUM, Elektronika i telekomunikacja WAT, Semestr V, TIUM, Laboratorium
PA lab cw4, WAT, SEMESTR II, WDA, Wstep do Automatyki-matlab, mathlab
WDA Lab3 Sprawko, WAT, semestr III, Wprowadzenie do automatyki
sprawko Ziegler-Nikols, Mechatronika WAT, Semest IV, Teoria sterowania, Laboratorium, Sprawka, Obser
ćw 26 - sprawko moje, Szkoła, Semestr 4, Podstawy elektroniki, Bart, Podstawy Elektroniki LAB, Podst

więcej podobnych podstron