Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
loktuhin_arhitektura_kompjutera_kniga_2.pdf
Скачиваний:
89
Добавлен:
13.04.2015
Размер:
704 Кб
Скачать
☆

Приложение 6

Таблица сложения 16-ричных цифр (символов)

+

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

0

0

1

2

3

4

5

6

7

8

9

A B C D E

F

1

1

2

3

4

5

6

7

8

9

A B C D E

F

10

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

2

3

4

5

6

7

8

9

A B C D E

F

10

11

3

3

4

5

6

7

8

9

A B C D E

F

10

11

12

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

4

5

6

7

8

9

A B C D E

F

10

11

12

13

5

5

6

7

8

9

A B C D E

F

10

11

12

13

14

6

6

7

8

9

A

B

C

D

E

F

10

11

12

13

14

15

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7

7

8

9

A

B

C

D

E

F

10

11

12

13

14

15

16

8

8

9

A

B

C

D

E

F

10

11

12

13

14

15

16

17

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9

9

A

B

C

D

E

F

10

11

12

13

14

15

16

17

18

A

A

B

C

D

E

F

10

11

12

13

14

15

16

17

18

19

B

B

C

D

E

F

10

11

12

13

14

15

16

17

18

19

1A

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C

C

D

E

F

10

11

12

13

14

15

16

17

18

19

1A

1B

D

D

E

F

10

11

12

13

14

15

16

17

18

19

1A

1B

1C

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

E

E

F

10

11

12

13

14

15

16

17

18

19

1A

1B

1C

1D

F

F

10

11

12

13

14

15

16

17

18

19

1A

1B

1C

1D

1E

87

Примечание. При сложении двух 16-ричных чисел последовательно складываются соответствующие i-е цифры слагаемых. Получаемая при этом единица переноса прибавляется к сумме цифр слагаемых, получаемой в следующем (i + 1)-м разряде.

Приложение 7

Темы практических занятий

илабораторных работ

1.Представление данных. Машинные коды (ПЗ, приложение 1,

п. 1.1–1.5, КР).

2.Выполнение арифметических операций в ЭВМ, формирование физического адреса (ПЗ, приложение 1, п. 1.7, 2.1.2, КР).

3.Изучение состава автоматизированной обучающей системы (АОС) «Микропроцессоры 80х86». Принципы работы с АОС при проведении тестирования (ЛР).

4.Кодирование последовательности команд МП 80х86 для заданного варианта выполняемой операции (ПЗ, затем их проверка в ходе ЛР по теме 6, приложение 2, п. 2.1–2.5, О, Т).

5.Форматы и режимы адресаций МП 80х86. Формирование кодов команд для различных режимов адресации данных (ПЗ, ЛР по аналогии с темой 4, приложение 3, п. 2.6–2.7, О, Т).

6.Элементы программирования на ассемблере IBM PC, разработка фрагментов программ с использованием команд и директив ассемблера (ПЗ, п. 3.1, О, Т).

7.Разработка и отладка линейных программ для создания исполняемых модулей с расширением .СОМ (ПЗ – разработка программы, ЛР – ее отладка, приложение 3, п. 3.2–3.3, О, Т).

88

8.Разработка и отладка циклических программ для создания исполняемых модулей с расширением .EXE (ПЗ и ЛР по аналогии с п. 7, приложение 4, варианты 1–10, п. 3.4–3.5, О).

9.Разработка и отладка 32-разрядных программ, их отладка (ЛР, приложение 2, п. 3.6, О).

10.Разработка программы с использованием процедуры, а затем с макроопределением вывода на экран, например, фамилий известных футболистов (ЛР, п. 3.7, О).

11.Разработка программ с использованием цепочечных команд, их отладка (ЛР, приложение 5, п. 3.8, О).

Примечания. 1. Принятые сокращения: ЛР – лабораторная работа, ПЗ – практические занятия, Т – тестирование, КР – контрольная работа, О – отчет,

п.– разделы учебного пособия.

2.При выполнении тем 4 и 5 для правильности кодирования команд можно также применять транслятор trans.exe. При этом следует воспользоваться порядком работы (п. 3.3.3), в котором исключить п. 5–7, а в п. 4. вместо команды tasm.exe и расширения .asm задавать trans.exe и .txt – как последовательность кодов команд таблицы 2.2.

Приложение 8

Базовая система команд МП 80Х86 (или 8086)

При описании команд используются следующие обозначения: reg – один из РОН в соответствии со следующей таблицей:

reg

W = 1

W = 0

reg

W = 1

W = 0

sreg

Сегментный регистр

000

AX

AL

001

CX

CL

00

ES

010

DX

DL

011

BX

BL

01

CS

100

SP

AH

101

BP

CH

10

SS

110

SI

DH

111

DI

BH

11

DS

D – если D = l, то в reg, если D = 0, то из reg;

W – если W = l, то команда оперирует словом, если W = 0, то – байтом;

S:W = Х0 – один байт данных, 01 – два байта данных, 11 – один байт данных, расширенный со знаком до 16 бит;

V – если V = 0, то счетчик равен 1, если V = l, то счетчик в CL; Z – применяется в цепочечных командах для сравнения с ZF;

data L, data H – младшая и старшая часть (если W = l) непосредственного операнда; mod – поле режима адресации;

r/m – при mod = 11 интерпретируется как reg, при mod ¹ 11 определяет эффективный адрес (ЕА) операнда в памяти в соответствии со следующей таблицей, в которой disp L, disp H,L – 8- и 16-битовые смещения в третьем или в третьем-четвертом байтах команды:

mod

00

01

10

r/m

 

 

 

89

000

 

(BX) + (SI)

 

(BX) + (SI) + disp L

 

(BX) + (SI) + disp H,L

 

001

 

(BX) + (DI)

 

(BX) + (DI) + disp L

 

(BX) + (DI) + disp H,L

 

010

 

(BP) + (SI)

 

(BP) + (SI) + disp L

 

(BP) + (SI) + disp H,L

 

011

 

(BP) + (DI)

 

(BP) + (DI) + disp L

 

(BP) + (DI) + disp H,L

 

100

 

(SI)

 

(SI) + disp L

 

 

(SI) + disp H,L

 

 

101

 

(DI)

 

(DI) + disp L

 

 

(DI) + disp H,L

 

 

110

 

disp H,L

 

(BP) + disp L

 

 

(BP) + disp H,L

 

 

111

 

(BX)

 

(BX) + disp L

 

 

(BX) + disp H,L

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Команды передачи данных

 

 

Команды

 

 

1-й байт

2-й байт

 

3-й байт

 

4-й байт

 

 

1

2

3

 

 

4

 

5

MOV – передать

 

 

 

 

 

 

 

 

 

Регистр или память

100010DW

mod reg r/m

 

 

 

 

в/из регистра

 

 

 

 

 

 

 

 

 

Непосредственный

1100011W

mod 000 r/m

data L

 

data H

операнд в регистр

 

 

 

 

 

 

 

(w = 1)

или в память

 

 

 

 

 

 

 

 

 

Непосредственный

1011Wreg

data L

 

data H,

 

 

 

операнд в регистр

 

 

 

 

 

(w = 1)

 

 

 

 

 

 

 

 

 

 

 

Продолжение таблицы

 

 

1

2

3

 

 

4

 

5

Память в

 

1010000W

Мл адрес EA

Ст адрес EA

 

 

 

аккумулятор

 

 

 

 

 

 

 

 

 

(спецформат)

 

 

 

 

 

 

 

 

 

Аккумулятор в

1010001W

Мл. адрес

 

Cт адрес EA

 

 

 

память

 

 

 

EA

 

 

 

 

 

(спецформат)

 

 

 

 

 

 

 

 

 

Регистр или память

10001110

mod0sreg r/m

 

 

 

 

в регистр сегмента

 

 

 

 

 

 

 

 

 

Регистр сегмента

10001100

mod0sreg r/m

 

 

 

 

в регистр или память

 

 

 

 

 

 

 

 

 

PUSH – вкл. в стек

 

 

 

 

 

 

 

 

 

Регистр/память

11111111

mod 110 r/m

 

 

 

 

Регистр

 

 

01010reg

 

 

 

 

 

 

 

(спецформат)

 

 

 

 

 

 

 

 

 

Регистр сегмента

000sreg110

 

 

 

 

 

 

 

POP – исключить

 

 

 

 

 

 

 

 

 

Регистр/память

10001111

mod 000 r/m

 

 

 

 

из стека

 

 

 

 

 

 

 

 

 

 

Регистр

 

 

01011reg

 

 

 

 

 

 

 

(спецформат)

 

 

 

 

 

 

 

 

 

Регистр сегмента

000sreg111

 

 

 

 

 

 

 

XCHG – обменять

 

 

 

 

 

 

 

 

 

Регистр/память

1000011W

mod reg r/m

 

 

 

 

с регистром

 

 

 

 

 

 

 

 

 

Регистр

 

 

10010reg

 

 

 

 

 

 

 

90

с аккумулятором

 

 

 

 

IN – ввести из

 

 

 

 

Фиксирован. порта

1110010W

Порт

 

 

Переменного порта

1110110W

 

 

 

OUT – вывести в

 

 

 

 

Переменный порт

1110111W

 

 

 

Фиксир. порт

1110110W

Порт

 

 

XLAT – передать

11010111

 

 

 

байт в AL

 

 

 

 

LEA – загрузить EA

10001101

mod reg r/m

 

 

в регистр

 

 

 

 

LDS – загрузить

11000101

mod reg r/m

 

 

указатель в DS

 

 

 

 

LES – загрузить

11000100

mod reg r/m

 

 

указатель в ES

 

 

 

 

LAHF – загрузить

10011111

 

 

 

в AH признаки

 

 

 

 

SAHF – запомнить

10011110

 

 

 

AH в регистре F

 

 

 

 

PUSHF – включить

10011100

 

 

 

признаки

 

 

 

 

POPF – исключить

10011101

 

 

 

признаки

 

 

 

 

 

Команды арифметических операций

 

Команды

1-й байт

2-й байт

3-й байт

4-й байт

1

2

3

4

5

ADD – сложить

 

 

 

 

Регистр/память

000000DW

mod reg r/m

 

 

с регистром

 

 

 

 

Непосредственный

100000SW

mod 000 r/m

data L

data H

операнд c

 

 

 

(SW = 01)

регистром/памятью

 

 

 

 

Непосредственный

0000010W

data L

data H,

 

операнд с аккум.

 

 

(w = 1)

 

ADC – сложить

 

 

 

 

с переносом

 

 

 

 

Регистр/память

000100DW

mod reg r/m

 

 

с регистром

 

 

 

 

Непосредственный

100000SW

mod 010 r/m

data L

data H

операнд с

 

 

 

(SW = 01)

регистром/памятью

 

 

 

 

Непосредственный

0001010W

data L

data H,

 

операнд

 

 

(w = 1)

 

с аккумулятором

 

 

 

 

INC – инкремент

 

 

 

 

Регистра/памяти

1111111W

mod 000 r/m

 

 

Регистра

01000reg

 

 

 

91

AAA – ASCII –

00110111

 

 

 

 

коррекция сложения

 

 

 

 

 

DA – десятичная

00100111

 

 

 

 

корр. сложения

 

 

 

 

 

SUB – вычесть

 

 

 

 

 

Регистр/память

001010DW

mod reg r/m

 

 

 

с регистром

 

 

 

 

 

Непосредственный

100000SW

mod 101 r/m

 

data L

data H

операнд

 

 

 

 

(SW = 01)

из регистра/памяти

 

 

 

 

 

Непосредственный

0010110W

data L

 

data H,

 

операнд

 

 

 

(w = 1)

 

из аккумулятора

 

 

 

 

 

SBB – вычесть

 

 

 

 

 

с заемом

 

 

 

 

 

Регистр/память

000110DW

mod reg r/m

 

 

 

с регистром

 

 

 

 

 

Непосредственный

100000SW

mod 011 r/m

 

data L

data H

операнд

 

 

 

 

(SW = 01)

из регистра/памяти

 

 

 

 

 

Непосредственный

0010110W

data L

 

data H,

 

операнд

 

 

 

(w = 1)

 

из аккумулятора

 

 

 

 

 

 

 

 

 

Продолжение таблицы

1

2

3

 

4

5

DEC – декремент

 

 

 

 

 

Регистр/память

1111111W

mod 001 r/m

 

 

 

Регистр

01001reg

 

 

 

 

NEG – изменить

1111011W

mod 011 r/m

 

 

 

знак

 

 

 

 

 

CMP – сравнить

 

 

 

 

 

Регистр/память

001110DW

mod reg r/m

 

 

 

и регистр

 

 

 

 

 

Непосредственный

100000SW

mod 111 r/m

 

data L

data H

операнд

 

 

 

 

(SW = 01)

c регистром/памятью

 

 

 

 

 

Непосредственный

0011110W

data L

 

data H,

 

операнд с аккум.

 

 

 

(w = 1)

 

AAS – ASCII

00111111

 

 

 

 

коррекция

 

 

 

 

 

вычитания

 

 

 

 

 

DAS – десятичная

00101111

 

 

 

 

коррекция

 

 

 

 

 

вычитания

 

 

 

 

 

IMUL – умножение

1111011W

mod 101 r/m

 

 

 

целых со знаком

 

 

 

 

 

MUL – умножение

1111011W

mod 100 r/m

 

 

 

 

 

 

 

 

 

92

без знака

 

 

 

 

AAM –АSCII

11010100

 

 

 

коррекция

 

 

 

 

умножения

 

 

 

 

DIV – деление

1111011W

mod 110 r/m

 

 

без знака

 

 

 

 

IDIV – деление

1111011W

mod 111 r/m

 

 

со знаком

 

 

 

 

AAD – ASCII

11010101

 

 

 

коррекция деления

 

 

 

 

CBW –

10011000

 

 

 

преобразование

 

 

 

 

байта в слово

 

 

 

 

CWD –

10011001

 

 

 

преобразование

 

 

 

 

слова

 

 

 

 

в двойное слово

 

 

 

 

 

Команды логических операций и сдвигов

 

Команды

1-й байт

2-й байт

3-й байт

4-й байт

1

2

3

4

5

NOT – инверсия

1111011W

mod 010 r/m

 

 

SHL/SAL – сдвиг

110100VW

mod 100 r/m

 

 

логич./арифм. влево

 

 

 

 

SHR – сдвиг

110100VW

mod 101 r/m

 

 

логический вправо

 

 

 

 

SAR – сдвиг

110100VW

mod 111 r/m

 

 

арифметический

 

 

 

 

вправо

 

 

Продолжение таблицы

 

 

 

1

2

3

4

5

ROL – сдвиг

110100VW

mod 000 r/m

 

 

циклический влево

 

 

 

 

ROR – сдвиг

110100VW

mod 001 r/m

 

 

циклический вправо

 

 

 

 

RCL – сдвиг

110100VW

mod 010 r/m

 

 

циклический влево

 

 

 

 

через перенос

 

 

 

 

RCR – сдвиг цикл.

110100VW

mod 011r/m

 

 

впр. через перенос

 

 

 

 

AND – коньюнкция

 

 

 

 

Регистр/память

001000DW

mod reg r/m

 

 

с регистром

 

 

 

 

Непосредственный

1000000W

mod 100 r/m

data L

data H (w = 1)

операнд c

 

 

 

 

регистром/памятью

 

 

 

 

с аккумулятором

0010010W

data L

data H (w = 1)

 

93

TEST – И без записи

 

 

 

 

результата

 

 

 

 

Непосред. операнд

101010DW

data L

data H

 

с аккумулятором

 

 

 

 

Регистр/память

1000010W

mod reg r/m

 

 

с регистром

 

 

 

 

Непосредственный

1111011W

mod 000r/m

data L

data H (w = 1)

операнд

 

 

 

 

c регистром/памятью

 

 

 

 

OR – дизьюнкция

 

 

 

 

ИЛИ

 

 

 

 

Регистр/память

000010DW

mod reg r/m

 

 

с регистром

 

 

 

 

Непосредственный

1000000W

mod 001r/m

 

 

операнд

 

 

 

 

c регистром/памятью

 

 

 

 

с аккумулятором

0000110W

data L

data H (w = 1)

 

XOR – ИЛИ

 

 

 

 

исключающее

 

 

 

 

Регистр/память

001100DW

mod reg r/m

 

 

с регистром

 

 

 

 

Непосредственный

1000000W

mod 001r/m

data L

data H (w = 1)

операнд c

 

 

 

 

регистром/памятью

 

 

 

 

с аккумулятором

0011010W

data L

data H (w = 1)

 

Команды операций с цепочками данных

 

 

 

 

Команды

 

 

 

1-й байт

 

 

REP – повторить

 

 

 

1111001Z

 

 

MOVS – передать байт/слово: [DI] ← [SI]

 

1010010W

 

 

CMPS – сравнить байт/слово: [DI] ← [SI]

 

1010011W

 

 

SCAS – сканировать байт/слово: асс ← [DI]

 

1010111W

 

 

LODS – загрузить байт/слово из

 

1010110W

 

 

[SI] в AL/AX

 

 

 

 

 

 

STOS – запомнить байт/слово из AL/AX в [DI]

 

1010101W

 

 

Команды передачи управления (безусловные)

 

Команды

1-й байт

 

 

2-й байт

3-й байт

CALL – ВЫЗОВ

 

 

 

 

 

 

Прямой в сегменте

11101000

 

 

Мл смещение

Ст смещение

Косвенный в сегменте

11111111

 

 

mod 010 r/m

 

Прямой межсегментный

10011010

 

 

Мл смещение

Ст смещение

 

 

 

сегмент (4-й байт)

сег (5-й байт)

Косвенный межсегментный

11111111

 

 

mod 011 r/m

 

94

(mod ¹ 11)

 

 

 

 

 

 

JMP – БЕЗУСЛ ПЕРЕХОД

 

 

 

 

 

Прямой в сегменте

 

11101001

Мл смещение

Ст смещение

Прямой в сегменте короткий

11101011

Смещение

 

Косвенный в сегменте

 

11111111

mod 100 r/m

 

Прямой межсегментный

 

11101010

Мл смещение

Ст смещение

 

 

 

 

сегмент (4-й байт)

сегм (5-й байт)

Косвенный межсегментный

 

11111111

mod 101 r/m

 

mod ¹ 11

 

 

 

 

 

 

RET – ВОЗВРАТ

 

 

 

 

 

В сегменте со сложением

 

11000010

data L

data H

непосредст операнда с SP

 

 

 

 

 

В сегменте

 

 

11000010

 

 

Межсегментный

 

11001011

 

 

Межсегментный со

 

11001010

data L

data H

сложением

 

 

 

 

 

 

непосредственного операнда

 

 

 

 

с SP

 

 

 

 

 

 

 

Команды условных переходов и циклов

 

Команды

Условие

 

1-й

2-й

Условие

 

 

 

байт

байт

 

 

JA/JNBE

CF È ZF = 0

>

77

Смещ

Перейти, если выше /не

 

 

 

 

 

ниже или равно

 

JNC/JAE/

CF = 0

>=

73

Смещ

Выше или равно/не ниже

JNB

 

 

 

 

(нет переноса)

 

JC/JB/

CF = 1

<

72

Смещ

Ниже/не выше или равно

JNAE

 

 

 

 

(есть перенос)

 

JBE/JNA

CF È ZF = 1

<=

76

Смещ

Ниже или равно/не выше

JE/JZ

ZF = 1

=

74

Смещ

Равно/нуль

 

JG/JNLE

(SF+OF)ZF=

>

7F

Смещ

Больше /не меньше и =

 

=0

 

 

 

Продолжение таблицы

 

 

 

 

 

1

2

3

4

5

6

 

JGE/JNL

SF + OF = 0

>=

7D

Смещ

Больше или =/не меньше

JL/JNGE

SF + OF = 1

<

7C

Смещ

Меньше/не больше или =

JLE/JNG

(SF+OF)ZF=

<=

7E

Смещ

Меньше или равно/не равно

 

=1

 

 

 

 

 

JNZ/JNE

ZF = 0

 

75

Смещ

Не равно/не нуль

 

JNO

OF = 0

 

71

Смещ

Нет переполнения

JNP/JPO

PF = 0

 

7B

Смещ

Нет паритета/паритет

 

 

 

 

 

нечетный

 

JNS

SF = 0

 

79

Смещ

Нет знака (отрицание)

JO

OF = 1

 

70

Смещ

Есть переполнение

JP/JPE

PF = 1

 

7A

Смещ

Есть паритет – четный

JS

SF = 1

 

78

Смещ

Есть знак (отрицательный)

JCNX

(CX) = 0

 

E3

Смещ

Содержимое регистра CX = 0

95

LOOP

(CX) ¹ 0

E2

Смещ

Зациклить CX раз

LOOPZ/

(CX) ¹ 0,

E1

Смещ

Зациклить до нуля/равно

LOOPE

ZF = 1

 

 

 

LOOPNZ/

(CX) ¹ 0,

E0

Смещ

Зациклить до нуля/не равно

LOOPNE

ZF = 0

 

 

 

Примечание. Термины больше, меньше относятся к знаковым числам, представленным в ДК, а выше, ниже – к беззнаковым.

Команды прерывания

 

Команды

1-й байт

2-й байт

INT – прерывание

11001101

Тип прерывания

INT 3 – прерывание типа 3

11001100

 

INTO – прерывание по переполнению

11001110

 

IRET – возврат из прерывания

11001111

 

Команды управления микропроцессором

Команды

1-й байт

2-й байт

CLC – сброс переноса

11111000

 

CMC – дополнение переноса11110101

 

STC – установка переноса11111001

 

STD – установка направления11111101

 

CLD – сброс направления11111100

 

CLI – сброс прерываний

11111010

 

STI – установка прерываний11111011

 

HLT – останов

11110100

 

WAIT – ожидание

10011011

 

ESC – обращение к сопроцес11011xxx.

mod yyy m

LOCK – префикс блокировки11110000

 

Префикс замены сегмента: 001sreg110

СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ

1.Григорьев, В.Л. Микропроцессор i486. Архитектура и программирование : в 4 кн. – Кн. 1 : Программная архитектура. – М. : ГРАНАЛ, 1993. – 346 с.

2.Григорьев, В.Л. Программирование однокристальных микропроцессоров. – М. : Энергоатомиздат, 1987. – 288 с.

3.Зубков, С.В. Assembler для DOS, Windows и UNIX. – М. : ДМК Пресс, 2000. – 608 с.

4.Локтюхин, В.Н. Основы программирования на ассемблере IBM PC. – М. : Горячая линия–Телеком, 2007. – 88 с.

96

5.Локтюхин, В.Н. Структура персональных компьютеров : учебное пособие. – Рязань : Сервис, 1999. –140 с.

6.Локтюхин, В.Н. Микропроцессорные системы. Проектирование аппаратных и программных средств : учебное пособие. – Рязань : Сервис, 1998. – 100 с.

7.Локтюхин, В.Н. Микропроцессорные системы. Организация и проектирование интерфейса ввода-вывода : учебное пособие. – Рязань : Сервис, 1998. – 72 с.

8.Локтюхин, В.Н. Микропроцессоры Intel 80x86. Архитектура и программирование : методические указания к лабораторным работам

/РГРТА. – Рязань, 2003. – 48 с.

9.Локтюхин, В.Н. Проектирование микропроцессорных систем ввода и преобразования биосигналов / В.Н. Локтюхин, С.И. Мальченко ; РГРТУ. – Рязань, 2007. – 76 с.

10.Майко, Г.В. Ассемблер для IBM PC. – М. : Бизнес–Информ ; Сирин, 1997. – 212 с.

11.Скэнлон, Л. Персональные ЭВМ IBM PC и ХТ. Программирование на языке ассемблера / пер. с англ. – М. : Радио и связь, 1989. – 136 с.

12.Уокерли, Дж. Архитектура и программирование микро-ЭВМ : в 2 кн. / пер. с англ. – М. : Мир, 1984. – Кн. 1. – 486 с.

13.Финогенов, К.Г. Использование языка Ассемблера : учебное пособие для вузов. – М. : Горячая линия–Телеком, 2004. – 438 с.

97

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]