Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Окна основных обозревателей системы




     Окно Процессор

Окно Процессор (рис. 4) обеспечивает доступ ко всем регистрам и флагам процессора.

 

Рис. 4. Окно Процессор

Программно-доступные регистры и флаги:

• Асc — аккумулятор;

• PC — счетчик адреса команды, содержащий адрес текущей команды;

• SP — указатель стека, содержащий адрес верхушки стека;

• RB — регистр базового адреса, содержащий базовый адрес;

• RA — регистр адреса, содержащий исполнительный адрес при косвенной адресации;

• IR — входной регистр;

• OR — выходной регистр;

• I — флаг разрешения прерываний.

Системные регистры и флаги:

• DR — регистр данных АЛУ, содержащий второй операнд;

• MDR — регистр данных ОЗУ;

• MAR — регистр адреса ОЗУ;

• RDR — регистр данных блока РОН;

• RAR — регистр адреса блока РОН;

• CR — регистр команд, содержащий поля:

COP — код операции;

TА — тип адресации;

ADR — адрес или непосредственный операнд;

• Z — флаг нулевого значения Асc;

• S — флаг отрицательного значения Асc;

• OV — флаг переполнения.

 

Регистры Асc, DR, IR, OR, CR и все ячейки ОЗУ и РОН имеют длину 6 десятичных разрядов, регистры PC, SP, RA и RB — 3 разряда. В окне Процессор отражаются текущие значения регистров и флагов, причем в состоянии Останов все регистры, включая регистры блока РОН, и флаги (кроме флага I) доступны для непосредственного редактирования.

Элементы управления окна Процессор включают меню и кнопки, вызывающие команды:

Сохранить;

Загрузить;

Reset;

ResetR 0- R 9 (только команда меню Работа).

Команды Сохранить, Загрузить позволяют сохранить текущее значение регистров и флагов процессора в файле и восстановить состояние процессора из файла. Команда Reset и кнопка R устанавливают все регистры (в т. ч. блок РОН) в начальное (нулевое) значение. Содержимое ячеек памяти при этом не меняется. Выполняемая лишь из меню Работа команда ResetR 0- R 9 очищает только регистры блока РОН.

Окно Память

 

Окно Память (рис. 8.5) отражает текущее состояние ячеек ОЗУ. В этом окне допускается редактирование содержимого ячеек, кроме того, предусмотрена возможность выполнения (через меню или с помощью кнопок панели инструментов) пяти команд: Сохранить, Загрузить, Перейти к, Вставить, Убрать.

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

Команда Перейти к открывает диалоговое окно, позволяющее перейти на заданную ячейку ОЗУ.

Команда Убрать открывает диалог, в котором указывается диапазон ячеек с m по n. Содержимое ячеек в этом диапазоне теряется, а содержимое ячеек [(n+1): 999] перемещается в соседние ячейки с меньшими адресами. Осво­бодившиеся ячейки с адресами 999, 998,... заполняются нулями.

 

 

Рис. 5. Окно Память

Команда Вставить, позволяющая задать номера ячеек, перемещает содержимое всех ячеек, начиная от m-й на m-n позиций в направлении больших адресов, ячейки заданного диапазона [m:n]заполняются нулями, а содержимое последних ячеек памяти теряется.

Окно Текст программы

 

Окно Текст программы (рис. 8.6) содержит стандартное поле текстового редактора, в котором можно редактировать тексты, загружать в него текстовые файлы и сохранять подготовленный текст в виде файла.

Команды меню Файл:

Новая — открывает новый сеанс редактирования;

Загрузить — открывает стандартный диалог загрузки файла в окно редактора;

 Сохранить — сохраняет файл под текущим именем;

Сохранить как — открывает стандартный диалог сохранения файла;

 Вставить — позволяет вставить выбранный файл в позицию курсора.

 

Все перечисленные команды, кроме последней, дублированы кнопками на панели инструментов окна. На той же панели присутствует еще одна кнопка — Компилировать, которая запускает процедуру ассемблирования текста поле редактора.

Ту же процедуру можно запустить из меню Работа. Команда Адрес вставки позволяет задать адрес ячейки ОЗУ, начиная с которой программа будет размещаться в памяти. По умолчанию этот адрес принят равным 0.

Нижеобласти редактирования в строку состояния выводится позиция текущей строки редактора — номер строки, в которой находится курсор.

 

Рис. 6. Окно Текст программы

 

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

После исправления ошибок и повторной компиляции выдается сообщение об отсутствии ошибок, о расположении и размере области памяти, занятой под ассемблированную программу.

Набор текста программы производится по стандартным правилам языка ассемблера. В каждой строке может содержаться метка, одна команда и комментарий. Метка отделяется от команды двоеточием, символы после знака "точка с запятой" до конца строки не воспринимаются компилятором и могут рассматриваться как комментарии. Строка может начинаться с точки с запятой (;) и, следовательно, содержать только комментарии.

Окно Программа

Окно Программа (рис. 7) отображает таблицу, имеющую 300 строк и 4 столбца. Каждая строка таблицы соответствует дизассемблированной ячейке ОЗУ. Второй столбец содержит адрес ячейки ОЗУ, третий — дизассемблированный мнемокод, четвертый - машинный код команды. В первом столбце может помещаться указатель à на текущую команду (текущее значение PC) и точка останова — красная заливка ячейки.

 

Рис. 7. Окно Программа

 

Окно Программа позволяет наблюдать процесс прохождения программы. В этом окне ничего нельзя редактировать. Органы управления окна позволяют сохранить содержимое окна в виде текстового файла, выбрать начальный адрес области ОЗУ, которая будет дизассемблироваться (размер области постоянный — 300 ячеек), а также установить/снять точку останова. Последнее можно проделать тремя способами: командой Точка останова из меню Работа, кнопкой на панели инструментов или двойным щелчком мыши в первой ячейке соответствующей строки. Характерно, что прочитать в это окно ничего нельзя. Сохраненный текстовый asm-файл можно загрузить в окно Текст программы, ассемблировать его и тогда дизассемблированное значение заданной области памяти автоматически появится в окне Программа. Такую процедуру удобно использовать, если программа изначально пишется или редактируется непосредственно в памяти в машинных кодах.

Начальный адрес области дизассемблирования задается в диалоге командой Начальный адрес меню Работа.

 

Окно Микрокомандный уровень

 

Окно Микрокомандный уровень (рис. 8) используется только в режиме микрокоманд, который устанавливается командой Режим микрокоманд меню Работа. В это окно выводится мнемокод выполняемой команды, список микрокоманд, ее реализующих, и указатель на текущую выполняемую микрокоманду.

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

Если открыть окно Микрокомандный уровень, не установив режим микрокоманд в меню Работа, то после начала выполнения программы в режиме Шаг (или в автоматическом режиме) в строке сообщений окна будет выдано сообщение "Режим микрокоманд неактивен".

Рис. 8. Окно Микрокомандный уровень

 

Окно Кэш-память

Окно Кэш-память используется в режиме с подключенной кэш-памятью. Подробнее смотрите об этом режиме в разд. 1.8.

 

Внешние устройства

Модели внешних устройств (ВУ), используемые в описываемой системе, реализованы по единому принципу. С точки зрения процессора они представляют собой ряд программно-доступных регистров, лежащих в адресном пространстве ввода/вывода. Размер регистров ВУ совпадает с размером ячеек памяти и регистров данных процессора — шесть десятичных разрядов.

Доступ к регистрам ВУ осуществляется по командам INаа, OUTаа,гдеаа— двухразрядный десятичный адрес регистра ВУ. Таким образом, общий объем адресного пространства ввода/вывода составляет 100 адресов. Следует помнить, что адресные пространства памяти и ввода/вывода в этой модели разделены.

Разные ВУ содержат различное число программно-доступных регистров, каждому из которых соответствует свой адрес, причем нумерация адресов всех ВУ начинается с 0. При создании ВУ ему ставится в соответствие базовый адрес в пространстве ввода/вывода, и все адреса его регистров становятся смещениями относительно этого базового адреса.

Если в системе создаются несколько ВУ, то их базовые адреса следует выбирать с учетом величины адресного пространства, занимаемого этими устройствами, исключая наложение адресов.

Если ВУ способно формировать запрос на прерывание, то при создании ему ставится в соответствие вектор прерывания — десятичное число. Разным ВУ должны назначаться различные векторы прерываний.

Программная модель учебной ЭВМ комплектуется набором внешних устройств, включающим:

□ контроллер клавиатуры;

□ дисплей;

□ блок таймеров;

□ тоногенератор.

Этим устройствам  по умолчанию присвоены параметры, перечисленные в табл. 2.

 

                             Параметры внешних устройств                               

Таблица 2

Внешнее  устройство Базовый  адрес Адрес  регистров Вектор прерывания
Контроллер клавиатуры 0 0, 1, 2 0
Диспллей 10 0, 1, 2, 3 Нет
Блок таймеров 20 0, 1, 2, 3, 4, 5, 6 2
Тоногенератор 30 0, 1 Нет

 

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

В описываемой версии системы не предусмотрена возможность подключения в систему нескольких одинаковых устройств.

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

Регистр CR содержит флаги и поля, определяющие режимы работы ВУ, а SR — флаги, отражающие текущее состояние ВУ. Флаги SR устанавливаются аппаратно, но сбрасываются программно (или по внешнему сигналу). Поля и флаги CR устанавливаются и сбрасываются программно при записи кода данных в регистр CR или специальными командами.

Контроллер ВУ интерпретирует код, записываемый по адресу CR как команду, если третий разряд этого кода равен 1, или как записываемые в CR данные, если третий разряд равен 0. В случае получения командного слова запись в регистр CR не производится, а пятый разряд слова рассматривается как код операции.

 

Контроллер клавиатуры

Контроллер клавиатуры (рис. 9) представляет собой модель внешнего устройства, принимающего ASCII-коды от клавиатуры ПЭВМ.

Символы помещаются последовательно в буфер символов, размер которого установлен равным 50 символам, и отображаются в окне обозревателя (рис.8. 10).

В состав контроллера клавиатуры входят три программно-доступных регистра:

DR (адрес 0) — регистр данных;

CR (адрес 1) — регистр управления, определяет режимы работы контроллера и содержит следующие флаги:

• Е — флаг разрешения приема кодов в буфер;

• I — флаг разрешения прерывания;

• S — флаг режима посимвольного ввода.

SR (адрес 2) — регистр состояния, содержит два флага:

• Err — флаг ошибки;

• Rd — флаг готовности.

 

 

 

Рис. 9. Контроллер клавиатуры

 

 

Рис. 10. Окно обозревателя контроллера клавиатуры

Регистр данных DR доступен только для чтения, через него считываются ASCII-коды из буфера, причем порядок чтения кодов из буфера соответствует порядку их записи в буфер — каждое чтение по адресу 0 автоматически перемещает указатель чтения буфера. В каждый момент времени DR содержит код символа по адресу указателя чтения буфера.

Флаги регистра управления CR устанавливаются и сбрасываются программным образом.

Флаг Е, будучи установленным, разрешает прием кодов в буфер. При Е = 0 контроллер игнорирует нажатие на клавиатуре, прием кодов в буфер не производится. На считывание кодов из буфера флаг Е влияния не оказывает.

Флаг I, будучи установленным, разрешает при определенных условиях фор­мирование контроллером запроса на прерывание. При I = 0 запрос на прерывание не формируется.

Флаг S = 1 устанавливает т. н. режим посимвольного ввода, иначе контроллер работает в обычном режиме. Флаг S устанавливается и сбрасывается программно, кроме того, S сбрасывается при нажатии кнопки Очистить буфер в окне Контроллер клавиатуры.

Условия формирования запроса на прерывание определяются, с одной стороны, значением флага разрешения прерывания I, с другой — режимом работы контроллера. В режиме посимвольного ввода запрос на прерывание формируется после ввода каждого символа (разумеется, при I= 1), в обычном режиме запрос будет сформирован по окончании набора строки.

Завершить набор строки можно, щелкнув по кнопке Завершить ввод в окне Контроллер клавиатуры (см. рис. 8.10).При этом устанавливается флаг готовности Rd (от англ. ready) в регистре состояния SR. Флаг ошибки Err (от англ. error) в том же регистре устанавливается при попытке ввода в буфер 51 -го символа. Ввод 51 -го и всех последующих символов блокируется.

Сброс флага Rd осуществляется автоматически при чтении из регистра DR, флаг Err сбрасывается программно. Кроме того, оба эти флага сбрасываются при нажатии кнопки Очистить буфер в окне Контроллер клавиатуры; одновременно со сбросом флагов производится очистка буфера— весь буфер заполняется кодами 00h, и указатели записи и чтения устанавливаются на начало буфера.

Для программного управления контроллером предусмотрен ряд командных слов. Все команды выполняются при записи по адресу регистра управления CR кодов с 1 втретьем разряде.

Контроллер клавиатуры интерпретирует следующие командные слова:

 хxx10l — очистить буфер (действие команды эквивалентно нажатию кнопки Очистить буфер);

xхх102 — сбросить флаг Err в регистре SR;

xxx103 — установить флаг S в регистре CR;

xxx104 — сбросить флаг S в регистре CR.

Если по адресу 1 произвести запись числа ххх0пп, то произойдет изменение 4-го и 5-го разрядов регистра CR по следующему правилу:

Дисплей

Дисплей (рис. 11) представляет собой модель внешнего устройства, реализующую функции символьного дисплея. Дисплей может отображать символы, задаваемые ASCII-кодами, поступающими на его регистр данных. Дисплей включает:

видеопамять объемом 128 слов (ОЗУ дисплея);

символьный экран размером 8 строк по 16 символов в строке;

четыре программно-доступных регистра:

• DR (адрес 0) — регистр данных;

• CR (адрес 1) — регистр управления;

• SR (адрес 2) — регистр состояния;

• AR (адрес 3) — регистр адреса.

 

 

 

Рис. 11. Контроллер дисплея

                                                                                                

Через регистры адреса AR и данных DR по записи и чтению осуществляется доступ к ячейкам видеопамяти. При обращении к регистру DR по записи содержимое аккумулятора записывается в DR и в ячейку видеопамяти, адрес которой установлен в регистре AR.

Регистр управления CR доступен только по записи и содержит в 4-м и 5-м разрядах соответственно два флага:

 Е — флаг разрешения работы дисплея; при Е = 0 запись в регистры AR и DR блокируется;

А — флаг автоинкремента адреса; при А = 1 содержимое AR автоматически увеличивается на 1 после любого обращения к регистру DR — по записи или чтению.

Изменить значения этих флагов можно, если записать по адресу CR (по умолчанию — 11) код ххх0пп, при этом изменение 4-го и 5-го разрядов реги­стра CR произойдет согласно выражению (8.1).

Для программного управления дисплеем предусмотрены две команды, коды которых должны записываться по адресу регистра CR, причем в третьем раз­ряде командных слов обязательно должна быть 1:

xxxl0l — очистить дисплей (действие команды эквивалентно нажатию кнопки Очистить в окне Дисплей), при этом очищается видеопамять (в каждую ячейку записывается код пробела— 032), устанавливается в 000 регистр адреса AR и сбрасываются флаги ошибки Err и автоинкремента А;

ххх102 — сбросить флаг ошибки Err.

 

 

Рис. 12. Окно обозревателя контроллера дисплея

 

Регистр состояния SR доступен только по чтению и содержит единственный флаг (в пятом разряде) ошибки Err. Этот флаг устанавливается аппаратно при попытке записать в регистр адреса число, большее 127, причем как в режиме прямой записи в AR, так и в режиме автоинкремента после обращения по адресу 127. Сбрасывается флаг Errпрограммно или при нажатии кнопки Очистить в окне Дисплей (рис. 12).

 

Блок таймеров

 

Блок таймеров (рис. 13) включает в себя три однотипных канала, каждый из которых содержит:

 пятиразрядный десятичный реверсивный счетчик Т, на вход которого поступают метки времени (таймер);

      программируемый предделительD;

      регистр управления таймером CTR;

     флаг переполнения таймера FT.

Регистры таймеров Т доступны по записи и чтению (адреса 1, 3, 5 соответственно для Tl, T2, ТЗ). Программа в любой момент может считать текущее содержимое таймера или записать в него новое значение.

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

 

 

Рис. 13. Блок таймеров

 

Регистры управления CTR доступны по записи и чтению (адреса 2, 4, 6) и содержат следующие поля:

 Т (разряд 5) — флаг включения таймера;

EI (разряд 4) — флаг разрешения формирования запроса на прерывание при переполнении таймера;

I/D (разряд 3) — направление счета (инкремент/декремент), при I/D =0 таймер работает на сложение, при I/D =1 — на вычитание;

k (разряды [1:2]) — коэффициент деления предделителя (от 1 до 99).

Флаги переполнения таймеров собраны в один регистр — доступный только по чтению регистр состояния SR, имеющий адрес 0. Разряды регистра (5, 4 и 3 для Tl, T2, ТЗ соответственно) устанавливаются в 1 при переполнении со­ответствующего таймера. Для таймера, работающего на сложение, перепол­нение наступает при переходе его состояния из 99 999 в 0, для вычитающего таймера — переход из 0 в 99 999.

В окне обозревателя (рис. 8.14) предусмотрена кнопка Сброс, нажатие которой сбрасывает в 0 все регистры блока таймеров, кроме CTR, которые устанавливаются в состояние 001000. Таким образом, все три таймера обнуляются, переключаются в режим инкремента, прекращается счет, запрещаются прерывания, сбрасываются флаги переполнения и устанавливаются коэффициенты деления предделителей равными 01.

 

 

Рис. 14. Окно обозревателя блока таймеров

 

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

 хxxl00 — общий сброс (эквивалентна нажатию кнопки Сброс в окне обозревателя);

xxxl0l — сброс флага переполнения таймера FT1;

 ххх102 — сброс флага переполнения таймера FT2;

 ххх10З — сброс флага переполнения таймера FT3.

 

Тоногенератор

 

Модель этого простого внешнего устройства не имеет собственного обозревателя, содержит всего два регистра, доступных только для записи:

FR (адрес 0) — регистр частоты звучания (Гц):

LR (адрес 1) — регистр длительности звучания (мс).

По умолчанию базовый адрес тоногенератора — 30. Сначала следует записать в FR требуемую частоту тона в герцах, затем в LR — длительность звучания в миллисекундах. Запись числа по адресу регистра LR одновременно является командой на начало звучания.

 

Подсистема прерываний

 

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

Контроллер передает вектор, соответствующий запросу, процессору, который начинает процедуру обслуживания прерывания.

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

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

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

Таблица прерываний в рассматриваемой модели жестко фиксирована— она занимает ячейки памяти с адресами 100—109. Таким образом, адрес обработчика с вектором 0 должен располагаться в ячейке 100, с вектором 2 — в ячейке 102. При работе с прерываниями не рекомендуется использовать ячейки 100—109 для других целей.

Процессор начинает обработку прерывания (если они разрешены), завершив текущую команду. При этом он:

· получает от контроллера вектор прерывания;

· формирует и помещает в верхушку стека слово, три младших разряда([3:5]) которого — текущее значение PC (адрес возврата из прерывания), а разряды [1:2] сохраняют десятичный эквивалент шестнадцатеричной цифры, определяющей значение вектора флагов (I, OV, S, Z). Например, если I=1,OV = 0, S = 1, Z = 1,то в разряды [1:2] запишется число 1110=10112;

· сбрасывает в 0 флаг разрешения прерывания I;

· извлекает из таблицы векторов прерываний адрес обработчика, соответствующий обслуживаемому вектору, и помещает его в PC, осуществляя тем самым переход на подпрограмму обработчика прерывания.

Таким образом, вызов обработчика прерывания, в отличие от вызова подпрограммы, связан с помещением в стек не только адреса возврата, но и текущего значения вектора флагов. Поэтому последней командой подпрограммы обработчика должна быть команда iret, которая не только возвращает в PCтри младшие разряда ячейки — верхушки стека (как ret), но и восстанавли­вает те значения флагов, которые были в момент перехода на обработку прерывания.

Не всякое событие, которое может вызвать прерывание, приводит к прерыванию текущей программы. В состав процессора входит программно-доступный флаг I разрешения прерывания. При I = 0 процессор не реагирует на запросы прерываний. После сброса процессора флаг I так же сброшен и все прерывания запрещены. Для того чтобы разрешить прерывания, следуете программе выполнить команду EI (от англ. enableinterrupt).

Выше отмечалось, что при переходе на обработку прерывания флаг I автоматически сбрасывается, в этом случае прервать обслуживание одного прерывания другим прерыванием нельзя. По команде IRETзначение флагов восстанавливается, в т. ч. вновь устанавливается I = 1, следовательно, в основной программе прерывания опять разрешены.

Если требуется разрешить другие прерывания в обработчике прерывания, достаточно в нем выполнить команду EI. Контроллер прерываний и процессор на аппаратном уровне блокируют попытки запустить прерывание, если его обработчик начал, но не завершил работу.

Таким образом, флаг I разрешает или запрещает все прерывания системы. Если требуется выборочно разрешить некоторое подмножество прерываний, используются программно-доступные флаги разрешения прерываний непосредственно на внешних устройствах.

Как правило, каждое внешнее устройство, которое может вызвать прерывание, содержит в составе своих регистров разряд флага разрешения прерывания (см. формат регистров CR и CTR на рис. 9, 13), по умолчанию установленный в 0. Если оставить этот флаг в нуле, то внешнему устройству запрещается формировать запрос контроллеру прерываний.

Иногда бывает удобно (например, в режиме отладки) иметь возможность вызвать обработчик прерывания непосредственно из программы. Если использовать для этих целей команду CALL, которая помещает в стек только адрес возврата, то команда IRET, размещенная последней в обработчике, может исказить значения флагов (все они будут сброшены в 0, т. к. команда CALLформирует только три младшие разряда ячейки верхушки стека, оставляя остальные разряды в 000).

Поэтому в системах команд многих ЭВМ, в т. ч. и нашей модели, имеются команды вызова прерываний— INTn (внашей модели nÎ{0, 1,…,9}), где n— вектор прерывания. Процессор, выполняя команду INTn, производит те же действия, что и при обработке прерывания с вектором n.

Характерно, что с помощью команды INTnможно вызвать обработчик пре­рывания даже в том случае, когда флаг разрешения прерыванияI сброшен.





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


Дата добавления: 2018-10-14; Мы поможем в написании ваших работ!; просмотров: 515 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Надо любить жизнь больше, чем смысл жизни. © Федор Достоевский
==> читать все изречения...

2285 - | 1976 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.012 с.