architektura sk 07

background image

ORGANIZACJA I

ORGANIZACJA I

REALIZACJA ROZKAZÓW

REALIZACJA ROZKAZÓW

(1)

(1)

Rozkazy przesłań

Rozkazy przesłań

Rozkazy arytmetyczne i logiczne

Rozkazy arytmetyczne i logiczne

background image

Rozkazy przesłań:

Rozkazy przesłań:

MOV -

MOV -

move

move

- przesłanie słowa między dwoma rejestrami

- przesłanie słowa między dwoma rejestrami

STR -

STR -

store

store

- przesłanie słowa ze wskazanego w rozkazie rejestru do

- przesłanie słowa ze wskazanego w rozkazie rejestru do

komórki pamięci

komórki pamięci

LD -

LD -

load

load

- przesłanie słowa z pamięci do wskazanego rejestru

- przesłanie słowa z pamięci do wskazanego rejestru

XCH -

XCH -

exchange

exchange

- wymiana zawartości rejestrów

- wymiana zawartości rejestrów

Rozkazy arytmetyczno-logiczne:

Rozkazy arytmetyczno-logiczne:

ADD -

ADD -

addition

addition

- dodawanie

- dodawanie

SUB -

SUB -

subtraction

subtraction

- odejmowanie

- odejmowanie

MUL -

MUL -

multiplication

multiplication

- mnożenie

- mnożenie

DIV -

DIV -

division

division

- dzielenie

- dzielenie

NEG -

NEG -

negate

negate

- negacja

- negacja

DEC -

DEC -

decrement

decrement

- zmniejszanie wartości o

- zmniejszanie wartości o

jeden

jeden

INC -

INC -

increment

increment

- awiększanie wartości o

- awiększanie wartości o

jeden

jeden

Rozkazy sterujące pracą programu:

Rozkazy sterujące pracą programu:

JMP -

JMP -

jump

jump

- skok bezwarunkowy do wyspecyfikowanego miejsca w

- skok bezwarunkowy do wyspecyfikowanego miejsca w

pamięci

pamięci

CALL -

CALL -

jump to subroutine

jump to subroutine

- wywołanie podprogramu

- wywołanie podprogramu

RET -

RET -

return

return

- skok powrotny z podprogramu

- skok powrotny z podprogramu

SKIP -

SKIP -

skip

skip

- przeskok przez jeden rozkaz

- przeskok przez jeden rozkaz

Rozkazy sterujące pracą procesora :

Rozkazy sterujące pracą procesora :

HALT -

HALT -

stop

stop

- zatrzymanie wykonania programu

- zatrzymanie wykonania programu

NOP -

NOP -

no operation

no operation

- rozkaz pusty

- rozkaz pusty

AND -

AND -

conjuction

conjuction

- iloczyn

- iloczyn

OR -

OR -

disjunction

disjunction

- suma

- suma

EXOR -

EXOR -

exclusive-OR

exclusive-OR

-suma mod 2

-suma mod 2

NOT -

NOT -

complement

complement

- negacja

- negacja

LISTA ROZKAZÓW - PRZYKŁADY

ROZKAZÓW

background image

ROZKAZ PRZESYŁANIA DANYCH

ROZKAZ PRZESYŁANIA DANYCH

Zostanie przedstawiony jeden podstawowy
rozkaz

MOV

background image

Instrukcja

MOV

należy

do

grupy

instrukcji

przesyłania danych i stanowi jeden z podstawowych
rozkazów używanych w asemblerze.

Zadaniem jej jest kopiowanie danej z jednego do
drugiego miejsca (nie można jednak przesyłać
danych między komórkami pamięci - musi się to
odbywać poprzez rejestr procesora).

Przykład:

Przykład:

mov

mov

operand1,operand2

operand1,operand2

źródło (skąd lub

źródło (skąd lub

co?)

co?)

cel (gdzie?)

cel (gdzie?)

ROZKAZ PRZESYŁANIA DANYCH -

ROZKAZ PRZESYŁANIA DANYCH -

MOV

MOV

background image

Tryb rejestrowy

W zależności od trybu adresowania użycie tej instrukcji może
wyglądać:

Przykład:

Przykład:

MOV AX,BX

MOV AX,BX

0000000100010

0000000100010

111

111

0000000000100

0000000000100

011

011

0000000000010

0000000000010

000

000

0000000000000

0000000000000

000

000

0000000000100

0000000000100

011

011

0000000000010

0000000000010

000

000

0000000000000

0000000000000

000

000

0000000000100

0000000000100

011

011

AX

AX

BX

BX

CX

CX

DX

DX

rejestry przed

rejestry przed

wykonaniem

wykonaniem

rozkazu

rozkazu

rejestry po

rejestry po

wykonaniu rozkazu

wykonaniu rozkazu

AX

AX

BX

BX

CX

CX

DX

DX

Jeżeli argument znajduje się w rejestrze, to tryb adresowania nazywa

się trybem rejestrowym (register mode). Można zauważyć, że rozkaz

zawiera numer rejestru procesora, w którym przechowywany jest

argument operacji.

KOD

KOD

OPERACJI

OPERACJI

NR REJESTRU

NR REJESTRU

BLOK REJESTRÓW

BLOK REJESTRÓW

ARGUMENT

ARGUMENT

ROZKAZ PRZESYŁANIA DANYCH -

ROZKAZ PRZESYŁANIA DANYCH -

MOV

MOV

background image

Tryb natychmiastowy

Przykład:

Przykład:

MOV CL,5DH

MOV CL,5DH

0000000100010

0000000100010

111

111

0000000000100

0000000000100

011

011

0000000000010

0000000000010

000

000

0000000000000

0000000000000

000

000

0000000000100

0000000000100

011

011

00000000

00000000

01011

01011

101

101

0000000000000

0000000000000

000

000

AX

AX

BX

BX

CX

CX

DX

DX

rejestry przed

rejestry przed

wykonaniem

wykonaniem

rozkazu

rozkazu

rejestry po

rejestry po

wykonaniu rozkazu

wykonaniu rozkazu

AX

AX

BX

BX

CX

CX

DX

DX

5D

5D

H

H

=

=

01011101

01011101

0000000100010

0000000100010

111

111

Jeżeli argument znajduje się w kodzie rozkazu, to tryb adresowania

nazywa się trybem natychmiastowym (immediate mode). Można

zauważyć, że stała 8-, 16- czy 32-bitowa jako argument źródłowy

zawarta jest w rozkazie (umieszczona tam przez asembler), a nie w

rejestrze czy komórce pamięci.

KOD

KOD

OPERACJI

OPERACJI

ARGUMENT

ARGUMENT

ROZKAZ PRZESYŁANIA DANYCH -

ROZKAZ PRZESYŁANIA DANYCH -

MOV

MOV

background image

Jeśli adres znajduje się w rejestrze, to tryb taki nazywany jest trybem
adresowania pośredniego przez rejestr (register indirect mode).
Wykorzystuje się rejestry: bazowy (BX), wskaźnik bazy (BP - odnosi się
do rejestru SS), indeksowy (SI lub DI).

KOD OPERACJI

NR REJESTRU

BLOK REJESTRÓW

BLOK REJESTRÓW

ADRES

ADRES

ARGUMENTU

ARGUMENTU

SEGMENT DANYCH

SEGMENT DANYCH

ARGUMENT

ARGUMENT

...............

...............

Tryb adresowania pośredniego przez rejestr (1/2)

ROZKAZ PRZESYŁANIA DANYCH -

ROZKAZ PRZESYŁANIA DANYCH -

MOV

MOV

background image

Rejestr jako argument pośredni zapisuje się w asemblerze w nawiasie

kwadratowym (w odróżnieniu od rejestru jako argumentu).

Przykład:

MOV AX,BX do rejestru AX ładowana jest zawartość rejestru

BX

Tryb adresowania pośredniego przez rejestr (2/2)

MOV AX,[BX] do rejestru AX ładowana jest zawartość komórki

MOV AX,[BX] do rejestru AX ładowana jest zawartość komórki

pamięci, której adres od początku segmentu danych (offset)

pamięci, której adres od początku segmentu danych (offset)

określa rejestr BX

określa rejestr BX

MOV BX,0001

MOV BX,0001

.........................

.........................

MOV AX,[BX]

MOV AX,[BX]

000

000

0

0

000

000

1

1

000

000

2

2

000

000

3

3

000

000

4

4

8B

8B

1A

1A

1A8B

1A8B

AX

AX

=

=

0001

0001

BX

BX

=

=

ROZKAZ PRZESYŁANIA DANYCH -

ROZKAZ PRZESYŁANIA DANYCH -

MOV

MOV

bajt o adresie młodszym

bajt o adresie młodszym

bajt o adresie starszym

bajt o adresie starszym

młodszy bajt starszy

młodszy bajt starszy

bajt

bajt

background image

Przykład: Stosując tryb adresowania pośredniego przez rejestr

Przykład: Stosując tryb adresowania pośredniego przez rejestr

chcemy w akumulatorze umieścić bajt pamięci o adresie

chcemy w akumulatorze umieścić bajt pamięci o adresie

0C3F:0100

0C3F:0100

ROZKAZ PRZESYŁANIA DANYCH -

ROZKAZ PRZESYŁANIA DANYCH -

MOV

MOV

background image

ROZKAZ PRZESYŁANIA DANYCH -

ROZKAZ PRZESYŁANIA DANYCH -

MOV

MOV

Zasadnicze ograniczenia instrukcji MOV:

Zasadnicze ograniczenia instrukcji MOV:

MOV nie może przenosić danych z jednej komórki pamięci

MOV nie może przenosić danych z jednej komórki pamięci

do innej, np. instrukcja:

do innej, np. instrukcja:

MOV [SI],[BX] w procesie kompilacji będzie błędem

MOV [SI],[BX] w procesie kompilacji będzie błędem

MOV nie może przenosić zawartości jednego rejestru

MOV nie może przenosić zawartości jednego rejestru

segmentowego do innego np. instrukcja:

segmentowego do innego np. instrukcja:

MOV CS,DS w procesie kompilacji będzie błędem

MOV CS,DS w procesie kompilacji będzie błędem

Toteż by np. przenieść zawartość rejestru DS do CS trzeba

Toteż by np. przenieść zawartość rejestru DS do CS trzeba

wpierw przenieść zawartość DS do innego rejestru

wpierw przenieść zawartość DS do innego rejestru

ogólnego przeznaczenia i dopiero jego zawartość do CS, np.

ogólnego przeznaczenia i dopiero jego zawartość do CS, np.

MOV AX,DS

MOV AX,DS

;AX:=DS

;AX:=DS

MOV CS,AX

MOV CS,AX

;CS:=AX

;CS:=AX

MOV nie może przenosić danych natychmiastowych do

MOV nie może przenosić danych natychmiastowych do

rejestru segmentowego, np. instrukcja:

rejestru segmentowego, np. instrukcja:

MOV CS,0B80H w procesie kompilacji będzie błędem

MOV CS,0B80H w procesie kompilacji będzie błędem

MOV nie może przenosić jednej z 8-bitowych połówek

MOV nie może przenosić jednej z 8-bitowych połówek

rejestru do rejestrów 16-bitowych i odwrotnie.

rejestru do rejestrów 16-bitowych i odwrotnie.

background image

ROZKAZ PRZESYŁANIA DANYCH -

ROZKAZ PRZESYŁANIA DANYCH -

MOV

MOV

Zobacz jak może wyglądać realizacja rozkazów przesyłania
danych

zrealizowana

z

wykorzystaniem

symulatora

procesora SMS32v50

program:

in_mov1.asm

background image

ROZKAZY LOGICZNE

ROZKAZY LOGICZNE

Zostaną przedstawione rozkazy

NOT

AND

OR

XOR

background image

ROZKAZY LOGICZNE

ROZKAZY LOGICZNE

Wszystkie te rozkazy, których działanie jest oparte

Wszystkie te rozkazy, których działanie jest oparte

bezpośrednio

na

zasadach

logiki

nazywamy

bezpośrednio

na

zasadach

logiki

nazywamy

rozkazami logicznymi.

rozkazami logicznymi.

Rozkazy te operują na poszczególnych bitach

Rozkazy te operują na poszczególnych bitach

wewnątrz rejestrów czy komórek pamięci. Z tego

wewnątrz rejestrów czy komórek pamięci. Z tego

też względu rozkazy logiczne (wraz z rozkazami

też względu rozkazy logiczne (wraz z rozkazami

przesunięć)

często

nazywane

rozkazami

przesunięć)

często

nazywane

rozkazami

operowania na bitach.

operowania na bitach.

Do najważniejszych rozkazów tej grupy należą:

Do najważniejszych rozkazów tej grupy należą:

Negacja logiczna (bajtu lub słowa) - NOT

Negacja logiczna (bajtu lub słowa) - NOT

Mnożenie logiczne (bajtu lub słowa) - AND

Mnożenie logiczne (bajtu lub słowa) - AND

Dodawanie logiczne (bajtów lub słów) - OR

Dodawanie logiczne (bajtów lub słów) - OR

Logiczna nierównoważność (bajtów lub słów) - XOR

Logiczna nierównoważność (bajtów lub słów) - XOR

background image

Rozkaz NOT neguje logicznie bity argumentu, tzn.
odwraca stan każdego bitu rejestru lub komórki
pamięci. Nie wpływa na stan rejestru znaczników
(flag).

Przykład:

jeśli do rejestru BL przesłano liczbę

9C

H =

10011100B

, to po użyciu rozkazu

NOT BL

,

otrzymamy:

01100011B

=

63

H.

MOV BL,9C

NOT BL

;ładuj do BL wartość 9CH = 10011100B

;w BL otrzymamy liczbę 01100011 B = 63H

W języku asemblera można to przedstawić jako:

ROZKAZ NEGACJI LOGICZNEJ -

ROZKAZ NEGACJI LOGICZNEJ -

NOT

NOT

background image

Rozkaz AND wykonuje mnożenie logiczne odpowiadających sobie bitów

Rozkaz AND wykonuje mnożenie logiczne odpowiadających sobie bitów

dwóch argumentów (operandów) i umieszcza wynik w miejscu lewego

dwóch argumentów (operandów) i umieszcza wynik w miejscu lewego

argumentu (operandu).

argumentu (operandu).

Bit wyniku ma wartość 1 wówczas, gdy odpowiadające sobie bity w obydwu

Bit wyniku ma wartość 1 wówczas, gdy odpowiadające sobie bity w obydwu

argumentach mają wartość 1, w pozostałych przypadkach bit wyniku ma

argumentach mają wartość 1, w pozostałych przypadkach bit wyniku ma

wartość 0. 

wartość 0. 

Przykład

Przykład

:

:

jeśli do rejestru AL przesłano liczbę

jeśli do rejestru AL przesłano liczbę

9C

9C

H =

H =

10011100B

10011100B

, a do BL

, a do BL

4C

4C

H =

H =

01001100B

01001100B

to po użyciu rozkazu

to po użyciu rozkazu

AND AL,BL

AND AL,BL

otrzymamy w

otrzymamy w

rejestrze AL liczbę

rejestrze AL liczbę

0C

0C

H =

H =

00001100B

00001100B

.

.

ROZKAZ MNOŻENIA LOGICZNEGO -

ROZKAZ MNOŻENIA LOGICZNEGO -

AND

AND

background image

Rozkaz OR wykonuje dodawanie logiczne odpowiadających sobie bitów dwóch

Rozkaz OR wykonuje dodawanie logiczne odpowiadających sobie bitów dwóch

argumentów (operandów) i umieszcza wynik w miejscu lewego argumentu

argumentów (operandów) i umieszcza wynik w miejscu lewego argumentu

(operandu).

(operandu).

Bit wyniku ma wartość O wówczas, gdy odpowiadające sobie bity w obydwu

Bit wyniku ma wartość O wówczas, gdy odpowiadające sobie bity w obydwu

argumentach mają wartość O, w pozostałych przypadkach bit wyniku ma wartość

argumentach mają wartość O, w pozostałych przypadkach bit wyniku ma wartość

1.

1.

Przykład

Przykład

:

:

jeśli do rejestru AL przesłano liczbę

jeśli do rejestru AL przesłano liczbę

9C

9C

H =

H =

10011100B

10011100B

, a do BL

, a do BL

4C

4C

H =

H =

01001100B

01001100B

to po użyciu rozkazu

to po użyciu rozkazu

OR AL,BL

OR AL,BL

otrzymamy w rejestrze AL

otrzymamy w rejestrze AL

liczbę

liczbę

DC

DC

H =

H =

11011100B

11011100B

.

.

ROZKAZ DODAWANIA LOGICZNEGO -

ROZKAZ DODAWANIA LOGICZNEGO -

OR

OR

background image

Rozkaz

XOR

wykonuje

funkcję

nierównoważnści

(sumę

modulo

2)

Rozkaz

XOR

wykonuje

funkcję

nierównoważnści

(sumę

modulo

2)

odpowiadających sobie bitów dwóch argumentów (operandów) i umieszcza

odpowiadających sobie bitów dwóch argumentów (operandów) i umieszcza

wynik w miejscu lewego argumentu (operandu).

wynik w miejscu lewego argumentu (operandu).

Bit wyniku przyjmuje wartość 1 tylko wówczas, gdy odpowiadające sobie bity w

Bit wyniku przyjmuje wartość 1 tylko wówczas, gdy odpowiadające sobie bity w

obydwu argumentach mają wartość przeciwną. Rozkaz XOR może być użyty do

obydwu argumentach mają wartość przeciwną. Rozkaz XOR może być użyty do

odwrócenia ustawień wybranych bitów bądź też do określenia, który z bitów

odwrócenia ustawień wybranych bitów bądź też do określenia, który z bitów

dwóch argumentów różni się od siebie.

dwóch argumentów różni się od siebie.

Przykład

Przykład

:

:

jeśli do rejestru AL przesłano liczbę

jeśli do rejestru AL przesłano liczbę

9C

9C

H =

H =

10011100B

10011100B

01001100B

01001100B

to

to

po użyciu rozkazu

po użyciu rozkazu

XOR AL, 4CH

XOR AL, 4CH

otrzymamy w rejestrze AL liczbę

otrzymamy w rejestrze AL liczbę

D0

D0

H

H

=

=

11010000B

11010000B

.

.

ROZKAZ NIERÓWNOWAŻNOŚCI

ROZKAZ NIERÓWNOWAŻNOŚCI

LOGICZNEJ - XOR

LOGICZNEJ - XOR

background image

Zobacz jak może wyglądać realizacja rozkazów logicznych
zrealizowana z wykorzystaniem symulatora procesora
SMS32v50

program: logic.asm

ROZKAZY LOGICZNE

ROZKAZY LOGICZNE

background image

ROZKAZY ARYTMETYCZNE

ROZKAZY ARYTMETYCZNE

Do najważniejszych rozkazów tej grupy należą:

Do najważniejszych rozkazów tej grupy należą:

Dodawanie - ADD, ADC

Dodawanie - ADD, ADC

Odejmowanie - SUB, SBB

Odejmowanie - SUB, SBB

Mnożenie - MUL, IMUL

Mnożenie - MUL, IMUL

Dzielenie - DIV, IDIV

Dzielenie - DIV, IDIV

Powielanie długości argumentu - CBW, CWD

Powielanie długości argumentu - CBW, CWD

Negacja lub uzupełnienie do dwóch - NEG

Negacja lub uzupełnienie do dwóch - NEG

Inkrementacja i dekrementacja - INC, DEC

Inkrementacja i dekrementacja - INC, DEC

Porównywanie przeznaczenia ze źródłem - CMP

Porównywanie przeznaczenia ze źródłem - CMP

background image

Dodawania całkowite dokonujemy za pomocą rozkazu ADD

Dodawania całkowite dokonujemy za pomocą rozkazu ADD

ADD argument1,argument2

ADD argument1,argument2

rejestr

rejestr

komórka pamięci (z pewnymi

komórka pamięci (z pewnymi

wyjątkami)

wyjątkami)

rejestr

rejestr

komórka pamięci (z pewnymi

komórka pamięci (z pewnymi

wyjątkami)

wyjątkami)

dana natychmiastowa

dana natychmiastowa

Do

Do

argumentu1

argumentu1

dodaj

dodaj

argument2

argument2

i wynik zapisz w

i wynik zapisz w

argument1

argument1

Przykłady:

Przykłady:

ADD AL,BL

ADD AL,BL

ADD AL,4Ch

ADD AL,4Ch

Rozkaz ten ma wpływ na następujące znaczniki rejestru flagowego

Rozkaz ten ma wpływ na następujące znaczniki rejestru flagowego

(zależne od wyniku dodawania):

(zależne od wyniku dodawania):

OF - flaga nadmiaru

OF - flaga nadmiaru

(przepełnienia)

(przepełnienia)

SF - flaga znaku

SF - flaga znaku

ZF - flaga zera

ZF - flaga zera

AF - flaga przeniesienia

AF - flaga przeniesienia

pomocniczego

pomocniczego

PF - flaga parzystości

PF - flaga parzystości

CF - flaga

CF - flaga

przeniesienia

przeniesienia

DODAWANIE

DODAWANIE

background image

Zobaczmy dwa przykłady realizacji dodawania:

Zobaczmy dwa przykłady realizacji dodawania:

1.

1.

DODAWANIE

DODAWANIE

background image

2.

2.

DODAWANIE

DODAWANIE

background image

Zadanie

Zadanie

: dodaj zawartość komórki pamięci DS:0100 do

: dodaj zawartość komórki pamięci DS:0100 do

DS:102

DS:102

Dodawanie zawartości komórki pamięci do zawartości

Dodawanie zawartości komórki pamięci do zawartości

komórki pamięci jest niedozwolone

komórki pamięci jest niedozwolone

ADD word ptr DS:[100], word ptr DS:[102]

ADD word ptr DS:[100], word ptr DS:[102]

DODAWANIE

DODAWANIE

Można to jednak wykonać – zobacz przykład

Można to jednak wykonać – zobacz przykład

background image

Zadanie

Zadanie

: dodaj zawartość komórki pamięci DS:0100 do

: dodaj zawartość komórki pamięci DS:0100 do

DS:102

DS:102

10H

10H

+50H

+50H

60H

60H

DODAWANIE

DODAWANIE

background image

Dodawania całkowite bajtów lub słów z uwzględnieniem przeniesienia z

Dodawania całkowite bajtów lub słów z uwzględnieniem przeniesienia z

dolnego do górnego bajtu dokonujemy za pomocą rozkazu ADC

dolnego do górnego bajtu dokonujemy za pomocą rozkazu ADC

ADC argument1,argument2

ADC argument1,argument2

rejestr

rejestr

komórka pamięci (z pewnymi

komórka pamięci (z pewnymi

wyjątkami)

wyjątkami)

rejestr

rejestr

komórka pamięci (z pewnymi

komórka pamięci (z pewnymi

wyjątkami)

wyjątkami)

dana natychmiastowa

dana natychmiastowa

Do

Do

argumentu1

argumentu1

dodaj

dodaj

argument2

argument2

i przeniesienie CF a wynik zapisz w

i przeniesienie CF a wynik zapisz w

argument1

argument1

Rozkaz ten ma wpływ na następujące znaczniki rejestru flagowego (zależne od

Rozkaz ten ma wpływ na następujące znaczniki rejestru flagowego (zależne od

wyniku dodawania):

wyniku dodawania):

OF - flaga nadmiaru

OF - flaga nadmiaru

(przepełnienia)

(przepełnienia)

SF - flaga znaku

SF - flaga znaku

ZF - flaga zera

ZF - flaga zera

AF - flaga przeniesienia

AF - flaga przeniesienia

pomocniczego

pomocniczego

PF - flaga parzystości

PF - flaga parzystości

CF - flaga

CF - flaga

przeniesienia

przeniesienia

Rozkaz ten musi występować zawsze po rozkazie ADD, gdyż dopiero po rozkazie

Rozkaz ten musi występować zawsze po rozkazie ADD, gdyż dopiero po rozkazie

ADD może być wiadomo, że występuje (bądź nie występuje) przeniesienie. W

ADD może być wiadomo, że występuje (bądź nie występuje) przeniesienie. W

przypadku gdyby nie było przeniesienia to rozkaz ADC zadziała dokładnie tak jak

przypadku gdyby nie było przeniesienia to rozkaz ADC zadziała dokładnie tak jak

rozkaz ADD.

rozkaz ADD.

DODAWANIE

DODAWANIE

background image

Dodawanie liczb w kodzie BCD dokonujemy za pomocą rozkazu ADD (ADC)

Dodawanie liczb w kodzie BCD dokonujemy za pomocą rozkazu ADD (ADC)

z zastosowaniem instrukcji DAA.

z zastosowaniem instrukcji DAA.

DAA dokonuje poprawki dziesiętnej po dodawaniu dwójkowym w kodzie

DAA dokonuje poprawki dziesiętnej po dodawaniu dwójkowym w kodzie

BCD. Liczba podlegająca korekcji musi się zawsze znajdować w rejestrze

BCD. Liczba podlegająca korekcji musi się zawsze znajdować w rejestrze

AL

AL

skoryguj wynik w akumulatorze AL po

skoryguj wynik w akumulatorze AL po

dodawaniu BCD z przeniesieniem lub bez

dodawaniu BCD z przeniesieniem lub bez

DAA

DAA

Algorytm dla DAA jest następujący:

Algorytm dla DAA jest następujący:

AL

AL

0

0

3

3

7

7

4

4

częśćY

częśćY

częśćX

częśćX

Jeśli AF=1 lub

Jeśli AF=1 lub

częśćX

częśćX

> 9

> 9

to [AL]=[AL]+06h oraz AF=1

to [AL]=[AL]+06h oraz AF=1

AF - flaga przeniesienia

AF - flaga przeniesienia

pomocniczego

pomocniczego

CF - flaga

CF - flaga

przeniesienia

przeniesienia

Jeśli CF=1 lub

Jeśli CF=1 lub

częśćY

częśćY

> 9

> 9

to [AL]=[AL]+06h oraz CF=1

to [AL]=[AL]+06h oraz CF=1

DODAWANIE

DODAWANIE

background image

AL

AL

0

0

3

3

7

7

4

4

częśćY

częśćY

częśćX

częśćX

Jeśli AF=1 lub

Jeśli AF=1 lub

częśćX

częśćX

> 9

> 9

to [AL]=[AL]+06h oraz

to [AL]=[AL]+06h oraz

AF=1

AF=1

Flagi:

Flagi:

CF - przeniesienie

CF - przeniesienie

AF - przeniesienie

AF - przeniesienie

pomocnicze

pomocnicze

Jeśli CF=1 lub

Jeśli CF=1 lub

częśćY

częśćY

> 9

> 9

to [AL]=[AL]+06h oraz

to [AL]=[AL]+06h oraz

CF=1

CF=1

AF=0

AF=0

AF=1

AF=1

Przykład:

Przykład:

dodać w kodzie BCD dwie liczby dziesiętne 8 i 4

dodać w kodzie BCD dwie liczby dziesiętne 8 i 4

0000 1000

0000 1000

+

+

0000 0100

0000 0100

0000 1100

0000 1100

+ poprawka

+ poprawka

0000 0110

0000 0110

0001 0010

0001 0010

1 2

1 2

większe od 9

większe od 9

DODAWANIE - algorytm dla DAA

DODAWANIE - algorytm dla DAA

background image

Dodawanie liczb w kodzie BCD dokonujemy za pomocą rozkazu ADD

Dodawanie liczb w kodzie BCD dokonujemy za pomocą rozkazu ADD

(ADC). Zamiast instrukcji DAA można użyć AAA.

(ADC). Zamiast instrukcji DAA można użyć AAA.

AAA dokonuje poprawki dziesiętnej po dodawaniu dwójkowym w kodzie

AAA dokonuje poprawki dziesiętnej po dodawaniu dwójkowym w kodzie

BCD. Liczba podlegająca korekcji musi się zawsze znajdować w rejestrze

BCD. Liczba podlegająca korekcji musi się zawsze znajdować w rejestrze

AL

AL

skoryguj wynik w akumulatorze AL po

skoryguj wynik w akumulatorze AL po

dodawaniu BCD z przeniesieniem lub bez

dodawaniu BCD z przeniesieniem lub bez

AAA

AAA

DODAWANIE

DODAWANIE

background image

przeniesienie dziesiętne przechodzi do AH (nie do starszej

przeniesienie dziesiętne przechodzi do AH (nie do starszej

tetrady AL, która jest zawsze zerowana) i jednocześnie CF = AF =

tetrady AL, która jest zawsze zerowana) i jednocześnie CF = AF =

1,

1,

przy braku przeniesienia CF = AF = 0

przy braku przeniesienia CF = AF = 0

Przykład:

Przykład:

dodać w kodzie BCD dwie liczby dziesiętne 8 i 4

dodać w kodzie BCD dwie liczby dziesiętne 8 i 4

0000 0000 0000 1000

0000 0000 0000 1000

+

+

0000 0000 0000 0100

0000 0000 0000 0100

0000 0000 0000 1100

0000 0000 0000 1100

+ poprawka

+ poprawka

0000 0000 0000 0110

0000 0000 0000 0110

0000 0001 0000 0010

0000 0001 0000 0010

1 2

1 2

DODAWANIE- zasada działania

DODAWANIE- zasada działania

AAA

AAA

background image

Przypomnijmy zasadę zapisu U2 (uzupełnienie do 2)

Przypomnijmy zasadę zapisu U2 (uzupełnienie do 2)

W zapisie U2 (uzupełnień do 2) liczbę binarną można przedstawić jako:

a

n-1

...a

0

= -a

n-1

.

2

n-1

+a

n-2

.

2

n-2

+

...

+a

0

.

2

0

Najstarszy bit nie jest tylko bitem znaku ale niesie wraz ze swoją wagą wartość ujemną

W zapisie U2 (uzupełnień do 2) liczbę binarną można przedstawić jako:

a

n-1

...a

0

= -a

n-1

.

2

n-1

+a

n-2

.

2

n-2

+

...

+a

0

.

2

0

Najstarszy bit nie jest tylko bitem znaku ale niesie wraz ze swoją wagą wartość ujemną

1101

1101

U2

U2

= -1

= -1

.

.

2

2

3

3

+1

+1

.

.

2

2

2

2

+0

+0

.

.

2

2

1

1

+1

+1

.

.

2

2

0

0

= -8+4+1 =

= -8+4+1 =

-3

-3

D

D

0111

0111

U2

U2

= -0

= -0

.

.

2

2

3

3

+1

+1

.

.

2

2

2

2

+1

+1

.

.

2

2

1

1

+1

+1

.

.

2

2

0

0

= 4+2+1 =

= 4+2+1 =

7

7

D

D

~0111

~0111

U2

U2

1000

1000

+ 1

+ 1

1001

1001

U2

U2

negacja wszystkich bitów i dodanie 1

negacja wszystkich bitów i dodanie 1

-7

-7

D

D

7

7

D

D

110111

110111

+111000

+111000

1 101111

1 101111

-9

-9

D

D

=

=

-1

-1

.

.

32+1

32+1

.

.

16+0

16+0

.

.

8+1

8+1

.

.

4+1

4+1

.

.

2+1

2+1

.

.

1

1

-8

-8

D

D

=

=

-1

-1

.

.

32+1

32+1

.

.

16+1

16+1

.

.

8+0

8+0

.

.

4+0

4+0

.

.

2+0

2+0

.

.

1

1

-17

-17

D

D

=

=

-1

-1

.

.

32+0

32+0

.

.

16+1

16+1

.

.

8+1

8+1

.

.

4+1

4+1

.

.

2+1

2+1

.

.

1

1

bit poza zakresem -

bit poza zakresem -

odrzucamy

odrzucamy

10111

10111

+11000

+11000

1 01111

1 01111

-9

-9

D

D

= -1

= -1

.

.

16+0

16+0

.

.

8+1

8+1

.

.

4+1

4+1

.

.

2+1

2+1

.

.

1

1

-8

-8

D

D

= -1

= -1

.

.

16+1

16+1

.

.

8+0

8+0

.

.

4+0

4+0

.

.

2+0

2+0

.

.

1

1

-17

-17

D

D

=

=

-1

-1

.

.

32+0

32+0

.

.

16+1

16+1

.

.

8+1

8+1

.

.

4+1

4+1

.

.

2+1

2+1

.

.

1

1

bit poza zakresem - nie

bit poza zakresem - nie

odrzucamy

odrzucamy

DODAWANIE LICZB ZE ZNAKIEM

DODAWANIE LICZB ZE ZNAKIEM

background image

Stosujemy zapis U2

Stosujemy zapis U2

Wpiszmy do AX liczbę -9

Wpiszmy do AX liczbę -9

D

D

= 11111111 11110111 = FFF7H

= 11111111 11110111 = FFF7H

Wpiszmy do BX liczbę -8

Wpiszmy do BX liczbę -8

D

D

= 11111111 11111000 = FFF8H

= 11111111 11111000 = FFF8H

11111111 11101111 = -17

11111111 11101111 = -17

D

D

Wykonajmy dodawanie: -9

Wykonajmy dodawanie: -9

D

D

+ (-8

+ (-8

D

D

)

)

Bit znaku wskazuje na liczbę

Bit znaku wskazuje na liczbę

ujemną

ujemną

DODAWANIE LICZB ZE ZNAKIEM

DODAWANIE LICZB ZE ZNAKIEM

background image

Rozkaz negacji (uzupełnienia do dwóch) bajtu lub słowa -

NEG

, jest rozkazem, który odwraca znak zmiennej zawartej w

pamięci lub w rejestrach powszechnego stosowania.

NEG odejmuje argument (operand) przeznaczenia od zera,
tworząc w ten sposób uzupełnienie do dwóch.

-9

-9

D

D

= 11111111 11110111 = FFF7H

= 11111111 11110111 = FFF7H

NEGACJA LUB UZUPEŁNIENIE DO

NEGACJA LUB UZUPEŁNIENIE DO

DWÓCH - NEG

DWÓCH - NEG

background image

A jak realizować dodawanie liczb ze znakiem stosując NEG?

A jak realizować dodawanie liczb ze znakiem stosując NEG?

Zawartość rejestrów przed dodawaniem

Zawartość rejestrów przed dodawaniem

Zawartość rejestrów po dodawaniu

Zawartość rejestrów po dodawaniu

Realizacja dodawania

Realizacja dodawania

-9

-9

D

D

+ (-8

+ (-8

D

D

)

)

11111111 11101111 = -17

11111111 11101111 = -17

D

D

NEGACJA LUB UZUPEŁNIENIE DO

NEGACJA LUB UZUPEŁNIENIE DO

DWÓCH - NEG

DWÓCH - NEG

background image

Odejmowanie całkowite dokonujemy za pomocą rozkazu SUB

Odejmowanie całkowite dokonujemy za pomocą rozkazu SUB

SUB argument1,argument2

SUB argument1,argument2

rejestr

rejestr

komórka pamięci

komórka pamięci

rejestr

rejestr

komórka pamięci

komórka pamięci

dana

dana

natychmiastowa

natychmiastowa

Od

Od

argumentu1

argumentu1

odejmij

odejmij

argument2

argument2

i wynik zapisz w

i wynik zapisz w

argument1

argument1

Przykłady:

Przykłady:

SUB AL,BL

SUB AL,BL

SUB AL,4Ch

SUB AL,4Ch

Rozkaz ten ma wpływ na następujące znaczniki rejestru flagowego

Rozkaz ten ma wpływ na następujące znaczniki rejestru flagowego

(zależne od wyniku odejmowania):

(zależne od wyniku odejmowania):

OF - flaga nadmiaru

OF - flaga nadmiaru

(przepełnienia)

(przepełnienia)

SF - flaga znaku

SF - flaga znaku

ZF - flaga zera

ZF - flaga zera

AF - flaga przeniesienia

AF - flaga przeniesienia

pomocniczego

pomocniczego

PF - flaga parzystości

PF - flaga parzystości

CF - flaga

CF - flaga

przeniesienia

przeniesienia

ODEJMOWANIE

ODEJMOWANIE

background image

Odejmowanie całkowite bajtów lub słów z uwzględnieniem pożyczki
dokonujemy za pomocą rozkazu SBB

SBB argument1,argument2

SBB argument1,argument2

rejestr

rejestr

komórka pamięci

komórka pamięci

rejestr

rejestr

komórka pamięci

komórka pamięci

dana natychmiastowa

dana natychmiastowa

Od

Od

argumentu1

argumentu1

odejmij

odejmij

argument2

argument2

i wartość flagi przeniesienia CF

i wartość flagi przeniesienia CF

a wynik zapisz w

a wynik zapisz w

argument1

argument1

Rozkaz ten ma wpływ na następujące znaczniki rejestru flagowego (zależne od

Rozkaz ten ma wpływ na następujące znaczniki rejestru flagowego (zależne od

wyniku odejmowania):

wyniku odejmowania):

OF - flaga nadmiaru

OF - flaga nadmiaru

(przepełnienia)

(przepełnienia)

SF - flaga znaku

SF - flaga znaku

ZF - flaga zera

ZF - flaga zera

AF - flaga przeniesienia

AF - flaga przeniesienia

pomocniczego

pomocniczego

PF - flaga parzystości

PF - flaga parzystości

CF - flaga

CF - flaga

przeniesienia

przeniesienia

Rozkaz ten musi występować zawsze po rozkazie SUB, gdyż dopiero po rozkazie

Rozkaz ten musi występować zawsze po rozkazie SUB, gdyż dopiero po rozkazie

SUB może być wiadomo, że występuje (bądź nie występuje) przeniesienie. W

SUB może być wiadomo, że występuje (bądź nie występuje) przeniesienie. W

przypadku gdyby nie było przeniesienia to rozkaz SBB zadziała dokładnie tak jak

przypadku gdyby nie było przeniesienia to rozkaz SBB zadziała dokładnie tak jak

rozkaz SUB.

rozkaz SUB.

ODEJMOWANIE

ODEJMOWANIE

background image

Odejmowanie liczb w kodzie BCD dokonujemy za pomocą rozkazu SUB
(SBB) z zastosowaniem instrukcji DAS.

DAS dokonuje poprawki dziesiętnej po odejmowaniu dwójkowym w kodzie
BCD. Liczba podlegająca korekcji musi się zawsze znajdować w rejestrze
AL

skoryguj wynik w akumulatorze AL po

skoryguj wynik w akumulatorze AL po

odejmowaniu BCD z pożyczką lub bez

odejmowaniu BCD z pożyczką lub bez

DAS

DAS

Algorytm dla DAS jest następujący:

Algorytm dla DAS jest następujący:

AL

AL

0

0

3

3

7

7

4

4

częśćY

częśćY

częśćX

częśćX

Jeśli AF=1 lub

Jeśli AF=1 lub

częśćX

częśćX

> 9

> 9

to [AL]=[AL]-06h oraz AF=1

to [AL]=[AL]-06h oraz AF=1

AF - flaga przeniesienia

AF - flaga przeniesienia

pomocniczego

pomocniczego

CF - flaga

CF - flaga

przeniesienia

przeniesienia

Jeśli CF=1 lub

Jeśli CF=1 lub

częśćY

częśćY

> 9

> 9

to [AL]=[AL]-60h oraz CF=1

to [AL]=[AL]-60h oraz CF=1

ODEJMOWANIE

ODEJMOWANIE

background image

Rozkaz negacji

Rozkaz negacji

NEG

NEG

jest użyteczny tam, gdzie nie wystarcza rozkaz

jest użyteczny tam, gdzie nie wystarcza rozkaz

odejmowania SUB, a mianowicie podczas odejmowania argumentu np. typu

odejmowania SUB, a mianowicie podczas odejmowania argumentu np. typu

rejestr lub komórka pamięci od wartości natychmiastowej.

rejestr lub komórka pamięci od wartości natychmiastowej.

Np. jeżeli zechcemy odjąć 35h od wartości w AL (np. AL=30h), to nie możemy

Np. jeżeli zechcemy odjąć 35h od wartości w AL (np. AL=30h), to nie możemy

tego zrobić za pomocą rozkazu SUB, gdyż wartość natychmiastowa nie stanowi

tego zrobić za pomocą rozkazu SUB, gdyż wartość natychmiastowa nie stanowi

przecież przeznaczenia:

przecież przeznaczenia:

SUB 35,AL

SUB 35,AL

;jest niedozwolony

;jest niedozwolony

Dlatego:

Dlatego:

NEG AL

NEG AL

ADD AL,35

ADD AL,35

ODEJMOWANIE

ODEJMOWANIE

background image

Mnożenie liczb całkowitych bez znaku dokonujemy za pomocą

Mnożenie liczb całkowitych bez znaku dokonujemy za pomocą

rozkazu MUL

rozkazu MUL

MUL argument2

MUL argument2

rejestr (rej)

rejestr (rej)

komórka pamięci (mem)

komórka pamięci (mem)

Pomnóż

Pomnóż

argumentu2

argumentu2

przez niejawny argument1 (wartość rejestru AL

przez niejawny argument1 (wartość rejestru AL

lub AX)

lub AX)

a wynik zapisz w

a wynik zapisz w

rejestrze AL lub AX

rejestrze AL lub AX

Rozkaz ten ma wpływ na następujące znaczniki rejestru flagowego

Rozkaz ten ma wpływ na następujące znaczniki rejestru flagowego

(zależne od wyniku):

(zależne od wyniku):

OF - flaga nadmiaru

OF - flaga nadmiaru

(przepełnienia)

(przepełnienia)

CF - flaga

CF - flaga

przeniesienia

przeniesienia

przy czym jeśli ”górna” połowa wyniku znajdująca się w rejestrach

przy czym jeśli ”górna” połowa wyniku znajdująca się w rejestrach

AH lub DX zawiera same zera to OF i CF ustawiane są na wartość 0, w

AH lub DX zawiera same zera to OF i CF ustawiane są na wartość 0, w

przeciwnym razie na 1.

przeciwnym razie na 1.

MNOŻENIE

MNOŻENIE

background image

Przykład mnożenia liczb całkowitych bez znaku

Przykład mnożenia liczb całkowitych bez znaku

Wynik=6A0

Wynik=6A0

CF=1

CF=1

OF=1

OF=1

CF=1

CF=1

OF=1

OF=1

Wynik=5D4A8

Wynik=5D4A8

0

0

MNOŻENIE

MNOŻENIE

background image

IMUL argument2

IMUL argument2

rejestr (rej)

rejestr (rej)

komórka pamięci (mem)

komórka pamięci (mem)

Pomnóż

Pomnóż

argumentu2

argumentu2

przez niejawny argument1 (wartość rejestru AL

przez niejawny argument1 (wartość rejestru AL

lub AX)

lub AX)

a wynik zapisz w

a wynik zapisz w

rejestrze AL lub AX

rejestrze AL lub AX

Rozkaz ten ma wpływ na znaczniki rejestru flagowego (zależne od

Rozkaz ten ma wpływ na znaczniki rejestru flagowego (zależne od

wyniku): OF i CF

wyniku): OF i CF

Przykład

Przykład

mnożenia liczb całkowitych ze znakiem

mnożenia liczb całkowitych ze znakiem

Wynik=FFFFDB9

Wynik=FFFFDB9

8

8

1234 h * (-2h) =

1234 h * (-2h) =

FFFFDB98

FFFFDB98

4660

4660

D

D

* (-2

* (-2

D

D

) =-

) =-

9320

9320

D

D

=

=

MNOŻENIE LICZB CAŁKOWITYCH ZE

MNOŻENIE LICZB CAŁKOWITYCH ZE

ZNAKIEM

ZNAKIEM

background image

MOV AL,3 ;pierwszy czynnik=003

MOV AL,3 ;pierwszy czynnik=003

MOV BL,2 ;drugi czynnik=002

MOV BL,2 ;drugi czynnik=002

MUL BL

MUL BL

;AX=0006H=0006

;AX=0006H=0006

MOV AL,3 ;pierwszy czynnik=003

MOV AL,3 ;pierwszy czynnik=003

MOV BL,2 ;drugi czynnik=002

MOV BL,2 ;drugi czynnik=002

IMUL BL

IMUL BL

;AX=0006H=0006

;AX=0006H=0006

Obydwa rozkazy dają identyczne wyniki dopóty dopóki liczby ze

Obydwa rozkazy dają identyczne wyniki dopóty dopóki liczby ze

znakiem są zgodne z liczbami bezznakowymi

znakiem są zgodne z liczbami bezznakowymi

MOV AL,FFH ;pierwszy czynnik=255

MOV AL,FFH ;pierwszy czynnik=255

MOV BL,2 ;drugi czynnik=002

MOV BL,2 ;drugi czynnik=002

MUL BL

MUL BL

;AX=01FEH=00510

;AX=01FEH=00510

Obydwa rozkazy wykonują operacje na tych samych liczbach ale wyniki

Obydwa rozkazy wykonują operacje na tych samych liczbach ale wyniki

są inne

są inne

MOV AL,FFH ;pierwszy czynnik=-001

MOV AL,FFH ;pierwszy czynnik=-001

MOV BL,2 ;drugi czynnik=002

MOV BL,2 ;drugi czynnik=002

IMUL BL

IMUL BL

;AX=FFFEH=-00002

;AX=FFFEH=-00002

MUL

MUL

MUL

MUL

IMUL

IMUL

IMUL

IMUL

MOV AX,FFFFH ;pierwszy czynnik=65535

MOV AX,FFFFH ;pierwszy czynnik=65535

MOV BX,2 ;drugi czynnik=0002

MOV BX,2 ;drugi czynnik=0002

MUL BX

MUL BX

;DX:AX=0001H:FFFEH=131070

;DX:AX=0001H:FFFEH=131070

MOV AX,FFFFH ;pierwszy czynnik=-0001

MOV AX,FFFFH ;pierwszy czynnik=-0001

MOV BX,2 ;drugi czynnik=002

MOV BX,2 ;drugi czynnik=002

IMUL BX

IMUL BX

;DX:AX=FFFFH:FFFEH=-00002

;DX:AX=FFFFH:FFFEH=-00002

lub

lub

MNOŻENIE

MNOŻENIE

background image

Dzielenie liczb całkowitych bez znaku dokonujemy za pomocą

Dzielenie liczb całkowitych bez znaku dokonujemy za pomocą

rozkazu DIV

rozkazu DIV

DIV argument2

DIV argument2

rejestr (rej)

rejestr (rej)

komórka pamięci (mem)

komórka pamięci (mem)

Podziel niejawny argument1 (wartość rejestru AL lub AX) przez

Podziel niejawny argument1 (wartość rejestru AL lub AX) przez

argumentu2

argumentu2

a wynik zapisz w

a wynik zapisz w

rejestrze AL lub AX

rejestrze AL lub AX

natomiast resztę

natomiast resztę

z dzielenia w AH lub DX

z dzielenia w AH lub DX

Gdy iloraz nie pomieści się w AL czy AX, czy też nawet w

Gdy iloraz nie pomieści się w AL czy AX, czy też nawet w

przydzielonej mu specjalnej komórce pamięci, procesor

przydzielonej mu specjalnej komórce pamięci, procesor

wygeneruje przerwanie nr 0 (błąd dzielenia przez zero) i

wygeneruje przerwanie nr 0 (błąd dzielenia przez zero) i

poinformuje nas o tym.

poinformuje nas o tym.

DZIELENIE

DZIELENIE

background image

Przykład dzielenia liczb całkowitych bez znaku

Przykład dzielenia liczb całkowitych bez znaku

iloraz

iloraz

reszta

reszta

DZIELENIE

DZIELENIE

background image

IDIV argument2

IDIV argument2

rejestr (rej)

rejestr (rej)

komórka pamięci (mem)

komórka pamięci (mem)

Podziel niejawny argument1 (wartość rejestru AL lub AX) przez

Podziel niejawny argument1 (wartość rejestru AL lub AX) przez

argumentu2

argumentu2

a wynik zapisz w

a wynik zapisz w

rejestrze AL lub AX

rejestrze AL lub AX

natomiast resztę

natomiast resztę

z dzielenia w AH lub DX

z dzielenia w AH lub DX

Podczas dzielenia ze znakiem, może nastąpić zniszczenie bitu znaku

Podczas dzielenia ze znakiem, może nastąpić zniszczenie bitu znaku

(nastąpi przepełnienie) i wówczas generowane jest przerwanie INT 0.

(nastąpi przepełnienie) i wówczas generowane jest przerwanie INT 0.

Dla rozkazu IDIV obowiązują następujące zasady dotyczące znaków

Dla rozkazu IDIV obowiązują następujące zasady dotyczące znaków

argumentów i wyniku rozkazów:

argumentów i wyniku rozkazów:

DZIELENIE LICZB CAŁKOWITYCH ZE

DZIELENIE LICZB CAŁKOWITYCH ZE

ZNAKIEM

ZNAKIEM

background image

ROZKAZY ARYTMETYCZNE

ROZKAZY ARYTMETYCZNE

Zobacz

jak

może

wyglądać

realizacja

rozkazów

arytmetycznych zrealizowana z wykorzystaniem symulatora
procesora SMS32v50

program:

in_arith1.asm

background image

DZIĘKUJĘ ZA UWAGĘ !

DZIĘKUJĘ ZA UWAGĘ !


Document Outline


Wyszukiwarka

Podobne podstrony:
architektura sk 05
architektura sk 01
architektura sk 04
architektura sk 03
architektura sk 08
architektura sk 09
architektura sk 13
architektura sk 06
architektura sk 11
architektura sk 02
architektura sk 12
architektura sk 10
architektura sk 05
architektura sk 01
renowator zabytkow architektury 712[07]
00 Program nauki Renowator zabytków architektury 712 07
07 OZE 2014 01 10 sk
USTAWA 20.07.2010, Architektura Krajobrazu, PRAWA I NORMY, Ustawy
07.10.18 Architektura - styl romański i styl gotycki

więcej podobnych podstron