Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Группа команд управления и работы со стеком




 

Команды этой группы предназна­чены для управления работой микропроцессора, устройствами ввода/вывода и стеком. Команды этой группы не оказывают влияния на флаги. Рассмотрим в качестве примера работу неко­торых команд из этой группы.

Команда XTHL — однобайтовая команда с восьмеричным номером 343Q. Является примером наиболее длинных по вре­мени исполнения команд - занимает 18 машинных тактов.

В процессе выполнения команды содержимое регистра L меня­ется на содержимое ячейки памяти по адресу, содержащемуся в указателе стека, и наоборот. Содержимое регистра Н меня­ется на содержимое ячейки памяти по адресу, на единицу боль­шему, чем содержимое указателя стека, и наоборот (рис. 4.12,я). На это уходит пять машинных циклов.

Команды IN <B2>, OUT <B2>. Эти команды предназначены для ввода данных от входного порта в аккумулятор и вывода данных из аккумулятора в выходной порт соответственно. Первая команда имеет восьмеричный код 333 Q, вторая — 323 Q. Обе команды — двухбайтовые. Второй байт обеих команд отве­ден под адрес соответствующего входного и выходного портов. В результате выполнения первой команды данные от входного порта по двунаправленной шине данных передаются в аккумуля­тор. В результате выполнения второй команды данные выводят­ся по той же шине данных из аккумулятора в выходной порт (рис. 4. 12,6, в).

Рис. 4.12. Примеры размещения некоторых команд управления в байтах

 

На этом закончим рассмотрение примеров размещения в бай­тах команд описанных выше групп и перейдем к вопросу о том, как составляется программа решения на ПМ-ЭВМ задачи с ис­пользованием приведенного в приложении 1 списка команд.

 

ПРОГРАММИРОВАНИЕ ПМ-ЭВМ

 

Как уже отмечалось в гл. 3, ПМ-ЭВМ не имеет программного обеспечения, позволяющего пользоваться для решения задач языками высокого уровня. Поэтому запись программы для ПМ-ЭВМ осуществляется поль­зователем на машинном языке с применением команд описан­ных выше групп.

Полный перечень команд, приведенных в сжатой форме в табл. 4.1 — 4.3, должен быть хорошо известен пользователю, решающему свою задачу. Это даст ему возможность варьиро­вать при составлении своих программ различными командами и способами их включения в программы с целью составления программ либо более коротких, либо экономящих используе­мую память, либо сокращающих время счета.

В ряде случаев способ решения той или иной задачи стано­вится более понятным, если он представлен в виде специальной схемы, называемой схемой алгоритма решения и имеющей вид ориентированной сети с вершинами различных типов, соответст­вующими используемым операциям.

В качестве примера рассмотрим решение задачи суммирова­ния первых 20 чисел натурального ряда, схема которой приве­дена на рис. 4.1 3,а.

Для реализации первых двух операторов (не считая Start) можно воспользоваться двухбайтовой командой MVI г, осущест­вляющей непосредственную загрузку в какой-либо регистр данных, содержащихся во втором байте команды (в данном случае - чисел OD). Для осуществления операции S = S + N можно воспользоваться командой ADD r, выполняющей сум­мирование содержимого какого-либо регистра с содержимым аккумулятора и запись результата в аккумулятор. Для выпол­нения операции N = N + 1 в машинном языке ПМ-ЭВМ преду­смотрена специальная команда INR г, осуществляющая увели­чение на единицу содержимого какого-либо регистра. Остается еще организовать в программе цикл с использованием услов­ного оператора. Для этой цели подошла бы команда JNZ, осу­ществляющая переход в программе при отсутствии нуля в ре­зультате какой-либо предшествующей переходу операции (в на­шем случае — операции вычитания: 21 — N).

Однако этого можно и не делать, построив несколько иначе схему решения задачи. Вместо того чтобы суммировать последо­вательно увеличивающиеся числа от О D до 20 D, можно суммиро­вать последовательно уменьшающиеся числа от 20 D до OD. Тогда содержимое регистра, хранящего число N, на некотором шаге выполнения программы обратится в нуль и этот результат можно будет использовать при организации условного перехода.

Итак, новая схема алгоритма может быть построена следую­щим образом.

Шаг 1. Заносим число О D в аккумулятор (А).

Шаг 2. Заносим число 20 D в какой-нибудь регистр, напри­мер в регистр D.

Шаг 3. Суммируем содержимое регистров А и D.

Шаг 4. Уменьшаем содержимое регистра Она единицу.

Шаг 5. Если содержимое регистра Вне равно нулю, осущест­вляем переход к шагу 3; в противном случае переходим к сле­дующему шагу.

Ш а г 6. Переписываем содержимое регистра А в какой-ни­будь из портов вывода, например в порт Р0оо-

Ш а г 7. Конец работы программы.

Соответствующая схема представлена йа рис. 4.13,6.

Приступим к программированию этой схемы. Для этой цели нам понадобятся все указанные выше команды, за исключе­нием команды INR г (увеличение содержимого регистра на единицу). Вместо нее следует взять команду DCR г (уменьше­ние содержимого регистра на единицу), которая будет исполь­зована применительно к регистру D. Кроме того, нам будут необходимы еще следующие две команды: OUT — двухбайто­вая команда вывода данных из аккумулятора в порт вывода, определяемый адресом, содержащимся во втором байте коман­ды, и однобайтовая команда HLT — останов программы. Коды всех используемых команд можно взять из таблицы, приведен­ной в приложении 1.

Для размещения всей программы нам понадобятся 12 ячеек памяти с номерами от 014QOOOQ до 014Q013Q. В первые две ячейки с номерами 014 000 и 014 001 поместим оба байта первой команды MVI A OOOQ загрузки аккумулятора (регистра А) числом OD. При этом в первую ячейку поместим восьмеричный код команды 076, а во вторую — содержимое второго байта этой команды — восьмеричный код числа OD (число 000). В сле­дующие две ячейки с номерами 014 002 и 014 003 поместим два байта следующей команды, загружающей регистр D десятич­ным числом 20. Восьмеричный код этой операции 026 будет на­ходиться в первой ячейке, а восьмеричный код 024 десятичного числа 20 - во второй и т. д. В последнюю ячейку с номером 014 013 поместим восьмеричный код 166 команды HLT, осу­ществляющей останов программы. В табл. 4.5 приведен полный текст составленной программы вместе с комментарием. При организации цикла использована специальная метка Ml, указы­вающая на операцию, которую следует выполнить, если содер­жимое регистра D не равно нулю.

 

Рис. 4.13. Схемы алгоритмов для задачи сложения первых 20 чисел

 

Таблица 4.5

Адрес ячейки Код операции или содержи­мого второго или третьего байта Мет­ка Мнемокод Комментарий
014 000     MVI A OOOQ Загрузка регистра А числом OD
014 001       Число OD
014 002     MVI D 024Q Загрузка регистра D числом 20 D
        Число 20 D
014 004   Ml: ADDD Сложение содержи­мого регистров А и D
      DCRD Уменьшение на едини­цу содержимого ре­гистра D
014 006     JNZM1 Переход к метке М 1 при отсутствии нуля
014 007       Метка М 1 (адрес)
014 010       Метка М 1 (адрес)
014 011     OUT OOOQ Вывод данных из ре­гистра А в порт рооо
014 012       Номер порта
      HLT Останов программы

 

Аналогичным образом осуществляется составление и других программ, которые читатель встретит в этой книге. Отметим еще раз, что при написании программы совсем не обязательно прибегать вначале к составлению ее операторной схемы. При некотором навыке программа легко может быть составлена сразу после небольшого анализа условий сформулированной задачи.

Перейдем теперь к рассмотрению работы конкретных схем отдельных функциональных блоков ПМ-ЭВМ, назначение кото­рых было определено ранее.

 

ИСПОЛЬЗУЕМЫЕ МИКРОСХЕМЫ

ОБЩИЕ ВОПРОСЫ

В последующих главах будет по­дробно описано устройство и функционирование ПМ-ЭВМ и ее блоков. Для понимания этих глав необходимо познакомиться с работой отдельных микросхем, из которых построены блоки ПМ-ЭВМ.

 

Рис. 5.1. Внешний вид микросхемы в корпусе с двухрядным расположе­нием выводов

 

Интегральная микросхема - микроэлектронное изделие, вы­полняющее определенную функцию преобразования и обработ­ки сигнала и имеющее высокую плотность упаковки электриче­ски соединенных элементов. Полупроводниковый кристалл, в объеме и на поверхности которого созданы элементы, состав­ляющие микросхему, обычно помещается в корпус. Корпуса микросхем бывают самых разнообразных форм и изготовля­ются из керамики, пластмассы, металла и т. д. В ПМ-ЭВМ будут использоваться микросхемы в прямоугольных пластмассовых корпусах (рис. 5.1) с двухрядным расположением выводов. Принято обозначать выводы микросхем арабскими цифрами и буквами русского и латинского алфавитов. При этом для корпусов всех типов используется общее соглашение по обо­значению номеров выводов, практически не имеющее исклю­чений. У вывода номер один ставится маркирующая точка, которая называется ключом. Начиная от этой точки номера выводов будут возрастать при обходе их против часовой стрел­ки. На условных графических изображениях микросхем эти номера выводов проставляются над линиями, изображающими выводы. Принято также присваивать выводам буквенные обо­значения в соответствии с названиями выполняемых выводамифункций. Существуют две системы буквенных обозначений: отечественная (буквами русского алфавита) и международная (буквами латинского алфавита). В этой книге будет применять­ся международная система, так как она широко используется во многих отечественных и переводных книгах по электронике и микро-ЭВМ. Выводы будут обозначаться в тексте буквами или номерами (если не принято данный вывод обозначать буквой) при описании микросхем и номерами — при описании электрон­ных схем, чтобы избежать двусмысленности этих описаний.

 

 

ТТЛ-ВХОДЫ И ТТЛ-ВЫХОДЫ

 

Цифровые микросхемы выпол­няют преобразование сигналов, изменяющихся дискретно. Такой сигнал может принимать несколько фиксированных значений. Современные микросхемы, как правило, работают с сигналами, которые имеют два значения, и эти значения кодируются двумя различными уровнями напряжения. Обычно эти уровни напря­жения расположены в диапазоне от нуля до напряжения источ­ника питания и различны для серий микросхем, отличающихся по технологии изготовления. Широкое распространение в настоя­щее время получили микросхемы, изготовленные по ТТЛ-тех­нологии, и поэтому часто микросхемы, изготовленные по дру­гим технологиям, имеют выводы с такими же характеристиками и работают с такими же уровнями напряжения (в частности, все микросхемы, применяющиеся в ПМ-ЭВМ). Для того чтобы подавать сигналы с микросхем, имеющих одни уровни напряже­ния, на микросхемы с другими уровнями напряжения, применя­ются специальные преобразователи уровня.

Вывод микросхемы, на который сигнал необходимо подавать, называется входом (для ТТЛ-микросхем - ТТЛ-входом), а вывод, на котором сигнал вырабатывается самой микросхе­мой, называется выходом (для ТТЛ-микросхем - ТТЛ-выхо­дом). В этом параграфе будут подробно рассмотрены характе­ристики ТТЛ-входов и ТТЛ-выходов.

Входные и выходные уровни напряжения ТТЛ-микросхем имеют определенные значения. Высокий уровень напряжения должен лежать в пределах от +2,4 до +5 В для ТТЛ-выхода и в пределах от +2 до +5 В для ТТЛ-входа, а низкий уровень -от 0 до +0,4 В для ТТЛ-выхода и от 0 до +0,8 В для ТТЛ-входа. Между нижней границей для более высокого уровня и верх­ней границей для более низкого уровня напряжения ТТЛ-входа имеется диапазон напряжения (от 0,8 до 2 В) шириной 1,2 В. Этот диапазон предназначен для защиты микросхемы от лож­ных срабатываний при помехах амплитудой менее 1,2 В. Если бы его не было, то любая малая помеха приводила бы к тому, что напряжение сигнала попадало бы из области низких напря­жений в область высоких (или наоборот). В этом диапазоне напряжение сигнала может находиться только в момент пере­ключения с одного уровня напряжений на другой.

Как известно, переменные в логике могут принимать два значения - 0 и 1. Возможны два способа кодировки этих зна­чений. Первый способ - это кодировать 0 низким уровнем на­пряжения, а 1 - высоким уровнем напряжения. Такой способ кодировки называется позитивной (иногда положительной) логикой. Второй способ - кодировать 0 высоким уровнем, а 1 - низким уровнем напряжения. Такой способ кодировки называется негативной (иногда отрицательной) логикой. Эти названия общеприняты, хотя не совсем удачны. Во-первых логика здесь ни при чем (она одинаковая, разные только спо­собы кодировки), а во-вторых, слова "позитивный" и "не­гативный" применяются для обозначения способов кодировки с помощью разных уровней напряжения одной полярности. В дальнейшем для краткости вместо слов "сигнал имею­щий высокий (низкий) уровень напряжения" будут употреб­ляться слова "сигнал высокого (низкого) уровня" или просто высокий (низкий) уровень", и так как в этой книге принята положительная логика, то будут также употребляться слова "уровень логического нуля (единицы)".

 

Рис. 5.2. ТТЛ-вход и схема для снятия ха­рактеристики

 

Рис. 5.3. Характеристи­ка ТТЛ-входа

 

ТТЛ-вход является эмиттером многоэмиттерного транзисто­ра (рис. 5.2). Диод к эмиттеру подключен для того, чтобы огра­ничивать отрицательные импульсы напряжения. Если поставить эксперимент, изображенный на рис. 5.2, то можно получить входную характеристику ТТЛ-входа, т. е. зависимость тока от подаваемого напряжения (рис. 5.3). Ветви 1 соответствует ток, вытекающий в ТТЛ-вход, который в этом случае работает как р-п переход, включенный в обратном направлении, и поэтому значение тока невелико. Этот ток обозначается обычно I1вх. Ветви 2 соответствует ток, который вытекает из ТТЛ-входа, работающего как р-п переход, включенный в прямом направ­лении. В этом случае ток ограничивается сопротивлением R. Этот ток обозначается I0вх. В диапазоне напряжений, соответст­вующем высокому уровню, I1вх должен быть не больше 0,1 мА, а в диапазоне, соответствующем низкому уровню, I0вх должен быть не больше 1,6 мА. Направления I0вх и I1вх показаны стрел­ками на рис. 5.2. Вход с такими характеристиками называется стандартным ТТЛ-входом или стандартной ТТЛ-нагрузкой.

Рис. 5.4. ТТЛ-выход

Рис. 5.5. Схема снятия характеристики ТТЛ-выхода при высоком уровне напряжения (а); характеристика (б)

 

ТТЛ-выходы бывают трех типов: нормальный ТТЛ-выход, выход с открытым коллектором и выход с тремя состояниями. Схема нормального ТТЛ-выхода приведена на рис. 5.4. Для того чтобы создать на выходе высокий уровень напряжения, с помощью внутренних управляющих цепей открывается верх­ний транзистор и закрывается нижний. Если поставить экспери­мент по схеме, изображенной на рис. 5.5,л, то можно снять вы­ходную характеристику ТТЛ-выхода при высоком уровне на­пряжения (рис. 5.5,6). Из этой характеристики видно, что с возрастанием вытекающего тока I1вых напряжение на выходе уменьшается. Стандартный ТТЛ-выход должен обеспечивать при I1вых, равном 1 мА, высокий уровень напряжения (не мень­ше+2,4 В).

 

Рис. 5.6. Схема снятия характеристики ТТЛ-выхода при низком уровне напряжения (а); характеристика (б)

 

Для того чтобы создать на выходе напряжения низкого уров­ня, с помощью внутренних управляющих цепей открывается нижний транзистор и закрывается верхний. Схема, с помощью которой можно снять выходную характеристику ТТЛ-выхода, и сама характеристика приведены на рис. 5.6. Из этой характе­ристики видно, что с возрастанием втекающего тока напряже­ние на ТТЛ-выходе, находящемся в состоянии низкого напряжения, увеличивается. Стандартный ТТЛ-выход должен обеспе­чивать при I0вых, Равном 16 мА, высокий уровень напряжения (не более 0,4 В). Если теперь сравнить входные и выходные токи, то видно, что к одному стандартному ТТЛ-выходу можно подключить, не перегружая его, 10 стандартных ТТЛ-входов. Иногда используют термин "нагрузочная способность" выхода или "коэффициент разветвления по выходу", измеряющийся числом входов, которые можно подключить к данному выходу.

Диод между эмиттером верхнего транзистора и коллектором нижнего транзистора включен для того, чтобы избежать откры­вания верхнего транзистора при низком уровне напряжения на выходе. При переключении выходных транзисторов в какой-то момент времени они оба оказываются открытыми и ток через них резко возрастает (в этот момент ток ограничивается толь­ко резистором К). Резкое возрастание тока может создать им­пульс помехи, распространяющейся по цепям питания. Для подавления таких помех используются развязывающие конден­саторы, которые включаются между линией питания и общим выводом в непосредственной близости от микросхемы. Развя­зывающий конденсатор должен быть один на группу не более 10 микросхем и должен иметь емкость не менее 0,002 мкФ на микросхему.

Два нормальных ТТЛ-выхода нельзя подключать друг к дру­гу, если возможна ситуация, когда на одном выходе высокий, а на другом — низкий уровень напряжения, потому что тогда ток, протекающий через открытые транзисторы разных ТТЛ-вы­ходов, может превысить допустимое значение.

 


Рис. 5.7. Выход с открытым кол­лектором

Рис. 5.8. Соединение нескольких вы­ходов с открытым коллектором

 


Второй тип ТТЛ-выхода — это так называемый выход с от­крытым коллектором. Как следует из названия, выход такого типа представляет собой коллектор транзистора (рис. 5.7). Для того чтобы обеспечить нормальную работу этого выхода, его необходимо соединить через резистор с положительным полюсом источника питания. Тогда если транзистор закрыва­ется с помощью внутренних управляющих цепей, то напряже­ние на выходе больше +2,4 В, что достаточно для создания стандартного высокого ТТЛ-уровня; если же транзистор откры­вается, то напряжение на выходе падает до стандартного низкого ТТЛ-уровня. При закрытом выходном транзисторе ток I1вых течет от положительного полюса источника питания через рези­стор R, при открытом транзисторе ток I0вых течет через транзи­стор. Резистор R рассчитывается так, чтобы обеспечить необхо­димые значения токов I0вых и I1вых.

В отличие от стандартных ТТЛ-выходов выходы с открытым коллектором можно соединять друг с другом (рис. 5.8). В этом случае высокий уровень напряжения поддерживается в точке соединения только тогда, когда закрыты транзисторы всех выходов, поэтому в этой точке реализуются логическая функ­ция И при позитивной логике и логическая функция ИЛИ при негативной логике. Такая схема часто называется "монтажное И" или "монтажное ИЛИ" в зависимости от используемой логики.

Третий тип ТТЛ-выходов - это выходы с тремя состояниями или, как их еще называют, выходы с третьим состоянием высо­кого сопротивления (или просто выходы с третьим состоя­нием). В отличие от нормальных ТТЛ-выходов оба выходных транзистора такого выхода с помощью внутренних управляю­щих цепей могут быть закрыты. В этом случае через них может протекать лишь небольшой ток утечки (обычно несколько мик­роампер) и говорят, что выходы находятся в отключенном со­стоянии или в состоянии высокого сопротивления. Для пере­вода выходов микросхемы в состояние высокого сопротивле­ния, как правило, имеется специальный управляющий вход, или если этот переход происходит вследствие каких-либо не­управляемых внутренних процессов, то имеется специальный выход, состояние которого показывает, переведены ли в со­стояние высокого сопротивления другие выходы. Выходы с третьим состоянием сконструированы специально для того, чтобы можно было подключать несколько выходов для управ­ления состоянием одной линии. Когда несколько выходов с третьим состоянием подключены к одной линии, то в опреде­ленный момент времени только один из них может управлять состоянием этой линии (т. е. создавать на ней уровень высо­кого или низкого напряжения). Остальные выходы должны находиться в состоянии высокого сопротивления. В этом со­стоянии они не создают дополнительную нагрузку на транзи­сторы работающего выхода. Естественно, что это требует спе­циальных электронных схем, которые управляют тем выхо­дом, который должен работать в какой-либо определенный момент времени.

Вывод микросхемы может быть входом или выходом и, кроме того, может совмещать эти функции. Это достигается путем объединения внутри микросхемы входов и выходов с тремя состояниями или открытым коллектором. Для управ­ления таким выводом у микросхемы имеется специальный вход, в зависимости от сигнала на котором вывод работает как ТТЛ-вход или как ТТЛ-выход в разные моменты време­ни. Ниже будут встречаться микросхемы со всеми разобран­ными типами выводов. Нормальные ТТЛ-входы и ТТЛ-выходы в дальнейшем будем называть просто входами и выходами, а во всех остальных случаях будем указывать определенный тип вывода.

 

ВРЕМЕННЫЕ ДИАГРАММЫ

 

Электрические сигналы, которые соответствуют определенным логическим состояниям, можно наблюдать на выводах работающих микросхем с помощью осциллографа или логического пробника. На рис. 5. 9,а показано изображение на экране осциллографа электрического сигнала с вывода цифровой микросхемы. Ось времени располагается горизонтально, а ось напряжений — вертикально. Время увели­чивается слева направо, т. е. из двух событий правее окажется более позднее. Такое расположение и направление оси времени традиционны и используются во всех осциллографах.

Рис. 5.9. Дискретный сигнал:

а - на экране осциллографа; б - условное графическое изоб -ражение

 

Электрические сигналы с выводов цифровых микросхем принято изображать в процессе их изменений во времени (рис. 5.9,6). Такие условные графические изображения назы­ваются временными диаграммами. На временных диаграммах не наносятся оси напряжения и времени. Нулевая отметка вре­мени также не наносится, так как большинство процессов пе­риодически повторяется и достаточно изобразить интервал вре­мени немного большим периода повторения, чтобы диаграмма содержала всю необходимую информацию о происходящем процессе.

Приведем некоторые соглашения, которые используются при изображении сигналов на временньгх диаграммах. Высокий уро­вень изображается, как показано на рис. 5.10,я, состояние вы­сокого сопротивления - как на рис. 5.10,в, низкий уровень -как на рис. 5. 10,6. Штриховые линии на этих рисунках приведе­ны только для сравнения и обычно не наносятся. На рис. 5.11 показано, как изображается переход с одного уровня на другой. Переход от низкого уровня к высокому называется фронтом, а от высокого к низкому — срезом. Иногда употребляют также термины "нарастающий и спадающий фронт", "передний и зад­ний фронт", "положительный и отрицательный фронт" и некото­рые другие. Если переход от одного уровня к другому происхо­дит не в конкретный момент времени, а может произойти в лю­бой момент времени в течение некоторого интервала времени, то это изображается как на рис. 5.12.


Рис. 5.10. Изображение уров­ней напряжения:

а — высокий; б — низкий; в — состояние высокого со­противления

Рис. 5.11. Изображение фрон­тов:

а - фронт; б - срез


Рис. 5.12. Изображение фронтов в неопределенный момент вре­мени

Рис. 5.13. Изображение зависи­мости одного сигнала от дру­гого


 

Изменение одного сигнала может быть причиной изменения другого сигнала. Если изменение вызывается фронтом сигнала, то это изображается как на рис. 5.13,я, если уровнем сигнала -то как на рис. 5.13,6. При этом кружок отмечает тот элемент сигнала, который вызывает изменение, а стрелка указывает на изменение зависимого сигнала. Изменение одного сигнала мо­жет быть причиной изменений нескольких сигналов, тогда это изображается, как показано на рис. 5.14, и наоборот, измене­ние некоторого сигнала может вызываться только определен­ными изменениями нескольких других сигналов (рис. 5.15).


Рис. 5.14. Изображение зависи­мости нескольких сигналов от одного

 

Рис. 5.15. Изображение зависи­мости одного сигнала от не­скольких других


Рис. 5.16. Изображение неопре­деленного сигнала

 

Если уровень на входе микросхемы не влияет никак на ее работу или уровень на выходе не определен (не устанавлива­ется), то это изображается так, как показано на рис. 5.16. Если необходимо изобразить на временной диаграмме состояния и Фронты нескольких сигналов, которые ведут себя одинаково с точки зрения переключений, но могут иметь разные уровни, то это делается так, как показано на рис. 5.17. Длительности интервалов времени между какими-либо изменениями сигналов изображаются с помощью букв или цифр на выносных линиях (рис. 5.18). На этом же рисунке показано, где пишутся буквен­ные обозначения сигналов (слева рядом с соответствующей временной диаграммой).


Рис. 5.18. Изображение времен­ных интервалов

Рис. 5.17. Изображение несколь­ких сигналов, ведущих себя идентично с точки зрения пере­ходов с уровня на уровень


 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...