You are on page 1of 8

Architektura Systemów Komputerowych

Laboratorium

Sprawozdanie
Ćw. Nr. Temat: Data zajęć:
3 Operacje arytmetyczne -
Prowadzący:
-
Student: Nr. Albumu: Kierunek:
- - -

Zadania wykonywane w laboratoriach:

Zadanie 1.
Wykonaj dodawanie liczb binarnych:
0111 + 0010 = 1001

10110001 + 10110111 = 101101000

11000001 + 1101110011100001 = 1101110110100010


Zadanie 2.
Zamień postać dziesiętną na liczbę w zapisie dwójkowym, wykonaj dodawanie. Utwórz wynik
jako liczbę 16-bitową (2 bajty), wykorzystaj znacznik C (informację o przeniesieniu):

123(10) + 51(10) = 1111011(2) + 110011(2) = 0101110(2) C = 1


Na 16 bitach z wykorzystaniem znacznika C:
0000000010101110(2)

210(10) + 51(10) = 11010010(2) + 110011(2) = 00000101(2) C = 1


Na 16 bitach z wykorzystaniem znacznika C:
0000000100000101(2)

128(10) + 128(10) = 10000000(2) + 10000000(2) = 00000000(2) C = 1


Na 16 bitach z wykorzystaniem znacznika C:
0000000100000000(2)

Zadanie 3.
Zamień na postać binarną i wykonaj odejmowanie:
7(10) – 5(10) = 111(2) – 101(2) = 111(2) + (NOT 101(2) + 1(2)) = 111(2) + 011(2) = 010(2) C = 1
65(10) – 34(10) = 1000001(2) – 0100010(2) = 1000001(2) + (NOT 0100010(2) + 1(2)) =
= 1000001(2) + 1011110(2) = 0011111(2) C = 1

255(10) – 242(10) = 11111111(2) – 11110010(2) = 11111111(2) + (NOT 11110010(2) + 1(2)) =


= 11111111(2) + 00001110(2) = 00001101(2) C = 1

Zadanie 4.
Oblicz sumę modulo 2 dla C = 0 i bn = 1.
V = 𝐶 ⊕ 𝑏𝑛 = 𝐶̅ ⋅ 𝑏𝑛 v 𝐶 ⋅ ̅̅̅
𝑏𝑛 = 1 * 1 lub 0 * 0 = 1
Przekroczenie zakresu.

Oblicz sumę modulo 2 dla C = 1 i bn = 1.


V = 𝐶 ⊕ 𝑏𝑛 = 𝐶̅ ⋅ 𝑏𝑛 v 𝐶 ⋅ ̅̅̅
𝑏𝑛 = 0 * 1 lub 1 * 0 = 0
Nie ma przekroczenia zakresu.

Zadanie 5.
Wykonaj mnożenie i dzielenie liczb zapisanych w kodzie U2:
2(10)*50(10) = 00110010(U2)  01100100(U2) = 100(10)

4(10)*(-50) (10) = 11001110(U2)   00111000(U2) C = 1


Przekroczenie zakresu.
Zapisując wynik jako słowo 9cio bitowe otrzymamy poprawny wynik:
100111000(U2) = -200(10)

111(10) : 2(10) = 01101111(U2) → 00110111(U2) = 55(10)


Prawidłowy wynik nie jest liczbą całkowitą.

-30(10) : 4(10) = 11100010(U2) →→11111000(U2)


Następnie uzupełniamy najbardziej znaczący bit do 1
11111000(U2) = -8(10)
Prawidłowy wynik nie jest liczbą całkowitą.
Zadania do samodzielnej realizacji
Zadanie 1.
Wyodrębnij dwie ostatnie cyfry swojego numeru indeksu i uzyskaną liczbę (L) zapisz w kodzie
binarnym na 8-bitach. Zasymuluj "działanie" procesora wykonującego następujący program:
- krok 1: przesuń kolejno bity o jedną pozycję w lewo (na pozycji najmłodszego bitu wpisz 0,
wartość najstarszego bitu przesuń do znacznika C (carry))
- krok 2: od tak otrzymanego wyniku odejmij liczbę L (pamiętaj w jaki sposób wykonywana
jest operacja odejmowania)
- krok 3: następnie wykonaj negację bitową otrzymanego wyniku odejmowania
- krok 4: wykonaj inkrementację
- krok 5: do tak otrzymanego wyniku dodaj pierwotną wartość liczby L.
Po wykonaniu ostatniego rozkazu (krok 5) ustaw odpowiednio wartości znaczników C, V, Z.

Numer indeksu: 130566


Ostatnie dwie cyfry: 66
L = 01000010(2)

Krok 1:
01000010  10000100 C=0

Krok 2:
10000100 – L = 10000100 + 10111110 = 01000010 C = 1

C = 1 bn = 0
V = 𝐶 ⊕ 𝑏𝑛 = 𝐶̅ ⋅ 𝑏𝑛 v 𝐶 ⋅ ̅̅̅
𝑏𝑛 = 0 * 0 lub 1 * 1 = 1

Krok 3:
NOT 01000010 = 10111101

Krok 4:
10111101 + 1 = 10111110

Krok 5:
10111110 + 01000010 = 00000000 C = 1 Z = 0
C=1
V=1
Z=0

Zadanie 2.
Poleceniem ping put.poznan.pl sprawdź jakość sieciowego połączenia twojego komputera ze
stroną Politechniki Poznańskiej. Znajdź informację o szacunkowym maksymalnym czasie
błądzenia pakietów, przyjmij tę wartość (pomijamy ms) jako liczbę ujemną i zapisz w kodzie
U2.

Max 18ms
18(10) = 00010010(U2)

L = 00010010(U2)

Na tak otrzymanej liczbie (L) wykonaj następujące działania:


- krok 1: przesuń kolejno bity o jedną pozycję w lewo (na pozycji najmłodszego bitu wpisz 0,
wartość najstarszego bitu przesuń do znacznika C (carry))
- krok 2: do otrzymanego wyniku dodaj negację liczby L
- krok 3: od tak otrzymanego wyniku odejmij liczbę L.
Po wykonaniu ostatniego rozkazu (krok 3) ustaw odpowiednio wartości znaczników C, V , Z.

Krok 1:
00010010(U2)  00100100(U2)
C=0

Krok 2:
00100100(U2) + NOT 00010010(U2) = 00100100(U2) + 11101101(U2) = 00010001(U2) C = 1

C = 1 bn = 0
V = 𝐶 ⊕ 𝑏𝑛 = 𝐶̅ ⋅ 𝑏𝑛 v 𝐶 ⋅ ̅̅̅
𝑏𝑛 = 0 * 0 lub 1 * 1 = 1
Przekroczenie zakresu

Krok 3:
00010001(U2) – 00010010(U2) = 00010001(U2) + 11101110(U2) = 11111111(U2)

C = 0 bn = 1
V = 𝐶 ⊕ 𝑏𝑛 = 𝐶̅ ⋅ 𝑏𝑛 v 𝐶 ⋅ ̅̅̅
𝑏𝑛 = 1 * 1 lub 0 * 0 = 1
Przekroczenie zakresu

C=1
V=1
Z=0

Zadania dodatkowe
Zadanie A
Odpowiedź na polecenie ping(patrz: Zadanie 2) zawiera informację o opóźnieniu dla czterech
pakietów testowych(domyślnie). Wykorzystując działania dodawania i oraz przesuwania
bitowego zaproponuj sposób wyznaczenia średniej, a następnie oblicz czas średni opóźnienia
pakietu i porównaj z podanym wynikiem.
Obliczenia wykonaj w zapisie binarnym.

Pakiet 1: 11ms
Pakiet 2: 18ms
Pakiet 3: 18ms
Pakiet 4: 12ms

Proponowany sposób wyznaczania średniej:


Krok 1: Zsumuj wartości opóźnień pakietów 1, 2, 3 oraz 4
Krok 2: Otrzymany wynik przesuń w prawo o dwie pozycje

Obliczenia:
Pakiet 1: 11ms = 00001011(U2)
Pakiet 2: 18ms = 00010010(U2)
Pakiet 3: 18ms = 00010010(U2)
Pakiet 4: 12ms = 00001100(U2)

Krok 1:
00001011(U2) + 00010010(U2) = 00011100(U2)
00011100(U2) + 00010010(U2) = 00101110(U2)

00101110(U2) + 00001100(U2) = 00111010(U2)

Krok 2:
00111010(U2) →→00001110(U2) = 14(10)

Otrzymany czas średni opóźnienia w wyniku obliczeń binarnych:


14ms

Wynik jest identyczny z podanym przez polecenie ping.

Zadanie B
Działając na liczbach binarnych w kodzie U2 zaproponuj sposób obliczenia: 10·(-9) =

Zastosowałbym analogiczną metodę do mnożenia liczb dziesiętnych w słupku jednakże


ograniczając się do 8-bitowego słowa.
10(10) = 00001010(U2)
-9(10) = 11110111(U2)
00001010(U2) * 11110111(U2) = 10100110(U2) = -90(10)

You might also like