L1 I1X7S1 11

background image

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-14

background image

I ROZKAZY PRZESŁAŃ

1.

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

a) 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.

b) 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

2.

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

a) 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.

background image

b) 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.

a) 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.

b) 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

background image

2. 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:

.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ę.








background image

III Rozkazy skoków

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

a) Kod programu:


.data

.text

trap 0


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

b) 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.

2. 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.

a) 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.

background image

b) 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.

a) 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.

b) Kod programu:


.data
Liczba1: .word 56
Liczba2: .float 23.23

.text
lw r8, liczba1
lf f9, liczba2
addf f10, f9, r8

background image


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.

2. 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.

a) 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.

b) 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..

background image





Wyszukiwarka

Podobne podstrony:
pato v1 1 11 mod by L1
Zarz[1] finan przeds 11 analiza wskaz
11 Siłowniki
11 BIOCHEMIA horyzontalny transfer genów
PKM NOWY W T II 11
wyklad 11
R1 11
CALC1 L 11 12 Differenial Equations
Prezentacje, Spostrzeganie ludzi 27 11
zaaw wyk ad5a 11 12
budzet ue 11 12
EP(11)
W 11 Leki działające pobudzająco na ośrodkowy układ
Zawal serca 20 11 2011
11 Resusc 2id 12604 ppt
11 pomiay dlugosci tasma

więcej podobnych podstron