You are on page 1of 9

Evgeny Ochin

ARCHITEKTURA KOMPUTERÓW

Architektura, struktura i język asemblera


wirtualnego mikrokomputera SimpSim
(wprowadzenie do operacji dodawania i
odejmowania typu float w formacie SimpSim)
Prof. dr hab. inż. Evgeny Ochin
eochin@ajp.edu.pl

Kolokwium N2
„Arytmetyka liczb typu Float„

Imię Nazwisko, Nr Albumu

Imię pliku:
Imię_Nazwisko_Kol_N2.doc

2023
Prof. Evgeny Ochin
Wstęp
1. Architektura komputera to koncepcyjny opis podstawowej struktury systemu komputerowego, tj. opisujący
działanie procesora, dostęp do danych i adresów do i z pamięci podręcznej, RAM, ROM, dysku twardego
itp.
2. Architekturę komputera to abstrakcyjny obraz budowy i organizacji elementów systemu komputerowego
z punktu widzenia programisty, tj. architektura komputera opisuje atrybuty związane z programowaniem,
które mają bezpośredni wpływ na logiczne wykonanie programu i jego wydajność.

Program zwierający instrukcje dla procesora nosi nazwę kodu maszynowego, który dla człowieka jest bardzo
trudny. Do celu zmniejszyć koszty programo-wania mi-kroprocesorów byli opracowane języki symboliczne,
teraz zwany jako języki asem-blera (ang. Assembly Languages). W językach typu asembler każda instrukcja
ma-szynowa jest reprezentowana za pomocą mnemoniki, który kojarzy się z wykony-waną operacją.
Dodatkowo określone są reguły dla argumentów ope-racji. Np. w komputerze SimpSim zamiast kodu
maszynowego 5712 można pisać addi R7, R1, R2 co znaczy R7:=R1+R2, gdzie Ri, i Є{0, 1, …, 9, A, B, …, F}
— jeden z 16 rejestrów komputera SimpSim.
Procesor nie jest w stanie zrozumieć program, napisany w asemblerze. Dlatego należy dokonać kompilacji,
czyli zamiany tekstu programu, napisanemu w asem-blerze, na odpowiadające mu instrukcje binarne dla
procesora. Operacji tej doko-nuje program zwany kompilatorem. Np. w komputerze SimpSim zamiast tek-stu
addi R7, R1, R2 zapisze w pamięć główną kod maszynowy 5712.

Główne definicje
Liczba — abstrakcyjna istota, wykorzystywana do opisania ilości.
Liczby naturalne
Liczby naturalne wykorzystane są do oznaczenia ilości obiektów policzalnych: jeden, dwa, trzy itd. Liczba «zero», z
zasady, należy do liczb naturalnych.
Operacje dodawania i mnożenia zawsze możliwe są do wykonania w zbiorze liczb naturalnych, w przeciwieństwie do
operacji odejmowania i dzielenia. Odejmowanie (A–B) możliwe jest do wykonania tylko pod warunkiem (A≥B), w
przeciwnym razie wynik odejmowania nie jest elementem zbioru liczb naturalnych. Dla usunięcia niniejszej wady
wprowadzono liczby ujemne. Do formy zapisu liczb dokłada się znaki liczb «unarny plus(+)» lub «unarny minus(–)»,
przy tym znak (+) można pomijać. W przypadku, gdy do liczby dodany jest znak «unarny minus (-)», to mówimy, że
liczba ta jest ujemna. Dopuszcza się także nazwy «plus» lub «minus», jeżeli w kontekście nazwy te nie kojarzą się z
nazwami stosownych operacji arytmetycznych.
Liczby całkowite
Liczby całkowite stanowią sumę zbioru liczb naturalnych (łącznie z zerem) i zbioru liczb ujemnych.
Ułamkowe liczby stałoprzecinkowe
Operacja dzielenia jak w zbiorze liczb naturalnych, tak i w zbiorze liczb całkowitych możliwa jest do wykonania dopiero
wtedy, kiedy jedna liczba dzieli się całkowicie przez inną liczbę. Żeby operacja ta była zawsze możliwa do wykonania,
wprowadza się pojęcie ułamkowej Q–podstawowej liczby, przy tym do formy zapisu liczb dodaje się znak liczby
ułamkowej, nazywany Q–podstawową kropką. Q-podstawowa kropka oddziela całkowitą część liczby od części
ułamkowej. Jeżeli brakuje części ułamkowej liczby, to Q–podstawowa kropka może być opuszczona.
Przykład. Zapisywanie dziesiętnych liczb ułamkowych stałoprzecinkowych.
12.43; 0.0001; 999.00;
Ułamkowe liczby zmiennoprzecinkowe1
Ułamkowa liczba zmiennoprzecinkowa prezentuje się w formie iloczynu dwóch liczb:
D = M  QP ,

1 CZĘSTO TAKĄ FORMĘ ZAPISU NAZYWANO PÓŁLOGARYTMICZNĄ


ARCHITEKTURA KOMPUTERÓW
gdzie M – ułamkowa liczba stałoprzecinkowa, zwana mantysą liczby, P – liczba całkowita, zwana rzędem liczby, Q>1 –
naturalna liczba, zwana podstawą numeryczną systemu liczbowego.
Przykład. Zapisywanie dziesiętnych liczb ułamkowych zmiennoprzecinkowych.
0.1234 ∙ 102 ; 0.12 ∙ 10−3 ; 0.99 ∙ 103
Do zapisu i prezentacji operacji arytmetycznych wykorzystuje się różne systemy liczbowe.

➢ System liczbowy (SL) – sposób zapisu liczb za pomocą zbioru znaków specjalnych (w tym też liter alfabetu
łacińskiego), zwanych cyframi.
➢ SL nazywa się niepozycyjnym, jeżeli wkład cyfr dla wartości liczby nie zależy od miejsca położenia (numeru
porządkowego) cyfr w zapisywaniu liczby, jak, na przykład, w kanonicznym systemie liczb rzymskich SLR.
➢ SL nazywa się pozycyjnym, jeżeli wkład cyfr dla wartości liczby zależy od miejsca położenia (numeru
porządkowego) cyfr w zapisaniu liczby.
Właściwość pozycyjnego SL
Właściwość pozycyjnego SL, z zasady ma cztery ważne następstwa:
1. wykorzystuje się małą ilość cyfr (do zapisywania Q–podstawowej liczby D są potrzebne  log Q (D) cyfry2);
2. można zapisywać liczby, praktycznie nieograniczone co do wielkości;
3. upraszcza się zrozumienie techniki arytmetycznych działań;
4. zmniejsza się czas realizacji operacji arytmetycznych.
Q–podstawowy N-pozycyjny SL liczb naturalnych oznacza się naturalną liczbą Q>1, zwaną podstawą systemu
liczbowego i wierszem Q–podstawowych cyfr
D=d N-1d N-2  d1d 0 , gdzie di {0, 1, …, Q–1}, i=0, 1, …, N–1, zapisanych na zasadzie zmniejszania indeksu i.
Przykład. Dziesiętny 3–pozycyjny SL liczb naturalnych.
Dziesiętny 3–pozycyjny SL (Q=10, N=3) oznacza się wierszem złożonym z czterech dziesiętnych cyfr D=𝑑2 𝑑1 𝑑0 , gdzie
di {0, 1, …, 9}, i=0, 1, 2, w ramach którego można wyznaczyć 103 liczb w przedziale 000≤D≤999.
000
001
10 = 1 000 liczb: 002
3

998
{999
Przykład. Dwójkowy 4–pozycyjny SL liczb naturalnych.
Dwójkowy 4–pozycyjny SL (Q=2, N=4) oznacza się wierszem złożonym z dwóch dwójkowych cyfr B=b3 b2 b1b0 , gdzie
bi {0, 1}, i=0, 1, 2, 3, w ramach którego można wyznaczyć 24=16 liczby w przedziale 0000≤B≤1111.
0000
0001
4 0010
2 = 16 liczb:

1110
{1111
Porównując powyższe przykłady, można dostrzec, że możliwa jest nieoznaczoność zapisu liczby, jeżeli brakuje jawnego
lub niejawnego wskazania podstawy SL. Na przykład, liczba 1101 może być zapisana zarówno jak w SL2, tak i w SL10.

2 TU  A  — NAJBLIŻSZA DO A LICZBA CAŁKOWITA, PRZEKRACZAJĄCA A. NA PRZYKŁAD,  2.3 = 3,  2.7 = 3 .


Strona 3|9
Prof. Evgeny Ochin
Liczby naturalne3
Dwójkową liczbę naturalną B zapisuje się jako wiersz jej N cyfr na zasadzie zmniejszania indeksu: B = b N-1b N-2 ...b 0 i w
N pozycji
dziesiętnym SL prezentuje liniową kombinację potęg liczby 2:
N −1
B = b N-1b N-2 ...b0 =  bi 2i ,
i=0
N pozycji
gdzie bi {0, 1} — dwójkowe cyfry liczby.
Zakres prezentowanych liczb równy jest 0  B  (2 N − 1) .
Na przykład, dla N=3 można zapisać {0  B  7}10 = {000,001,010,011,100,101,110,111}2 .
0 1 2 3 4 5 6 7
0
1 2 3 4 5 6 7
000 001 010 011 100 101 110 111
Rys. 1. Przedstawienie zbioru dwójkowych liczb naturalnych na osi liczbowej (N=3).

Liczby całkowite
Liczby całkowite w formacie «znak–moduł»
Całkowite liczby dwójkowe można prezentować tak samo, jak dziesiętne, w formacie «znak–moduł»:
N −1
B =  b N −1b N − 2 ...b 0 =   bi 2i . W takim przypadku zakres prezentowanych liczb równy jest −(2N − 1)  B  (2 N − 1) .
i=0
Na przykład, dla N=3 można zapisać
{−7  B  7}10 = {-111,-110,...,-001,-000,+000, +001,...,+111}2
-7 -6 -1 -0 +1 +2 +7
±0
–8 –7 –6 –5 –4 –3 –2 –1 +1 +2 +3 +4 +5 +6 +7
–111

–110

–101

–100

-011

–010

–001

±000

+001

+010

+011

+100

+101

+110

+111

Rys. 2. Przedstawienie zbioru liczb całkowitych w formacie «znak–moduł» na osi liczbowej (N=3)

Systemy liczbowe (SL)


Dziesiętny SL (N=1) Dwójkowy SL (N=3)
Liczba całkowita Liczba całkowita
Liczba Kod Liczba Kod
naturalna Znak– Uzupeł– naturalna Znak– Kod
uzupeł–
moduł moduł prosty4
d0 niający b2b1b0 niający5
±d0 ±b2b1b0 zb2b1b0
zd0 zb2b1b0
9 +9 09 — — — —
8 +8 08 — — — —
7 +7 07 111 + 111 0111 0111
6 +6 06 110 + 110 0110 0110
5 +5 05 101 + 101 0101 0101
4 +4 04 100 + 100 0100 0100
3 +3 03 011 + 011 0011 0011
2 +2 02 010 + 010 0010 0010

3
TYPU "UNSIGNED INTEGER" – CAŁKOWITE BEZ ZNAKU
4
SYNONIM – KOD UZUPEŁNIAJĄCY DO 1 (ŻEBY NIE WYJAŚNIAĆ CO TO JEST 1)
5
SYNONIM – KOD UZUPEŁNIAJĄCY DO 2 (ŻEBY NIE WYJAŚNIAĆ CO TO JEST 2)
ARCHITEKTURA KOMPUTERÓW
1 +1 01 001 + 001 0001 0001
0 +0 00 000 + 000 0000 0000
— –0 00 — – 000 1000 0000
— –1 99 — – 001 1001 1111
— –2 98 — – 010 1010 1110
— –3 97 — – 011 1011 1101
— –4 96 — – 100 1100 1100
— –5 95 — – 101 1101 1011
— –6 94 — – 110 1110 1010
— –7 93 — – 111 1111 1001
— –8 92 — — — 1000
— –9 91 — — — —
— – 10 90 — — — —
Tablica 1. Prezentacja liczb dziesiętnych i dwójkowych w różnych kodowaniach (całkowite dwójkowe liczby faktycznie
są (N+1) – pozycyjnymi, ponieważ w pamięci komputera znak liczby oraz cyfry liczby zajmują po jednej komórce
pamięci o pojemności 1 bit).

Liczby całkowite w kodzie prostym


W pamięci komputera znak ±, z zasady, prezentuje się w postaci dwójkowej zmiennej z{0, 1}, Bpr = zb N −1b N −2 ...b0 ,
N +1
przy tym liczbom dodatnim nadaje się znaczenie ”0”, a ujemnym — znaczenie ”1”. Taką prezentację nazywa się «kod
 N −1

0b b
 N −1 N −2 1 0

...b b = + i =0
bi 2i , if  = '+ '

prosty liczby»: Bpr =  
N −1
1b b ...b b = − b 2i , if  = '− ' 


N −1 N − 2 1 0 
i =0
i


W takim razie −(2 − 1)  B  (2 − 1) .
N N

Na przykład, dla N=3 można zapisać:


{−7  Bpr  7}10 = {1111,1110,..., 1001,1000,0000,0001,..., 0111}2 .
-7 -6 -1 -0 +0 +1
+7
±0
–7 –6 –5 –4 –3 –2 –1 +1 +2 +3 +4 +5 +6 +7
1111

1110

1101

1100

1011

1010

1001

0000
1000

0001

0010

0011

0100

0101

0110

0111

Rys. 3. Przedstawienie zbioru liczb całkowitych kodzie prostym na osi liczbowej (N=3)

Czas wykonywania operacji dodawania można zmniejszyć (zob. rozdział «Arytmetyka»), jeśli liczby zapisane byłyby w
kodzie odwrotnym lub uzupełniającym.

Liczby całkowite w kodzie uzupełniającym

Jeżeli rząd znaku rozpatrywać jako najstarszą cyfrę liczby o wadze (–2N), to dostaniemy SL2 w kodzie uzupełniającym:
N −1
Buzp = zb N −1b N − 2 ...b1b 0 = −z  2 N +  bi 2i
i =0
N +1

W takiej sytuacji zakres przedstawionych liczb równia się −2N  B  (2 N − 1) .

Strona 5|9
Prof. Evgeny Ochin
SL2 w kodzie uzupełniającym jest
podstawowym SL techniki obliczeniowej

Na przykład, dla N=3 można zapisać {−8  Buzp  7}10 = {1000,1001,...,1111,0000,0001,...,0111}2 .


-8 -7 -1 +0 +1 +7

+0
–8 –7 –6 –5 –4 –3 –2 –1 +1 +2 +3 +4 +5 +6 +7
1000

1001

1010

1011

1100

1101

1110

1111

0000

0001

0010

0011

0100

0101

0110

0111
Rys. 4. Przedstawienie zbioru liczb całkowitych
w kodzie uzupełniającym na osi liczbowej (N=3)

Liczby zmiennoprzecinkowe

W przeciwieństwie do przechowywania liczb całkowitych, przechowywanie wartości z częścią ułamkową wymaga


przechowywania nie tylko wzoru zer i jedynek reprezentujących jej reprezentację binarną, ale także położenie punktu
podstawy. Popularnym sposobem na to jest metoda oparta na notacji naukowej i nazywana jest notacją
zmiennoprzecinkową.
Arytmetyka liczb typu Float: dodawanie B=B’+B’’, odejmowanie B=B’-B’’=B’+(-B’’), mnożenie, dzielenie, inwersja
znaku B=-B’. W tych zadaniach liczby typu Float mają format jeden bajt (w komputerach rzeczywistych liczby typu Float
mają format przynajmniej 4 bajty):

B = z p2 p1 p0 m-1 m-2 m-3 m-4 = ±0. 𝑚−1 𝑚−2 𝑚−3 𝑚−4 ∗ 2𝑝2 𝑝1 𝑝0 ,

gdzie {0=000b ≤ (𝑃 = 𝑝2 𝑝1 𝑝0) ≤ (7=111b)} — wykładnik liczby typu Float;


{(0=0.0000b) ≤ (𝑀 = 0. 𝑚−1 𝑚−2 𝑚−3 𝑚−0 }) ≤ (15⁄16 = 0.1111𝑏)} — mantysa liczby typu Float.

Mnóstwo przedstawianych liczb B typu Float w formacie jeden bajt można zapisać następującym obrazem:

Z=0 P=
M 000 001 010 011 100 101 110 111
0000 0 0 0 0 0 0 0 0
0001 1/16 1/8 1/4 1/2 1 2 4 8
0010 2/16 2/8 2/4 2/2 2 4 8 16
0011 3/16 3/8 3/4 3/2 3 6 12 24
0100 4/16 4/8 4/4 4/2 4 8 16 32
0101 5/16 5/8 5/4 5/2 5 10 20 40
0110 6/16 6/8 6/4 6/2 6 12 24 48
0111 7/16 7/8 7/4 7/2 7 14 28 56
1000 8/16 8/8 8/4 8/2 8 16 32 64
1001 9/16 9/8 9/4 9/2 9 18 36 72
1010 10/16 10/8 10/4 10/2 10 20 40 80
1011 11/16 11/8 11/4 11/2 11 22 44 88
1100 12/16 12/8 12/4 12/2 12 24 48 96
1101 13/16 13/8 13/4 13/2 13 26 52 104
1110 14/16 14/8 14/4 14/2 14 28 56 112
1111 15/16 15/8 15/4 15/2 15 30 60 120
ARCHITEKTURA KOMPUTERÓW
Z=1 P=
M= 000 001 010 011 100 101 110 111
0000 0 0 0 0 0 0 0 0
0001 -1/16 -1/8 -1/4 -1/2 -1 -2 -4 -8
0010 -2/16 -2/8 -2/4 -2/2 -2 -4 -8 -16
0011 -3/16 -3/8 -3/4 -3/2 -3 -6 -12 -24
0100 -4/16 -4/8 -4/4 -4/2 -4 -8 -16 -32
0101 -5/16 -5/8 -5/4 -5/2 -5 -10 -20 -40
0110 -6/16 -6/8 -6/4 -6/2 -6 -12 -24 -48
0111 -7/16 -7/8 -7/4 -7/2 -7 -14 -28 -56
1000 -8/16 -8/8 -8/4 -8/2 -8 -16 -32 -64
1001 -9/16 -9/8 -9/4 -9/2 -9 -18 -36 -72
1010 -10/16 -10/8 -10/4 -10/2 -10 -20 -40 -80
1011 -11/16 -11/8 -11/4 -11/2 -11 -22 -44 -88
1100 -12/16 -12/8 -12/4 -12/2 -12 -24 -48 -96
1101 -13/16 -13/8 -13/4 -13/2 -13 -26 -52 104
1110 -14/16 -14/8 -14/4 -14/2 -14 -28 -56 -112
1111 -15/16 -15/8 -15/4 -15/2 -15 -30 -60 -120
Tak, na przykład,
Bmax=01111111= 27 ·15/16=120 -Bmax=11111111= -27 · 15/16=-120
Bmin=00000001= 20 ·1/16=1/16 -Bmin=10000001= -20 ·1/16=-1/16

Wykonanie operacji B=B’+B’’ i B=B’-B’’=B’+(-B’’) w SL2 Float6


Nazwisko Imię, Nr Albumu A= a4 a3 a2 a1 a0 =17221, Liczba losowa R=7 (daje wykładowca)
P’=|a0*R|mod8=+|1*7|mod8=7
M’=+(|a1*R|mod16)/16=+(|2*7|mod16)/16=14/16, if M=0 then M≔R/16
P”= |a2*R|mod8=+|2*7|mod8=6
M”=-(|a3*R|mod16)/16=-(|7*7|mod16)/16=-1/16, if M=0 then M≔-(R/16)

Konwersja D’10 => B’2 = z p2 p1 p0 m-1 m-2 m-3 m-4


D’=14/16*27= 112=>0 111 1110

Konwersja D”10 => B”2 = z p2 p1 p0 m-1 m-2 m-3 m-4


D”=-1/16*26= -4=>1 110 0001 (Był błąd: D”=-1/8*26= -8 => 1 110 0010)

• Wykonać operację B=B’+B’’ ręcznie

B’= 0 111 .1110 0 111 .11100 0 111 .11100 7E16


+ 1 110 .0001 1 111 .00001 1 111 .11110+1
B’’= E116
B= 0 111 .11011
B= 0 111 .1101 7D16
Konwersja B =>D, D=13/16*27=104
• Sprawdzić rezultat operacji D= D’+D”=112+(-4)=108.
Podsumowanie: operacja wykonana niedokładnie. ∆D=(|108-104|/108)*100%=3,7%

6
SPEŁNIA SIĘ JAKO DODAWANIE, DO TEGO DRUGI OPERAND ODWRACA ZNAK
Strona 7|9
Prof. Evgeny Ochin
• Wykonać operację B=B’+B’’ za pomocy symulatora SimpSim7 i dodać do sprawozdania dump (treści)
pamięci mikroprocesora SimpSim po wykonaniu operacji B=B’+B”.

B=7D=01111101=13/16*27=104
Podsumowanie: wynik jest taki sam.

„Wykonanie operacji „B=B’-B’’” w SL2 Float

• Wykonać operację odejmowania B=B’-B’’ jako operację dodawania B=B’+(-B’’), gdzie (-) jest
operacją zmiany znaku liczby. Wykonać ręcznie.

Operacja zmiany znaku: -B’’= -(1 110 0001) = 0 110 0001


B’= 0 111 1110 0 111 11100 7E16
+
-B’’= 0 110 0001 0 111 00001 6116
B= 0 111 11101
B= 0 111 1110 7E16
7
Konwersja B =>D, D=14/16*2 =112
• Sprawdzić rezultat operacji D= D’-D”=112-(-4)=116.
Podsumowanie: operacja wykonana niedokładnie. ∆D=(|116-112|/116)*100%=3,4%
• Wykonać operację B=B’-B’’ za pomocą symulatora SimpSim8 i dodać do sprawozdania dump (treści)
pamięci mikroprocesora SimpSim po wykonaniu operacji B=B’-B”.

7
HTTP://WWW.ANNE-GERT.NL/PROJECTS/SIMPSIM/ TA ELEMENT ZADANIA JEST WYKONYWANA DLA STUDENTÓW STUDIÓW
STACJONARNYCH DLA OCENY 5+
8
HTTP://WWW.ANNE-GERT.NL/PROJECTS/SIMPSIM/ TA ELEMENT ZADANIA JEST WYKONYWANA DLA STUDENTÓW STUDIÓW
STACJONARNYCH DLA OCENY 5+
ARCHITEKTURA KOMPUTERÓW

B=7E16= 0 111 1110 = +15/16*27 = +112


Podsumowanie: wynik jest taki sam.
Data i podpis
Zadanie domowe odsyłamy do TEAMS i eochin@ajp.edu.pl
Imię pliku: {Nazwisko_Kol_N2.doc lub *.docx }.
Po otrzymaniu „OK” bronimy zadanie na zajęciach takich jak Ćwiczenia.

Wykonać opieracie B=B’+B’’; (dla R=2, R=5 i R=9).


Wykonać opieracie odejmowania B=B’-B’’ jako opieracie dodawania B=B’+(-B’’), gdzie (-B’’) jest
operacja zmiany znaku liczby (dla R=2, R=5 i R=9).
Literatura
1. Studia: Podstawy Informatyki — systemy liczbowe //
https://www.dobreprogramy.pl/@karol221-10/studia-podstawy-informatyki-systemy-liczbowe,blog,83760
2. Ochin E. Systemy liczbowe. Lulu Publishing, Raleigh, North Carolina, USA, 2010
https://www.amazon.com/Systemy-liczbowe-Polish-Evgeny-Ochin/dp/1445775344

Strona 9|9

You might also like