Глава 4. АРХИТЕКТУРА ЭВМ 1 страница

 

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

 

i

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

 

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

Вспоминая данное выше определение компьютера, можно заметить, что ос­нов­ными функциями компьютера являются хранение, обработка, прием и передача данных. Для выполнения этих функций в компьютере предусмотрены различные устройства. Каждое из этих устройств выполняет ту или иную конкретную функцию, обязанность.

 

i

В состав любого современ­ного компьютера входят:

* память — группа устройств, которые обеспечивают хранение данных и программ;

* процессор— одно или несколько устройств, которые обеспечивают задаваемую программой обработ­ку дан­ных;

* устройства ввода/вывода — группа устройств, которые обеспечивают обмен, т.е. прием и передачу данных между пользователем и машиной или между двумя или более машина­ми.

 

Различные устройства компьютера подсоединяют друг к другу с помощью стандартизированных и унифицированных (то есть единообразных) аппаратных средств — кабелей, разъемов и т.д. При этом устройства обмениваются друг с другом информацией и управляющими сигналами, которые также приводятся к некоторым стандартным формам. Совокупность этих стандартных средств и форм образует конкретный интерфейс (interface — взаимный вид) того или иного устройства или компьютера в целом.

i

Интерфейсом называется совокупность унифицированных стандартных соглашений, аппаратных и программных средств, методов и правил взаимодействия устройств или программ.

 

ОСНОВЫ ХРАНЕНИЯ ИНФОРМАЦИИ В КОМПЬЮТЕРЕ. Как было вы­яснено ранее, информация всегда имеет фор­му сообщения, а сообщение кодиру­ется тем или иным набором знаков, символов, цифр. Теоретичес­ки и экспериментально было показано, что с технической точки зрения самым удобным и эффектив­ным является использование двоичного ко­да, т.е. набора символов, алфави­та, сос­то­я­щего из пары цифр {0,1}. Поскольку двоичный код используется для хранения ин­формации в вычислительных машинах, его ещё назы­вают машинным ко­дом.

Цифры 0 и 1, образующие набор {0,1}, обычно называют двоичными циф­рами, потому что они используются как алфавит в так называемой двоич­ной системе счисления. Система счисления представляет собой совокупность правил и приемов наи­менования и записи чисел, а также получения значения чисел из изоб­ра­жающих их символов. Количество знаков в алфавите системы счисления обычно отражается в ее названии: двоичная, троичная, восьмеричная, десятичная, шестнадцатиричная и т.д. Вооб­ще говоря, можно рассматривать системы счисления с любым количеством знаков в алфавите. В настоящее время у людей общепринятой является арабская десятичная система счисления, алфавит которой состоит из десяти цифр {0,1,2,3,4,5,6,7,8,9}. Однако для использования в ЭВМ десятичная система слишком сложна, так как для ее применения не­обходимо подобрать технические способы изображения десяти раз­лич­ных цифр. С точки зрения технической реализации компьютера, го­раз­до про­ще работать всего с двумя цифрами двоичной системы {0,1}.

 

i

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

 

Слово «бит» произошло от английского термина bit, представляющего собой сокращение словосочетания BInary digiT — двоичная цифра. Тех­­нически бит может быть реализован самыми разными способами. Однако ка­ким имен­­но конкретным способом это сделано в компьютере — для нас совершенно безразлично. Важно лишь понимание назначения и свойств, функций бита:

* Бит может находиться только в одном из двух возможных состояний, одно из которых принято считать изображением цифры «0», а второе — изображе­нием цифры «1». Свое состояние бит сохраняет сколь угодно долго, пока оно не будет изменено принудительным способом. Следовательно, бит может хра­нитьзаписанную в нём него информацию.

* В любой момент времени можно узнать, в каком из двух состояний на­ходится бит — в состоянии «0» или в состоянии «1», при этом исходное сос­тояние бита останется неизменным. Другими словами, можно прочитатьзаписанную в бит информацию (без ее потери).

* Всегда, когда в этом возникнет необходимость и вне зависи­мости от текущего состояния, можно перевести бит из одного состояния в другое. Ина­че говоря, в бит можно записать новую информацию.

 

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

Обратите внимание на некоторую нестрогость, многозначность в используемой терминологии. Термин «бит» так же, как и словосочетание «двоичный разряд», используется для обозначения: 1)элементарного устройства памяти компьютера; 2)двоичной цифры, которая находится в этом устройстве; 3)отдельной двоичной цифры, входящей в двоичное число, независимо от того, хранится это число в компьютере или же нет. К счастью, смысл, который вкладывается в данные термины, достаточно просто выявляется из контекста.

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

 

i

 

Элемент памяти компьютера, состоящий из восьми битов, называется байтом.

Слово «байт» произошло от английского термина by­te, представляющего собой сокращение словосочетания BinarY TErm — двоичный терм, выражение. Ба­йт сохраняет все свойства би­та, т.е. он может сколь угодно долго хранить записанный в него двои­ч­ный код, этот код можно прочитать, можно также записать в байт любой новый код. Каждый из вось­­ми битов байта может содержать любую из двоичных цифр не­за­ви­си­мо от остальных. Следовательно, байт может содержать произвольную комбинацию, последовательность из вось­­ми нулей или единиц, например, последовательность 10110011. Такую последовательность также называют двоичным числом, двоичным кодом, ли­бо прос­то кодом.

 

 

 
а         б        

 

Рис. 4.1. Условные изображения: а — бита; б — байта

 

 

Условно бит изображают в виде квадратика, содержащего либо цифру «0», либо цифру «1», а байт рисуют в виде расположенных рядом восьми одинаковых квадратиков, каждый из которых содержит какую-либо двоичную цифру (рис. 4.1).

Запись двоичного кода легко спутать с аналогичным по записи де­сятичным числом, например, двоичный код 10110011 можно рассматривать и как «обычное» число «десять мил­лионов сто десять тысяч одиннадцать». В тех случаях, когда есть опасность спутать десятичное и двоичное числа, справа от двоичного числа за­писывают индекс 2, а около десятичного числа указы­ва­ют индекс 10. Таким об­разом, 101100112 — двоичное число, а 1011001110 — десятичное. Для удобст­ва восприятия десятичные числа в текстах на русском языке принято делить на груп­­пы по три цифры в каждой и отделять эти группы друг от друга пробелом — 10 110 01110. По аналогии с этим двоичные числа иногда также группируют, но по четыре цифры в группе — 1011 00112.

Так как байт состоит из восьми двоичных разрядов, то количество различ­ных кодов, различных комбинаций из восьми нулей и единиц, записываемых в один байт, равно 28 = 256. Для перебора всех возможных комбинаций можно начать с кода, содержащего восемь нулей 0000 00002, следующим записать код 0000 0001­­2, затем — 0000 00102, 0000 00112 и т.д. до кода, состоящего только из одних еди­ниц 1111 11112 . Всего таких комбинаций бу­дет как раз 256.

Как видно из приведенных выше примеров, запись содержимого байта до­вольно длинная — более чем в три раза длиннее записи соответствующего чис­ла в десятичной системе счисления. Кроме того, восприятие человеком двоич­ного кода затруднено. Поэтому для сокращения записи двоичных ко­дов часто используют вспо­могательную шестнадцатиричную систему счисления. Ее алфавит состоит из шестнадцати символов {0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}. Эта система связана с двоичной очень прос­тыми правилами перехода от двоичных кодов к шестнадцатиричным и обратно —от шестнадцатиричных к двоичным. Для таких переходов исполь­зуется таблица, в которой каждой шестнадцатиричной соответст­­вуют ровно четыре двоичных цифры (табл. 4.1). Четверку двоичных цифр иногда называют тетрадой.

Таблица 4.1

Соответствие между тетрадами и шестнадцатиричными цифрами

 

16-я цифра 2–я четверка 16–я цифра 2–я чет­­верка 16–я цифра 2–я чет­­верка 16–я цифра 2–я чет­­верка
C
D
A E
B F

 

Собственно переход от двоичных чисел к их шестнадцатиричным эквивалентам и обратно осуществляется простой заменой каждой четверки двоичных цифр кода на соответствующую ей одну шестнадцатиричную, и, наоборот, вмес­то одной шестнадцатиричной цифры подставляются четыре двоичных. Возьмем, например, двоичный код 0011 10112. Он сос­тоит из двух двоичных четверок. Первая — 00112 и вторая — 10112. По таб­лице находим, что тетраду 00112 нужно за­ме­нить на шестнадцатиричную цифру 3, а тетраду 10112 — на шестнадцатиричную цифру B. Таким об­разом, двоичному коду 0011 10112 соответст­ву­ет шестнадцатиричный код 3В. Во избежание не­доразумений в тех случаях, ког­да они могут воз­ник­нуть, справа от шестнадцатиричных чисел (кодов) выставляется ин­декс 16 — 3В16. Приведем еще несколько примеров: — 1010 11002 соответствует коду AC16, 1110 01102 — E616 и т.д. Обратный переход также прост. Так, шестнадцатиричный код C816 пос­ле замены каждой цифры соответствующей четверкой двоичных при­обретает вид 1100 10002. Из приведенных примеров видно, что запись кода сокращается ровно в че­тыре раза. Для записи содержимого байта двоичными цифрами нужно восемь цифр, а если для этого использовать шестнадцатиричные — то всего две. Еще раз об­ращаем внимание читателя на то, что в компьютере для кодирования программ и данных используется только двоичная система счисления. Шестнадцатирич­ная же используется только как вспомогательная, для сокращения записи двоич­ных кодов при письме.

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

 

i

Конкретный способ кодирования той или иной разновидности информации (данных) в компьютере принято называть форматом данных.

 

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

 

ТЕКСТОВАЯ ИНФОРМАЦИЯ. При хранении в компьютере любой текст (документ, статья, книга) рассматривается как линейная последовательность символов. Причем про­межуток между отдельными словами — пробел, переход на следующую строч­ку, переход на следую­щую страницу — также могут рассматриваться как некие специальные символы. Каждому символу из этой последо­ва­тельности ставится в соответствие конкретный двоичный код, состоя­щий ров­но из восьми двоичных разрядов. Таким образом, код каждого символа текс­­та занимает ровно один байт памяти. И, следовательно, текст целиком за­нимает столько байт памяти машины, из скольких символов он состоит (включая все символы текста — пробелы, знаки препинания, специальные зна­ки перехода на новую строчку, на новую страницу и т.д.).

Таблица 4.2

Фрагмент кодовой таблицы

 

Символ 2-й код 16-й код Символ 2-й код 16-й код
А 1000 0000 Р 1001 0000
Б 1000 0001 С 1001 0001
В 1000 0010 Т 1001 0010
Г 1000 0011 У 1001 0011
Д 1000 0100 Ф 1001 0100
Е 1000 0101 Х 1001 0101
Ж 1000 0110 Ц 1001 0110
З 1000 0111 Ч 1001 0111
И 1000 1000 Ш 1001 1000
Й 1000 1001 Щ 1001 1001
К 1000 1010 8A Ъ 1001 1010 9A
Л 1000 1011 8B Ы 1001 1011 9B
М 1000 1100 8C Ь 1001 1100 9C
Н 1000 1101 8D Э 1001 1101 9D
О 1000 1110 8E Ю 1001 1110 9E
П 1000 1111 8F Я 1001 1111 9F

 

Списки всех используемых при записи текстов символов и соответству­ющих им двоичных кодов образуют так называемые кодовые таблицы. В практике программирова­ния применяются различные кодовые таблицы. Наиболее часто использу­ется кодовая таблица ASCII (American Standart Code for Information Interchange — стандартный американский код для обмена информацией), ко­торая в настоящее время фактически стала обще­ми­ровым стандартом. В таб­лицу входят коды строчных и заглавных латинских букв, коды для цифр, знаков препинания, различных математических символов, сим­­волов, ко­торыми можно рисовать в текстах таблицы и т.д. А всего в ней зафик­си­ро­ваны коды для 128 различных символов. Список этих символов и соответствующие им восьмиразрядные (т.е. состоящие из восьми двоичных разрядов, цифр) двоичные коды образуют основную (базовую)кодовую таблицу ASCII. Но, как было выяснено ранее, один байт может содержать 256 различных двоичных кодов, состоящих из восьми бит. Это означает, что в стандарте ASCII задействована только половина возможных кодов. Имеются различные расширения основной кодовой таблицы ASCII, в ко­торых задаются коды ещё для 128 символов, в том числе для и символов различных на­циональных ал­фа­витов. Фрагмент одного из расширений кодовой таб­лицы ASCII, вклю­чающий буквы русского алфавита — кириллицы, приведен в табл. 4.2.

Таблица 4.3

Машинный код текста «КОМПЬЮТЕР»

 

К О М П Ь Ю Т Е Р
8F 9C 9E

 

В качестве примера кодировки получим машинный код текста, состоящего из одного слова «КОМ­ПЬЮ­­ТЕР». Этот текст состоит из 9 символов, следовательно, для его хра­­нения требуется 9 байт памяти. Используя табл. 4.2, для каж­до­го символа легко получить соответствующий ему двоичный код. Ос­та­ется только записать найденные коды в группу подряд расположенных байтов памяти. В табл. 4.3 приведен получен­ный таким образом машинный код этого текста. В первой строке таблицы указаны порядковые номера бай­тов памяти, в которых записан текст, во второй — символы, из которых он состоит, в третьей — машинные, двоичные коды, а в четвертой — шес­т­над­цатиричные коды этих символов. Таким образом, текст «КОМПЬЮТЕР» в вычислительной машине представлен двоичным кодом:

 

1000 1010 1000 1110 1000 1100 1000 1111 1001 1100 1000 1110 1001 0010 1000 0101 1001 00002.

 

Этот код можно сокращенно записать в шестнадцатиричном виде:

 

82 8E 8C 8F 9C 9E 92 85 9016.

 

Следует понимать, что пробелы между четверками двоичных цифр и парами шестнадцатиричных вставляются только для удобства их восприятия, чтения человеком, и в память компьютера они, естественно, не записываются.

Обратите внимание на то, что в табл. 4.2 приведены коды заглавных букв. Строчные буквы имеют другие коды. Например, код буквы «а» имеет вид 1010 00002 , в то время как код буквы «А» — 1000 00002 . Не случайно рассматриваемое слово записано именно в таком виде — машинный код слова «КОМПЬЮТЕР» отличается от машинного кода слова «компьютер».

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

Однако необходимо помнить о том, что существует много различных кодовых таблиц, и что различные программы могут использовать для записи текстов различные кодовые таблицы. А в разных кодовых таблицах один и тот же код соответствует разным символам. Так, например, двоичный код 1000 10102 соответствует символу «К» только в так называемой «Гост–альтернативной» кодовой таблице. Именно ее фрагмент приведен в табл. 4.2. А в другой популярной кодовой таблице с названием «Windows 1251» этот же двоичный код служит для обозначения символа «Љ». Следовательно, текст, записанный какой-либо программой в одной кодовой таблице, может быть полностью искажен при его чтении с помощью другой программы. Если приведенный выше код слова «КОМПЬЮТЕР» попытаться прочитать с помощью программы, которая использует кодовую таблицу «Win­dows1251», то этот код будет представлен «словом»: «ЉЋЊЏњћ’…ђ».

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

Необходимо отметить, что в последнее время все шире используется кодовая таблица с названием UNI­CODE(UNIversal CODE — универсальный код), в которой для кода одного символа отводится два байта, а не один, как в рассмотренных выше таблицах. Сразу же бросается в глаза очевидный недостаток этой кодировки — требуется ровно в два раза больше места в памяти, чем при записи в однобайтных кодировках. Так, для слова «КОМПЬЮТЕР» теперь потребуется восемнадцать байтов, а не девять, как это было ранее. Но в связи с тем, что память становится все более и более дешевой, этот недостаток становится все менее и менее значимым. Кроме того, он с лихвой покрывается очевидным преимуществом: с помощью двух байтов, то есть шестнадцати разрядов, можно закодировать 216 = 65 536 различных символов, а не 28 = 256 символов однобайтных кодировок. Такого количества различных символов вполне достаточно для того, чтобы представить практически все встречающиеся во всевозможных текстах символы.

Использование кодовых таблиц для представления различных текстов в памяти компьютера решает только часть проблемы. Если более внимательно посмотреть на текст, скажем в газете, журнале или книге, то можно заметить, что практически любой текст содержит те или иные элементы оформления. Символы, из которых состоит текст, могут иметь разные размеры и разное начертание. Они могут быть наклонными, подчеркнутыми, выделенными жирным шрифтом и т.д. По-разному могут быть оформлены абзацы и страницы текста. На странице могут находиться номера, колонтитулы, сноски. Все эти, а также и многие другие элементы оформления текста при его записи в память компьютера также нуждаются в определенной кодировке.

Существует много раз­личных форматов — конкретных способов кодирования, применяющихся для кодирования символов и фиксации элементов оформления текстов. В частности, можно упомянуть общепринятый, «понятный» подавляющему большинству работающих с текстами программ формат TXT (от слова text — текст). Этот формат основывается на одной из кодовых таблиц для представления символов текстов и практически не содержит никаких элементов его оформления. Заметим, что именно поэтому с ним могут работать очень многие программы. Значительно более сложным, но также довольно популярным является формат RTF(Rich Text Format — богатый текстовый формат), который содержит очень много различных возможностей по оформлению текстов.

 

ЧИСЛОВАЯ ИНФОРМАЦИЯ. В тех случаях, когда над числовыми данными при­хо­дится выполнять какие-либо математические операции, например, сложение, вычитание, умножение и т.д., применяются осо­бые принципы кодирования. Так, кодом цело­го положи­тель­ного десятичного числа считается его запись в двоичной системе счис­­­ления, то есть равное ему двоичное число. Так, например, кодом десятичного числа + 3710 является двоичное число 0010 01012 (или 2516). А число + 98410 выг­ля­дит как 0000 0011 1101 10012 (или 03 D916). Для отрицательных целых чисел, а также для положительных и отрицательных дробных чисел используются бо­лее сложные методы кодирования. Для перехода от десятичной системы счис­ления к двоичной и назад — от двоичной к десятичной — применя­ют­ся достаточно сложные специальные правила, на которых мы останавливаться не будем, так как в подавляющем большинст­­­ве ситуаций эти переходы осуществляются ав­то­матически.

В случае кодирования числовой информации одного байта для записи чис­ла, как правило, бывает недостаточно, так как с его помощью можно за­писать числа только из диапазона от 010 до 25610 или же, при использовании более сложного способа кодирования, от – 12810 до + 12710. Поэтому для записи чисел, не входящих в указанные диапазоны, используется несколько соседних байтов памяти. Обычно это один, два, четыре, восемь или десять байтов. Так, объединение двух байтов позволяет ра­бо­тать с числами от 010 до 65 53510, а объединение четырех — с числами от 010 до 4 294 967 29510.

ГРАФИЧЕСКАЯ ИНФОРМАЦИЯ.Под графической информацией мож­но понимать рисунок, чертеж, фо­тографию, картинку в книге, изображения на эк­ране телевизора или в кинозале и т.д. Для об­суждения общих принципов кодирования графической информации в качестве конкретного, достаточно общего случая графического объекта выберем изображение на экране телевизора. Это изображение состоит из некоторого количества горизонталь­ных линий — строк. А каждая строка в свою оче­редь состоит из элементарных мельчайших единиц изображения — то­чек, которые принято называть пикселами(picsel — PICture'S ELement — элемент кар­тинки). Весь массив элементарных единиц изоб­ражения называют растром(лат. rastrum — грабли). Степень че­т­кости изображения зависит от количества строк на весь экран и ко­ли­чес­т­­ва точек в строке, которые представляют разрешающую спо­соб­­­ность экрана или просто разрешение. Чем больше строк и точек, тем четче и лучше изображение. Достаточно хорошим считается разреше­ни­­е 640 ´ 480, то есть 640 точек на строку и 480 строчек на эк­ран.

Строки, из которых состоит изображение, можно просматривать сверху вниз друг за другом, как бы составив из них одну сплошную линию. После полного просмотра первой строки просматривается вторая, за ней третья, потом четвертая и так далее до последней строки экрана. Такой спо­соб работы со строками называется строчной разверткой, или скани­ро­ванием(scan — бегло просматривать; разлагать, развертывать изобра­же­ние).А так как каждая из строк представляет собой последовательность пик­селов, то все изображение, вытянутое в линию, также можно считать ли­нейной последовательностью элементарных точек. В рассматриваемом случае эта последовательность состоит из 640 ´ 480 = 307 200 пикселов.

Вначале рас­­смотрим принципы кодирования монохромного изображения, то есть изо­бражения, состоящего из любых двух контрастных цветов — черного и белого, зеленого и бело­го, ко­ричневого и белого и т.д. Для простоты обсуждения будем считать, что один из цветов — чёрный, а второй — белый. Тогда каждый пиксел из­о­бра­же­ния может иметь либо черный, ли­бо белый цвет. Поставив в со­от­ветст­вие черному цвету двоичный код «0», а белому — код «1» (либо наоборот), мы смо­жем закодировать в одном бите состояние одного пиксела монохромного из­ображения. А так как байт состоит из8 бит, то на строчку, состоящую из 640 точек, потребуется 80 байт памяти, а на все изображение — 38 400 байтов.








Дата добавления: 2016-01-26; просмотров: 665;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.03 сек.