Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
RusFAQ.ru: программирование на языке Assembler
Информационный Канал Subscribe.Ru |
RusFAQ.ru: программирование на языке Assembler
Выпуск № 502
от 12.03.2003, 01:30
Администратор: Имя: Калашников О.А. URL: Информационный ресурс ICQ: 68951340 Россия, Москва |
О рассылке: Задано вопросов: 2753 Отправлено ответов: 8196 Активность: 297.7 %
|
Список экспертов, ответы которых опубликованы в данном выпуске |
Broken Sword Статус: Профессиональный Общий рейтинг: 125.31 URL: моя рассылка по Protected Mode [Подробней >>] |
Maverick Статус: Профессиональный Общий рейтинг: 137.79 URL: Задачи по ассемблеру Телефон: 89039415024 (BeeLine GSM) [Подробней >>] |
Bob Johnson Статус: Профессиональный Общий рейтинг: 150.21 URL: Программирование [Подробней >>] |
Gibbel Статус: Профессиональный Общий рейтинг: 108.1 URL: Страничка обо мне и моих друзьях Телефон: +7 902 168 02 65 [Подробней >>] |
Ayl Статус: Профессиональный Общий рейтинг: 118.44 [Подробней >>] |
Dark_Lord Статус: Профессиональный Общий рейтинг: 116.41 [Подробней >>] |
Joy Статус: Доверительный Общий рейтинг: 125.4 [Подробней >>] |
masquer Статус: Профессиональный Общий рейтинг: 143.96 [Подробней >>] |
Kostyan Статус: Начальный Общий рейтинг: 112.62 [Подробней >>] |
Краткий перечень вопросов |
Вопрос № 2722. U menia takoi vopros, budu o4en silno blagodarna esli vi pomozete v sleduiushem:podskazite pozaluist... (ответов: 2)
Вопрос № 2724. Во время очередной попытки сделать лабу по ассемблеру возникла такая проблемка: надо перехватить пре... (ответов: 6)
Вопрос № 2725. Приветствую Вас. У меня тут текстовый редактор намечается и вот таким образом я закружаю файл в памя... (ответов: 2)
Вопрос № 2726. Здравствуй, Bob Jhonson! В звуковой?.. ... ... ну в принципе, логично, кнешна... Надо было б и самом... (ответов: 1)
Вопрос № 2727. Здравствуйте, уважаемые эксперты! У меня есть Trial программа Acronis TrueImage 6.0 по созданию обра... (ответов: 3)
Вопрос № 2728. Я хочу налабать типа своего дизассемблера. Всё б нормально, но у меня нет кодов команд MMX, ExtMMX, ... (ответов: 3)
Вопрос № 2729. Всем привет . Хотелось бы в вашей рассылке поблагодарить Bob Johnson за ответ на мой вопрос 2678 . ... (ответов: 1)
Вопрос № 2730. Доброе вретя суток уважаемые эксперты. Есть ли еще какие нибудь отличия между командами pusha и push... (ответов: 3)
Вопрос № 2731. Добрый час! Windows. У Зубкова в начале оконной процедуры win_proc создаётся стековый кадр. Вопросы:... (ответов: 4)
Вопросов: 9, ответов: 25
Вопрос № 2722 |
U menia takoi vopros, budu o4en silno blagodarna esli vi pomozete v sleduiushem:podskazite pozaluista gde v internete mozno naiti dannie o sleduiushem assemblere :
firma "silikon graphics" modeli Origin 2000 s processorom 64 BIT modeli R10000 proizvodstva MIPS Technologies (proizvodstvennoi gruppi SGI
(voobshem v kratze assembler nazivaetsa MIPS)
Budu o4en priznatelna za pomosh!
Вопрос отправлен: 06.03.2003, 19:46
Отправитель: Lana
[Следующий вопрос >>] [Список вопросов]
Отвечает Broken Sword
Добрый день, Lana!
http://www.mips.com/
p.s. кстати, MIPS - это дочерняя компания SGI (Silicon Graphics). Силиконовцы в свое время даже умудрились прихватить Крэй. MIPS-ы использовала Nintendo в своих 64-битных приставках.
Позже, когда у силиконовцев возникли финансовые траблы, они толкнули MIPS со всеми потрохами и занялись IA-64, пропихиваемым интелом.
Ответ отправлен: 06.03.2003, 22:06
Отправитель: Broken Sword
Отвечает Maverick
Доброе время суток, Lana!
Погляди в приложении, это из форума выдрано.
Приложение:
Ответ отправлен: 07.03.2003, 14:50
Отправитель: Maverick
Вопрос № 2724 |
Во время очередной попытки сделать лабу по ассемблеру возникла такая проблемка: надо перехватить прерывание от клавиатуры, но я не знаю какое. А нужно чтобы программка-резидент (com) делала следующее: при нажатии клавиши f1 выводили например дату и время. С написанием перехватчика прерывания проблем нет, но какое прерывание перехватывать не знаю. Помогите советом пожалуйста :) Прошу не кидать в меня тухлыми помидорами, я еще только учусь :)
Вопрос отправлен: 06.03.2003, 23:53
Отправитель: madleon
[Следующий вопрос >>] [Список вопросов]
Отвечает Bob Johnson
Здравствуйте, madleon!
За клавиатуру отвечает прерывание 9 - когда нажимается клавиша, приходит это прерывание и в порту 60h можно прочитать скан-код. Только вот проблема: из его обработчика нельзя вызывать прерывания ДОС, т.к. может получиться ситуация, когда пользователь нажмет кнопку именно тогда, когда ДОС будет выполнять какую-либо задачу.
Ответ отправлен: 07.03.2003, 21:48
Отправитель: Bob Johnson
Отвечает Gibbel
Добрый день, madleon!
int 9h
Ответ отправлен: 07.03.2003, 09:57
Отправитель: Gibbel
Отвечает Ayl
Приветствую Вас, madleon!
Ну как какое? Конечно, IRQ1 = Int09
Аппаратное прерывание от клавиатуры. Про это в любой книжке написано.
Ответ отправлен: 07.03.2003, 12:18
Отправитель: Ayl
Отвечает Maverick
Добрый день, madleon!
---------------------------------------------
INT 09 - IRQ1 - KEYBOARD INTERRUPT
- Прерывание от клавиатуры -
Вырабатывается при получении данных от клавиатуры. Обычно это скан-код,но
это может быть ACK или NAK (подтверждение или неподтверждение) команды на
клавиатуре класса AT.
Ответ отправлен: 07.03.2003, 14:36
Отправитель: Maverick
Отвечает Dark_Lord
Доброе время суток, madleon!
int 9 (IRQ1) порты 60h-61h
Ответ отправлен: 08.03.2003, 16:26
Отправитель: Dark_Lord
Отвечает Joy
Приветствую Вас, madleon!
Такой длинный вопрос, а ответ всего int 09h.
Ответ отправлен: 07.03.2003, 08:29
Отправитель: Joy
Вопрос № 2725 |
Приветствую Вас. У меня тут текстовый редактор намечается и вот таким образом я закружаю файл в память:
-----------------------------------------------------------
skip_getopen:
invoke CreateFile,ADDR buffer,
80000000h or 40000000h, 0, 0, 3, 20h, 0
mov edi, eax
invoke CreateFileMapping, edi, 0, PAGE_READWRITE, 0, 0, 0
mov hMapFile, eax
invoke MapViewOfFile, hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, 0
mov Pointer, eax
invoke SendMessage, hwndEdit, 0ch, ebx, eax
invoke UnmapViewOfFile, Pointer
invoke CloseHandle, hMapFile
invoke CloseHandle, edi
mov byte ptr flag_untitled, 0
call set_title
file_open_failed:
invoke SetFocus, hwndEdit
ret
------------------------------------------------------------
Вопросы:
1. При открытии файлов не малых размеров я могу только удалять символы из editа, и не могу ничего дописать! С чем это связано и как задать буфер для редактирования editа.
2. При открытии некоторых текстовых файлов они не отображаюся в editе, а если это-же файл поместить в edit черед буфер обмена, то каждый символ будет заменен на "?" (кроме пробела). Может это из-за кодировки?
3. Посылаю editу через SendMessage комунду WM_UNDO, а он (edit) реагирует на нее как-то странно - отменяет не последний редактируемый символ, а весь введенный текст.
4. Сам я недавно перешел с MS-DOSа на программирование под Win32 и вот как-то неловко - программированием, как таковым, я почти не занимаюсь. Все, что я делаю - это вызов API. Это нормально, что я все доверяю API или некоторые участки стоит самому написать (почему-то хочется убрать edit и самому обрабатыать нажатия клавишь). Я имею в виду, не позорно ли использовать API в серьезных проектах?
Очень признателен за помощь.
Вопрос отправлен: 07.03.2003, 09:35
Отправитель: GHopper
[Следующий вопрос >>] [Список вопросов]
Отвечает masquer
Добрый день, GHopper!
mov edi, eax
...
invoke CloseHandle, edi
Если ты считаешь, что edi сохраниться до вызова CloseHandle, то вынужден тебя разочаровать. И если бы ты потрудится не значения флагов впихивать в код а их наименования, я бы больше рассказал, а так лень мне искать что 0ch WM_SETTEXT и так далее. В качестве совета - смотри все в отладчике, так понятней будет.
А без использования АПИ большого проекта и не напишешь. Ну и как и что доверять АПИ заисит от ситуации, но чаще стоит доверять, по крайней мере доводы должны быть серьезные, чтобы что-то самому делать.
Ответ отправлен: 07.03.2003, 11:02
Отправитель: masquer
Отвечает Bob Johnson
Приветствую Вас, GHopper!
Вот что пишется в MSDN по поводу лимита эдитов (см. сообщение EM_LIMITTEXT) - в вин2к - до 0x7FFFFFFE, в 98 - 0x7FFE для однострочных и 0xFFFF для многострочных. Соответственно, если хочешь делать текстовый редактор, используй свой контрол (а то получится как в блокноте).
4. Вполне нормально. Но желание убрать эдит оправдано (правда тут тебе самому надо будет написать что-то похожее).
Да, зачем ты используешь конкретные цифры, а не константы? Так ведь менее наглядно.
Ответ отправлен: 08.03.2003, 15:05
Отправитель: Bob Johnson
Вопрос № 2726 |
Здравствуй, Bob Jhonson!
В звуковой?.. ... ... ну в принципе, логично, кнешна... Надо было б и самому это мне предположить - ведь как-то в цифру вгоняют входные сигналы... А не подскажешь где подробно про то, откуда считывать цифровой код подаваемого напряжения? И в каких пределах по напруге работатет цап? У меня есть в Зубкове про программирование звуковых плат, но там как-то маловато и того, что нужно мне нет (или мне не по глазам)...
Спасибо :)
Вопрос отправлен: 07.03.2003, 13:21
Отправитель: 86 a5 ad ef (difuzion@mail.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Bob Johnson
Добрый день, 86 a5 ad ef!
По диапазону частот - в звуковом диапазоне, т.е. от 20 гц до 20 кгц, напряжение зависит от уровня записи (выставляется в микшере) - где нибудь 0,5в или 1в (это максимум, т.е. от -1в до +1в).
Чтобы получить данные можно воспользоваться любой программой (типа Cool Edit Pro или Sound Forge), в принципе даже sndrec32.exe подойдет (есть в винде), а потом сохранить в обычный (стандартный) wav файл и читать своей программой. Если тебе нужно что-то сделать разово, так будет наверняка удобнее. Если же надо в реальном времени обрабатывать сигнал, то тут уже придется самому читать - я бы использовал directsound (точнее DirectSoundCapture). Программирование звуковой карты напрямую - это отдает досом, да и современные звуковые карты уже аппаратно несовместимы с SB16.
Ответ отправлен: 08.03.2003, 15:05
Отправитель: Bob Johnson
Вопрос № 2727 |
Здравствуйте, уважаемые эксперты!
У меня есть Trial программа Acronis TrueImage 6.0 по созданию образов дисков. Она полнофункциональная и работает 15 дней. При запуске появляется окно с напоминанием: «Осталось 15 дней…» и имеются две кнопки «Попробовать сейчас» и «Отмена», при этом ввода пароля нигде не требует. Прога имеет временную защиту, т.е. пишет дату инсталляции либо в файл, либо в реестр. Попробовал перевести время в Windows на месяц вперед, теперь прога при запуске выдает тоже окно, но с другой надписью: «Trial период закончился. Купите полную версию». Также кнопка «Попробовать сейчас» становится недоступной. Но так как я студент и денег соответственно нет, то я решил ее взломать, вроде защита элементарная. Попробовал отследить с помощью FileMon и RegMon куда прога обращается при запуске, но ничего не понял, может обращаться с прогами не умею. Пробовал отлаживать прогу Soft Ice 4.05, ставил бряки на GetLocalTime, прога прерывается, выскакивает S-Ice жму F12, выхожу из процедуры, но там столько различных функций, сравнений, что начинаю запутываться и сбиваться. Также ставил бряк на DestroyWindow, тоже не разобрался. Думаю теперь попробовать поставить бряк на функцию, которая отключает кнопку, но не знаю какая функция API за это отвечает (В C++ Builder это Button1->Disabled). В Help’е по API нашел только EnableWindow, но при этом надо знать хэндл окна.
Помогите мне, пожалуйста, хорошим советом. Может на какую-либо другую функцию можно поставить брейкпоинт, чтобы было легче разобраться в S-Ice; может на какие-нибудь команды в S-Ice нужно обращать внимание, а на остальные нет.
Поделитесь опытом, эксперты. Вы ведь наверняка этим занимались не раз.
P.S. Только не ругайте меня за такую просьбу, а просто не отвечайте! Я ведь Вас не прошу ее взломать за меня, а только помочь хорошим дельным советом. Просто очень нужна эта прога!
Заранее Вас всех благодарю!
Вопрос отправлен: 07.03.2003, 14:27
Отправитель: Эдуард (ed666@rol.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Bob Johnson
Здравствуйте, Эдуард!
1. Сходи на astalavista.box.sk и поищи кряк.
2. Если не найдешь, то придется самому что-то делать. EnableWindow - это именна та функция, которая тебе нужна. Хэндл окна для начала можешь взять из WinSight (идет в поставке CPP Builder или delphi) и потом попробовать не закрывая ту прогу запустить свою, в которой сделать EnableWindow (Handle, true) и посмотреть, даст ли это что-либо. Если нет, то тогда SoftIce... Если да, то можешь написать прогу, которая запускает эту, ждет ее инициализации (WaitForInputIdle), находит ее главное окно (FindWindow), находит кнопку (GetWindow), делает ее доступной (EnableWindow) и нажимает ее же (SendMessage WM_LBUTTONDOWN, WM_LBUTTONUP)...
Ответ отправлен: 08.03.2003, 15:06
Отправитель: Bob Johnson
Отвечает Kostyan
Приветствую Вас, Эдуард!
Если Вам нужен серийный номер, то
http://softaz.hop.ru/cgi-bin/yabb/YaBB.cgi?board=news;action=display;num=1039579372
Ответ отправлен: 07.03.2003, 21:30
Отправитель: Kostyan
Отвечает masquer
Добрый день, Эдуард!
Во-первых, с чего ты взял что кто-то этим занимался? Или каждый знающий ассемблер априори кракер, хакер и т.д. и т.п.? Во-вторых, советовать что-то и делиться опытом? Ну, опытом точно не поделюсь, а посоветовать - если сильно хочеться именно самому сломать, изучай код, смотри как компилятор его строит, наберешься опыта и сам сможешь отличать "зерна от плевел". А если хочешь просто программу получить - то путь тебе прямиком на китайские варезные сайты. Гугл по слову ретейл и акронис выдаст все, что тебе нужно...
Ответ отправлен: 07.03.2003, 16:39
Отправитель: masquer
Вопрос № 2728 |
Я хочу налабать типа своего дизассемблера. Всё б нормально, но у меня нет кодов команд MMX, ExtMMX, SSE, SSE2, 3DNow! Ext3DNow! Где их можно взять? А заодно и, если можно, их хотя бы краткое описание, можно даже на Инглиш.
Вопрос отправлен: 07.03.2003, 16:30
Отправитель: Algebra (algebra@gala.net)
[Следующий вопрос >>] [Список вопросов]
Отвечает Bob Johnson
Приветствую Вас, Algebra!
Ну тогда welcome to developer.intel.com...
Ответ отправлен: 08.03.2003, 15:06
Отправитель: Bob Johnson
Отвечает Gibbel
Приветствую Вас, Algebra!
Взять их можно на сайтах производителей процессоров: AMD и Intel.
Ответ отправлен: 07.03.2003, 16:46
Отправитель: Gibbel
Отвечает Joy
Приветствую Вас, Algebra!
Наверное мой ответ будет не оригинален, но:
1. www.intel.ru
2. www.amd.ru
Там есть что-то на русском, но большенство на англицком.
Ответ отправлен: 10.03.2003, 09:47
Отправитель: Joy
Вопрос № 2729 |
Всем привет .
Хотелось бы в вашей рассылке поблагодарить Bob Johnson за ответ на мой вопрос 2678 . Ответ был очень содержателен . Большое спасибо .
Сергей
Вопрос отправлен: 07.03.2003, 23:13
Отправитель: Sergey (fot_sergey@mail.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Bob Johnson
Здравствуйте, Sergey!
В моей практике встречалось очень много современных плат от abit с такой неисправностью. Практически все после замены конденсаторов начинали работать нормально. У тебя та же проблема?
Ответ отправлен: 10.03.2003, 15:24
Отправитель: Bob Johnson
Вопрос № 2730 |
Доброе вретя суток уважаемые эксперты.
Есть ли еще какие нибудь отличия между
командами pusha и pushad кроме того что pusha заносит в
стэк 16 битные регистры, а pushad 32 битные.
Вопрос отправлен: 07.03.2003, 23:58
Отправитель: Alexandr
[Следующий вопрос >>] [Список вопросов]
Отвечает Bob Johnson
Приветствую Вас, Alexandr!
Нет... А что, этого мало?
Ответ отправлен: 10.03.2003, 15:24
Отправитель: Bob Johnson
Отвечает Dark_Lord
Добрый день, Alexandr!
нет, только если из 16битного сегмента 32битную команду или 32битного сегмента 16битную команду выполняешь, то на один байт больше занимает и на 1 такт дольше выполняется.
Ответ отправлен: 08.03.2003, 16:30
Отправитель: Dark_Lord
Отвечает Ayl
Доброе время суток, Alexandr!
В принципе, никаких. Различия в разрядности сохраняемых регистров и в изменении значения регистра SP (ESP). У этих команд даже код операции один и тот же - 60h.
Ответ отправлен: 11.03.2003, 13:07
Отправитель: Ayl
Вопрос № 2731 |
Добрый час! Windows. У Зубкова в начале оконной процедуры win_proc создаётся стековый кадр. Вопросы: 1. Что это такое? 2. Зачем push EBP, mov EBP,ESP, не легче ли сразу через ESP адресовать? 3. Почему такая странная адресация? Если условно принять вершину стека(EBP) за 16, то когда положим в стек 4 параметра DWORD, ESP будет равно 0. Тогда почему начинаем сразу с [EBP+08h](идентификатор окна - первый параметр), хотя нужно вроде бы [EBP], [EBP+04] и т.д. Спасибо!
Вопрос отправлен: 08.03.2003, 01:29
Отправитель: ROCK
[Следующий вопрос >>] [Список вопросов]
Отвечает Bob Johnson
Приветствую Вас, ROCK!
Стековый кадр - это место под локальные переменные и параметры процедуры.
2. ESP в процессе выполнения процедуры может измениться (если ты push сделаешь, чтобы, например, сохранить значение на время), это не очень удобно.
3. Потому что в стеке лежат следующие значения: по ebp лежит старое значение ebp (вспомни вначале push ebp), затем (ebp + 4) идет адрес возврата, а уже затем (ebp + 8) - первый параметр. А ниже ebp располагаются локальные переменные.
Ответ отправлен: 10.03.2003, 15:25
Отправитель: Bob Johnson
Отвечает Dark_Lord
Добрый день, ROCK!
Стековый кадр нужен для достижения параметров заданных через стек, использовать ebp удобно тем, что esp постоянно изменяется, тоесть в циклах переменные, заданные через стек использовать не получится. По остальному смотри приложение, думаю поймёшь, если нет пиши на Dark_Lord@RusFAQ.ru, постараюсь подробней объяснить!
Приложение:
Ответ отправлен: 08.03.2003, 16:38
Отправитель: Dark_Lord
Отвечает Gibbel
Доброе время суток, ROCK!
На первый вопрос тебе уже максимально подробно ответил Dark_Lord, так что повторяться не буду... ;-)
2. ESP постоянно меняется в процессе работы программы, когда ты сохраняешь что-нить в стек/вызываешь подпрограммы, поэтому тебе придется постоянно пересчитывать смещения относительно ESP, что неудобно. (VC++ при компиляции очень часто строит код, который адресуется через ESP - разбирать его просто ужас...)
3. Если ты используешь комбинацию push ebp mov ebp,esp, то в стеке значения располагаются следующим образом:
dword ptr [ebp] == старое значение ebp
dword ptr [ebp+4] == адрес возврата из подпраграммы (следующий байт за коммандой call)
dword ptr [ebp+8] == первый параметр...
Соответственно, если не сохранять EBP или адресоваться через ESP, то картина будет несколько иной...
Ответ отправлен: 10.03.2003, 12:37
Отправитель: Gibbel
Отвечает Ayl
Добрый день, ROCK!
1. Стековый кадр - это понятие ЯВУ при обращениях к процедурам. Он включает в себя передаваемые параметры, адрес возврата и локальные переменные.
2. Адресовать через ESP не проще, т.к. значение регистра ESP может довольно свободно изменяться для сохранения данных в стеке и т.п., что может вызвать необходимость пересчета смещений параметров в стеке. При фиксации адреса стекового кадра с помощью EBP мы гарантируем неизменность этих смещений. В результате становится возможным определение параметров/локальных переменных с помощью конструкции EQU.
3. А про адрес возврата ты забыл? Что происходит при вызове процедуры:
0. EPS -> ...
1. помещение параметров в стек (например, 4 DWORD'а):
ESP -> DWORD4
+4 -> DWORD3
+8 -> DWORD2
+12 -> DWORD1
2. call Procedure:
ESP -> return address
+4 -> DWORD4
+8 -> DWORD3
+12 -> DWORD2
+16 -> DWORD1
3. push EBP:
ESP -> EBP
+4 -> return address
+8 -> DWORD4
+12 -> DWORD3
+16 -> DWORD2
+20 -> DWORD1
4. mov EBP, ESP:
EBP, ESP -> EBP
+4 -> return address
+8 -> DWORD4
+12 -> DWORD3
+16 -> DWORD2
+20 -> DWORD1
Надеюсь, вот так понятно, что происходит и почему первый параметр - EBP+8.
Ответ отправлен: 11.03.2003, 13:23
Отправитель: Ayl
Форма отправки вопроса |
Форма может работать некорректно в почтовых программах "Microsoft Outlook" и "Microsoft Outlook Express". В программе The Bat! подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте, что в некоторых браузерах могут стоять запреты на открытие других окон, а также "чрезмерное" кэширование данных, при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.
© 2002 Команда RusFAQ.ru.
Вопрос и дополнение |
Ваш вопрос:
Приложение (если необходимо):
Получить ответов:
Выбор рассылки |
Программисту Assembler (34) C / C++ (28) Perl (6) Delphi (14) Pascal (19) Basic / VBA (10) Java / JavaScript (10) PHP (7) MySQL / MSSQL (5) |
Пользователю Windows 95/98/Me (32) Windows NT/2000/XP (25) "Железо" (29) Поиск информации (14) |
Администратору Windows NT/2000/XP (12) Linux / Unix (13) |
Юристу Гражданское право (7) Семейное право (3) Трудовое право (4) КоАП (4) |
Отправить вопрос всем экспертам выбранной рассылки.
© 2002 Россия, Москва. Авторское право: RusFAQ.ru |
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||