moje


WOJSKOWA AKADEMIA TECHNICZNA

Architektura i organizacja komputerów II

Sprawozdanie z pracy laboratoryjnej nr. 1

Grupa: I1X7S1

Wykonał: KOZICKI ADAM

Nr 11

Data: 2012-04-14I ROZKAZY PRZESŁAŃ

  1. Rozkaz LF ładuje z pamięci liczbę typu float.

0x08 graphic

  1. Kod programu:

.data

liczba: .float 99

.text

lf f10, liczba

trap 0

Wartośc 99 została pomyślnie załadowana do rejestru f10. Widac to na załączonym wyżej obrazku.

  1. Kod programu:

.data

wartosc: .word 300

.text

lf f10, wartosc

trap 0

Nie można załadować wartości typu word do rejestru typu float dlatego wynik tego programu to nadal liczba 0 w rejestrze f10

  1. Rozkaz LW przesła jedno słowo (32 bity) z pamięci do rejestru.

  1. Kod programu:

.data

liczba_1: .word 36

.text

lw r8, liczba_1

trap 0

Zgodnie z planem nastąpiła zmiana awartości rejestru r8 na 36. Liczba 36 mieści się na 32 bitach.

  1. Kod programu:

.data

liczba_2: .word 80

.text

lw r0, liczba_2

trap 0

Wynik jest różny od spodziewanego. W rejestrze r0 nie zostanie zapisana wartość 80, ponieważ rejestr r0 zawiera stałą wartość 0, która nie ulega zmianie.

II ROZAZY ARYTMETYCZNE I LOGICZNE

  1. Rozkaz ADDI dodaje do wartości rejestru liczbę podaną w rozkazie i zapisuje wynik w rejestrze.

  1. 0x08 graphic
    Kod programu:

.data

wartosc: .word 19

.text

lw r4, wartosc

addi r10, r4, 21

trap 0

Po wykonaniu tego programu wartość 40 jest zgodnie z oczekiwaniami zapisana w rejestrze r10. Tak też się dzieje, ponieważ wartości wpisane są poprawnie i program może się wykonać poprawnie. Wynik programu dostrzegamy na załączonym obrazku.

  1. Kod programu:

.data

liczba_10: .word 5

.text

lw r2, liczba_10

addi r3, r2, liczba_10

trap 0

Wbrew pozorom wynikiem tego programu nie będzie wartość 10 w rejestrze r3. Rozkaz ADDI w tym wypadku nie pobiera wartości komórki `liczba_10', wykorzystuje za to adres tej komórki jako argument. Adres ten wynosi 1000h

  1. Rozkaz SUB odejmuje wartość rejestru od drugiego i wynik zapisuje w rejestrze zapisanym jako pierwszy argument.

a)

Kod programu:

.data

Liczba_1: .word 80

liczba_2: .word 40

.text

lw r7, liczba_1

lw r8, liczba_2

sub r9, r7, r8

trap 0

Według przewidywań wynikiem programu jest zapisanie w rejestrze r9 wartości 40. Jest to poprawne, ponieważ rozkaz wykonał odejmowanie 80-40=40, co jest poprawne.

b)

Kod programu:

0x08 graphic

.data

Liczba1: .word -2147483647

Liczba2: .word 2147483647

.text

lw r5, liczba1

lw r6, liczba2

sub r3, r5, r6

trap 0

Tym razem w rejestrze r3 spodziewamy się wyniku:

-4294967294, co jest naturalnym wynikiem działania -2147483647-2147483647. Jednak wartość w rejestrze r3 wynosi 2. Wartość ta wynika z braku odpowiedniej liczby bitów aby zapisać tak dużą ujemną liczbę.

III Rozkazy skoków

  1. Rozkaz TRAP powoduje przesłanie sterowania do systemu.

  1. Kod programu:

.data

.text

trap 0

Program wykonał się poprawnie i poprawnie zadziałał rozkaz TRAP, zakańczając wykonywanie się programu.

  1. Kod programu:

.data

.text

trap 87.666

W programie tym wystąpił błąd ponieważ TRAP nie przyjmuje takich wartości i odrzuca je. Program ten będzie się więc wykonywał dopóki nie skończy się pamięć systemie.

  1. Rozkaz BEQZ przyrównuje wartość pierwszego argumentu do 0, jeżeli ten warunek jest spełniony i pierwszy argument rozkazu równy jest zero to program ustawia licznik rozkazów na adres etykiety ustawionej jako drugi argument rozkazu BEQZ.

  1. Kod programu:

.data

liczba1: .word 0

liczba2: .word 28

liczba3: .word 15

.text

lw r3, liczba1

lw r4, liczba2

lw r5, liczba3

beqz r3, omin

addi r5, r3, r4

omin:

trap 0

Rozkaz BEQZ ma nam pominąć rozkaz ADDI i zakończyć program tylko po wczytaniu danych do rejestru. Tak też się stało ponieważ wartość rejestru r3 wynosi 0. Rezultat oczekiwany pokrył się więc z rezultatem osiągniętym.

  1. Kod programu:

.data

liczba1: .word 6

liczba2: .word 23

liczba3: .word 9

.text

lw r2, liczba1

lw r4, liczba2

lw r6, liczba3

beqz r2, omin

addi r8, r2, r4

omin:

trap 0

Spodziewany wynik jest taki, że rejestr r8 pozostanie równy 0. Jednak rozkaz skoku BEQZ jest nieefektywny co jest spowodowane wartością niezerową w rejestrze r2. A więc rezultat jest inny od wartości oczekiwanej i w rejestrze r8 zapisana została wartość 29, co jest zgodne z wynikiem dodawania 6 i 23.

IV. Rozkazy zmiennoprzecinkowe

  1. Rozkaz ADDF dodaje do siebie dwie liczby typu float zapisane w rejestrach i zapisuje wynik będący pierwszym argumentem rozkazu.

  1. Kod programu:

.data

liczba1: .float 22.22

liczba2: .float 33.33

.text

lf f1, liczba1

lf f2, liczba2

addf f3, f2, f1

trap 0

Program ten da nam w wyniku wartość 55.55 zapisaną w rejestrze f3, ponieważ jest to dobry wynik dodawania 22.22 + 33.33. Oczekiwana wartość pokryła się z rezultatem.

  1. Kod programu:

.data

Liczba1: .word 56

Liczba2: .float 23.23

.text

lw r8, liczba1

lf f9, liczba2

addf f10, f9, r8

trap 0

Tym razem spodziewalibyśmy się wartości 79,23 w rejestrze f10. To nie jest prawda, gdyż rozkaz ADDF nie przetwarza argumentów nie będących w formacie float a więc i zapisanch w rejestrach r. Rozkaz ten zwróci błąd i wartość f10 pozostanie 0.

  1. Rozkaz LTF porównuje wartości rejestrów podanych do rozkazu jako argumenty. Sprawdza czy pierwszy jest mniejszy od drugiego. Jeżeli tak to ustawia rejestr FPSR na 1.

  1. Kod programu:

.data

liczba1: .float 22.22

liczba2: .float 33.33

.text

lf f1, liczba1

lf f2, liczba2

ltf f2, f1

trap 0

Program ten porównuje liczbę 22.22 i 33.33 Pierwsza jest mniejsza od drugiej więc spodziewamy się ustawienie rejestru FPSR na 1. Co też następuje. A więc mamy wynik zgodny z oczekiwaniami.

  1. Kod programu:

.data

Liczba1: .float 89.99

liczba2: .float 23.54

.text

lf f1, liczba1

lf f2, liczba2

ltf f3, f1

trap 0

Ten program także działa zgodnie z oczekiwaniami ponieważ liczba 89.99 jest większa od liczby 23.54. A więc rejestr FPSR równa się 0.

Wnioski:

Gdy piszemy programy musimy pamiętać o możliwości przekroczenia liczby mieszczącej się w danym rejestrze co może prowadzić do złych wyników albo do nie otrzymania ich wcale. Należy także podawać właściwe argumenty do rozkazów, ponieważ grozi to nie wykonaniem się rozkazu. Trzeba również podawac właściwe formaty zmiennych..



Wyszukiwarka

Podobne podstrony:
Podtopienie moje
Praktyczna Nauka Języka Rosyjskiego Moje notatki (leksyka)2
Praktyczna Nauka Języka Rosyjskiego Moje notatki (gramatyka)4
10050110310307443 moje
macierze moje i rzad id 275988 Nieznany
Moje dziecko rysuje Rozwój twórczości plastycznej dziecka od urodzenia do końca 6 roku życia
Praktyczna Nauka Języka Rosyjskiego Moje notatki (leksyka)35
Gdzie sie podzialo moje dziecinstwo
Przedsiebi, inżynieria ochrony środowiska kalisz, z mix inżynieria środowiska moje z ioś pwsz kalis
PKM, Politechnika Lubelska, Studia, Studia, organizacja produkcji, laborki-moje, od majka, SPRAWOZDA
Ramka(115), MOJE RAMKI GOTOWE ZBIERANA Z INNYCH CHOMICZKOW
BLOOG, ● Wiersze moje ♥♥♥ for Free, ☆☆☆Filozofia, refleksja, etc
SPRAWOZDANIE Z farmako, Farmacja, II rok farmacji, I semstr, fizyczna, Fizyczna, Sprawozdania z fizy
Pokaż mi swój obraz, ● Wiersze moje ♥♥♥ for Free, ☆☆☆Filozofia, refleksja, etc
MOJE 3ok, Budownictwo UZ sem. III
KODY SERWISOWE NOKIA by asrock11, Moje Prace
Ramka z kwiatami w kolorze brązu, MOJE RAMKI GOTOWE ZBIERANA Z INNYCH CHOMICZKOW

więcej podobnych podstron