Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: программирование на языке Assembler


Информационный Канал Subscribe.Ru

RusFAQ.ru: программирование на языке Assembler

Выпуск № 543
от 15.05.2003, 10:50

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 3209
Отправлено ответов: 9405
Активность: 293.0 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Lynx
Статус: Доверительный
Общий рейтинг: 141.37
[Подробней >>]
Knignick
Статус: Доверительный
Общий рейтинг: 112.81
[Подробней >>]
ASMодей
Статус: Профессиональный
Общий рейтинг: 115.23
[Подробней >>]
 
GL
Статус: Опытный
Общий рейтинг: 102.83
[Подробней >>]
_vt
Статус: Доверительный
Общий рейтинг: 119.31
[Подробней >>]
Maverick
Статус: Профессиональный
Общий рейтинг: 133.52
URL: Задачи по ассемблеру
Телефон: 89039415024 (BeeLine GSM)
[Подробней >>]
 
Igoryk
Статус: Профессиональный
Общий рейтинг: 117.21
URL: IgorykSoft
[Подробней >>]
Tigran K. Kalaidjian
Статус: Опытный
Общий рейтинг: 115.77
URL: Методы оптимизации работы ПК
[Подробней >>]
Bob Johnson
Статус: Профессиональный
Общий рейтинг: 150.46
URL: Программирование
[Подробней >>]
 
Broken Sword
Статус: Профессиональный
Общий рейтинг: 122.99
URL: моя рассылка по Protected Mode
[Подробней >>]
Ramzes
Статус: Опытный
Общий рейтинг: 128.5
URL: Microsoft homepage
[Подробней >>]
Pin
Статус: Доверительный
Общий рейтинг: 129.13
[Подробней >>]
 
Hangatyr
Статус: Опытный
Общий рейтинг: 122.82
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 3157. Имеется переменная InfoBuff db ' $', которая в процедуре периодически заполняется раз... (ответов: 7)
Вопрос № 3158. Здравствуйте, эксперты! При компиляции программы и tasm 2.0 и Masm 6.13 выдаются ошибки приблизитель... (ответов: 4)
Вопрос № 3159. Помоготе пожалуйста, мне нужно написать программу на ассемблере, которая пишет два байта из ячейки п... (ответов: 1)
Вопрос № 3160. Здраствуйте. Мечта "розового паросёнка" написать свой ну если не дебагер, то хотябы компил... (ответов: 3)
Вопрос № 3161. Добрый день, эксперты! У меня вопрос по графическим преобразованиям. Представьте себе вектор. Его н... (ответов: 2)
Вопрос № 3162. Доброго времени суток Эксперты. Сори за оффтопик, но у меня тут беда приключилась, да и эксперты зд... (ответов: 2)
Вопрос № 3163. Привет профи! У меня сгорел блок питания, купил новый, поставил, все четко заработало. Но как именно... (ответов: 3)
Вопрос № 3165. Приветствую Bob Johnson!!! Спасибо за столь подробное обьяснение про блок питания, Вот только как ди... (ответов: 1)
Вопрос № 3166. Здравствуйте, эксперты! Приведите пожалуйста пример простейшей программы из двух модулей. Первый мод... (ответов: 1)
Вопрос № 3167. Здравствуйте, эксперты! Есть задача под Дос. В родительской программе создать файл и ввести данные. ... (ответов: 2)

Вопросов: 10, ответов: 26


 Вопрос № 3157

Имеется переменная InfoBuff db ' $', которая в процедуре периодически заполняется разным текстом. Естественно, что при повторном вызове процедуры, тексты накладываются друг на друга, и получается лажа. Так вот, вопрос, собственно в том, чтобы как-то обнулить значение переменной.



Вопрос отправлен: 09.05.2003, 13:33
Отправитель: Миха

[Следующий вопрос >>] [Список вопросов]

Отвечает Lynx

Здравствуйте, Миха!
Как я пронял, то у тебя вставляется новый текст, а хвост остаётся от старого, в результате выводиться новый текст в конец к которому приписан старый. Если так, то:
1. Кто тебе мешает в цикле в каждый элемент строки поместить
0? :)))
2. Можно в конец процедуры добавить код, который вставляет после нового текста символ '$'.

Ответ отправлен: 09.05.2003, 14:03
Отправитель: Lynx


Отвечает Knignick

Приветствую Вас, Миха!
Именно текстом, т.е. символами алфавита? Как тебе мешает наложение, и что значит "обнулить"? Записать 0? :) Если в какой-нибудь позиции строки поставить '$', то такие функции как 09h int 21h будут обрабатывать только тот кусок строки, который находится до '$', другие использую ASCIIZ т.е. последним символом строки должен идти 0.

Ответ отправлен: 10.05.2003, 01:56
Отправитель: Knignick


Отвечает ASMодей

Приветствую Вас, Миха!
Просто после заполнения ее текстом ставь в конце строки символ $ и все.


Ответ отправлен: 10.05.2003, 06:51
Отправитель: ASMодей


Отвечает GL

Добрый день, Миха!
Можно и так (прил.)
Если выводишь строку 9 функцией, то строку можно заполнить не нулями, а символами "$", чтобы лишнее не выводилось (заменить строчку "xor al,al" на "mov al,'$'").

Приложение:

Ответ отправлен: 10.05.2003, 14:50
Отправитель: GL


Отвечает _vt

Доброе время суток, Миха!
Ну так обнули в начале вызова этой процедуры...


Приложение:

Ответ отправлен: 10.05.2003, 20:09
Отправитель: _vt


Отвечает Maverick

Приветствую Вас, Миха!
Ну дак забивай пробелами при вводе нового текста...


Ответ отправлен: 12.05.2003, 06:23
Отправитель: Maverick


Отвечает Igoryk

Добрый день, Миха!
Если ты используешь переменную одного смещения, то она переписывается, а не смешивается с другой (ну если, конечно, длины переменных одинаковые). Вопрос только в символе-ограничителе например '$'. Ставь его после того, как изменил значение переменной по смещению:
offset InfoBuff+новая_длина+1

Ответ отправлен: 12.05.2003, 13:58
Отправитель: Igoryk


 Вопрос № 3158

Здравствуйте, эксперты!
При компиляции программы и tasm 2.0 и Masm 6.13 выдаются ошибки приблизительно следующего содержания:
**Error** protect1.asm(12) Too few operands to instruction
*Warning* protect1.asm(12) Argument needs type override
**Error** protect1.asm(31) Undefined symbol: L
*Warning* protect1.asm(31) Argument needs type override
**Error** protect1.asm(33) Too few operands to instruction
*Warning* protect1.asm(33) Argument needs type override
**Error** protect1.asm(45) Too few operands to instruction
*Warning* protect1.asm(45) Argument needs type override
Параметры запуска
tasm /m protect.asm
ml.exe /c protect.asm
Получается, что им не нравится строка вида mov reg,cr0.
В чем дело?


Приложение:


Вопрос отправлен: 09.05.2003, 14:28
Отправитель: Pasha (note2pasha@tut.by)

[Следующий вопрос >>] [Список вопросов]

Отвечает Tigran K. Kalaidjian

Добрый день, Pasha!
У Вас имена регистров написаны РУССКИМИ буквами. Исправьте, всё заработает...


Ответ отправлен: 09.05.2003, 20:34
Отправитель: Tigran K. Kalaidjian


Отвечает ASMодей

Приветствую Вас, Pasha!
Ну ты даешь! Скажи-ка мне чем отличаются символы "а" и "a"?
Не знаешь? Они отличаются кодировкой: первый символ - русская буква,
второй символ - латинская. Так вот у тебя в программе половина
букв "а" - русские. Поэтому компиляторы и ругаются на казалось бы
правильный код.


Ответ отправлен: 10.05.2003, 06:53
Отправитель: ASMодей


Отвечает _vt

Добрый день, Pasha!
Такие ошибки встречаются в примерах из Зубкова, имена регистров (в основном EAX) написаны русскими символами!
Перепиши латинскими в указанных компилятором местах...


Ответ отправлен: 10.05.2003, 20:09
Отправитель: _vt


Отвечает Igoryk

Добрый день, Pasha!
cr0 - это очень специфичный регистр, поэтому сначало его значение нужно занести в eax, а потом уже из eax в переменную!

Ответ отправлен: 12.05.2003, 13:58
Отправитель: Igoryk


 Вопрос № 3159

Помоготе пожалуйста, мне нужно написать программу на ассемблере, которая пишет два байта из ячейки памяти с адресом $0040:$001c в ячейку с адресом $0040:$001a



Вопрос отправлен: 09.05.2003, 14:51
Отправитель: Alexiy II (alexiy-ii@yandex.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Bob Johnson

Доброе время суток, Alexiy II!
push 40h
pop es
mov ax, es:[1ch]
mov es:[1ah], ax


Ответ отправлен: 09.05.2003, 16:42
Отправитель: Bob Johnson


 Вопрос № 3160

Здраствуйте.
Мечта "розового паросёнка" написать свой ну если не дебагер,
то хотябы компилятор (мне так кажется эта задача полегче) но если скодами более или менее понятно, то вот с созданием самих EXE, ничего кроме головной боли нет. Так вот если не сложно вышлите исходник (с коментариями) который бы генерил EXE который бы запускался и без ошибок завершался.
И второе не подскажите естли какой нибудь универсальный алгоритм для дешифровки маш кода, а то я работаю по таблицам но сильно их унифицировать не получается, код растёт, программа тупит, да и тоблицы сильно не позаганяешь (много команд понаизобретали).



Вопрос отправлен: 09.05.2003, 17:06
Отправитель: shum

[Следующий вопрос >>] [Список вопросов]

Отвечает Bob Johnson

Приветствую Вас, shum!
>то хотябы компилятор (мне так кажется эта задача полегче)
Только если с ассемблера. Попробуй тут С++ компилятор напиши...
>который бы генерил EXE который ...
Какой ехе? Что он должен делать?
Смотри описание досовского формата ехе и тогда поймешь, как его генерить. Или лучше для начала com файлы создавай - там вообще только команды и данные. Я думаю, что у тебе пропадет желание раньше, чем ты дойдешь до создание ехе файлов.


Ответ отправлен: 09.05.2003, 19:52
Отправитель: Bob Johnson


Отвечает Lynx

Приветствую Вас, shum!
1. Интересно ты как то программы пишешь!!! Просишь выслать код программы, а потом, наверное, вставляешь туда свой копирайт. :)))
2. Про дешифровку машкода: Почитай "Крис Касперский - "Тонкости дизассемблирования". Если у тебя нет, то я на всякий случай выслал на мыло... ;)


Ответ отправлен: 09.05.2003, 20:43
Отправитель: Lynx


Отвечает Broken Sword

Здравствуйте, shum!
компилятор конечно легче - ведь дебагер это ко всему прочему еще и дизассемблер (компиллятор наоборот). Насчет EXE-файлов - никакой головоной боли быть не должно, если ты знаешь формат PE-заголовка.
Насчет таблиц дешифровки - ничего не поделаешь, действительно там унифицировать не сильно получается, мануал интела том 2 - это то что тебе надо

Ответ отправлен: 09.05.2003, 17:30
Отправитель: Broken Sword


 Вопрос № 3161

Добрый день, эксперты!
У меня вопрос по графическим преобразованиям. Представьте себе вектор. Его начало лежит в точке A(0,0,0). А конец, например в точке B(1,1,1). Этот вектор у нас будет произвольной осью, вокруг которой нужно повернуть точку С(-1,0,0). Вопрос: как повернуть точку вокруг произвольной точки? Очень прошу рассказать все пошагово и с комментариями.



Вопрос отправлен: 09.05.2003, 18:17
Отправитель: Silver

[Следующий вопрос >>] [Список вопросов]

Отвечает Bob Johnson

Здравствуйте, Silver!
Можно сделать так:
1. Перейти в систему координат, где твоя ось будет являться осью, например, х.
2. Повернуть в новой системе точку относительно оси х.
3. Перейти обратно к начальной системе.
Каждое из этих действий по сути дела является умножением на матрицу 4*4. Значит, можно заранее умножить все эти три матрицы, и таким образом получить матрицу поворота относительно твоей оси на заданный угол.
Первая матрица представляет собой просто три вектора (в текущей системе координат), которые составляют новую систему координат (i, j, k), все остальные члены - нули:
i'x, i'y, i'z, 0
j'x, j'y, j'z, 0
k'x, k'y, k'z, 0
0, 0, 0, 1
Вторая - просто поворот относительно какой-либо оси.
Третья матрица - обратная первой.
Если у тебя задана только одна ось (например, i) (т.е. один вектор), то второй можно получить исходя из правила, что скалярное умножение перпендикулярных векторов = 0. а третий - векторно умножив первый на второй (это также дает перпендикулярный вектор). При этом следует иметь ввиду, что все вектора должны быть нормализованы.
Еще есть кватернионы - такие 4-х элементные вектора, три элемента которых определяют реальный 3D вектор (ось), а четвертый - поворот относительно нее. Но я не знаю, как их использовать.


Ответ отправлен: 09.05.2003, 19:53
Отправитель: Bob Johnson


Отвечает Ramzes

Здравствуйте, Silver!
Как это делается в пронстранстве точно не помню, но могу сказать как это сделать на плоскости.
Имеется вектор, с коордиантами х, у. Если повернуть его вокруг начала координат на угол z, то новые координаты вектора будут
(х)*(sinz cosz)
(у) (cosz -sinz)
умножив ети две матрицв получим новые координаты вектора.
А в пронстранстве в первой матрице соответственно 3 координаты, а во второй добавляются коэффиценты поворота вокруг каждой из 3-х осей и коэффицент увеличения (zoom).

Ответ отправлен: 13.05.2003, 13:13
Отправитель: Ramzes


 Вопрос № 3162

Доброго времени суток Эксперты.
Сори за оффтопик, но у меня тут беда приключилась, да и эксперты здесь более я считаю продвинутые.
Беда следущая, перестал запускаться двигатель на винте, самое интересное что электроника работает (греется). Может кто сталкивался с таким. Буду благодарен любому совету. Винт Western Digital



Вопрос отправлен: 09.05.2003, 21:01
Отправитель: Евгений

[Следующий вопрос >>] [Список вопросов]

Отвечает Bob Johnson

Здравствуйте, Евгений!
Винт видимо не определяется? Если есть определенный опыт в работе с электроникой, то прежде всего посмотри, не греется ли какая-либо микросхема очень сильно, если да - то пипец электронной части (в этом случае ищи такой же винт, снимай с него электронику, ставь на свой и переписывай данные). Далее посмотри, нет ли явно сгоревших деталей, если есть - то же самое.
Ну и теперь проверь, приходит ли напряжение на мотор шпинделя (обычно к нему 4 контакта идет, в центре винта). Если накроется мотор шпинделя - то это плохо, т.к. он связан механически с дисками и ты его не заменишь.


Ответ отправлен: 10.05.2003, 23:44
Отправитель: Bob Johnson


Отвечает Pin

Здравствуйте, Евгений!
То что электроника греется - еще ни о чем не говорит (может просто коротит). Попробуй разобрать, может где проводок отошел. Но мой совет: неси винт в ремонт.

Ответ отправлен: 11.05.2003, 00:37
Отправитель: Pin


 Вопрос № 3163

Привет профи!
У меня сгорел блок питания, купил новый, поставил, все четко заработало. Но как именно определить что ето сгорел именно блок питания я не знаю, в этот раз угадал что ето он, а вот на будущее хотелось бы знать как проверить исправность блока питания. У М. Гука, в его книге написано, что сигнал power good должен быть +2.5V,но его вообще нет этого сигнала,причем ни на сгоревшем, ни на новом блоке питания, хотя новый работает????... Подскажите пож-то может я не там мерял етот power good? Спасибо огромное, удачи всем.
Alex.



Вопрос отправлен: 10.05.2003, 20:52
Отправитель: alex (alex5775@email.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Bob Johnson

Здравствуйте, alex!
Как проверить? Очень просто - вот в тот момент, когда у тебя сгорел БП (когда комп не включился) - берешь тестер и меряешь все напряжения, которые он должен выдавать. Должно быть в допустимых пределах. Если напряжения нет - тогда берешь БП, подключаешь его к нагрузке по +5в и меряешь снова. Если напряжения появились - даешь номинальную нагрузку (около 7 А по +5в, 2.5 А по +12в, 5 А по +3.3в) - если напряжения ок, значит неисправна плата. Если нет - тогда бп не держит мощность (хотя такое бывает очень редко).
АТХ БП дают +5vsb всегда, как только подашь 220в. По этой цепи можно нагружать до 1 - 2А (см. на крышке БП). Для полного запуска необходимо подать ноль на какой-то там провод типа "On" (обычно зеленый, кажется). После этого появляются все напряжения.
Не АТХ БП дают все напряжения всегда (когда 220 в подашь).
По поводу неисправности - распространенная неисправность - сгорают диоды (точнее, может даже один из них), которые выпрямляют +12в. Они стоят рядом (но не на!) с радиатором и обдуваются вентилятором. Если вентилятор перестает вращаться, то они начинают очень сильно греться, а т.к. стоят не на радиаторе, а чаще всего рядом - то тепло почти никуда не отдают и возникает тепловой пробой (диод начинает проводить в обе стороны). При этом по переменному напряжению вторичная обмотка замыкается через фильтрующий конденсатор. За счет этого значительно повышается мощность, которую необходимо отдать в первичную обмотку, отчего может сгореть транзистор, сработать защита от КЗ блока питания (если он нормальный) или выбить конденсатор фильтра вторичной обмотки (большим током), излишняя мощность, возникающая также по цепи +5в может вообще неизвестно к чему привести.
Я сталкивался с тем, что горят диоды (при этом срабатывает защита) три раза. Горели по одному, так что его заменяешь - и БП снова в работе.
Да, и не верь тем данным, которые написаны на крышке, типа мощность: 250 вт, +5в - 20 А, +12в - 13А и т.д., т.к. это ИМПУЛЬСНАЯ нагрузка, т.е. если ты реально подключишь к цепи +12в нагрузку на 13 а, то диод-то у тебя именно и сгорит. Реальная (постоянная) мощность блока питания в полтора-два раза ниже.


Ответ отправлен: 10.05.2003, 23:44
Отправитель: Bob Johnson


Отвечает Tigran K. Kalaidjian

Приветствую Вас, alex!
Проверь напряжения на выходах(3+-5+-12V). Если напряжение есть, то всё работает, логично ?
Хм... И что значит "Погорел" ? Дым валил ? Если валил, то ответ очевиден.
Если надо, могу прислать подробную схему ATATX блоков питания, пиши на kalaidjian@pochtamt.ru

Ответ отправлен: 11.05.2003, 18:24
Отправитель: Tigran K. Kalaidjian


Отвечает Lynx

Здравствуйте, alex!
Мне никакой идеи в голову не приходит кроме как на выходе блока питания мультиметром померить напряжение. Если БП работает, то должно показывать 5V, 12V, а если нет, то нет.


Ответ отправлен: 11.05.2003, 11:26
Отправитель: Lynx


 Вопрос № 3165

Приветствую Bob Johnson!!!
Спасибо за столь подробное обьяснение про блок питания,
Вот только как диоды проверить я не знаю(честно говоря).
Подскажи пожалуйста, перепаять я их смогу, в детстве паял, а вот как определить неисправный не знаю. Спасибо.
Удачи, Alex.



Вопрос отправлен: 11.05.2003, 09:05
Отправитель: Alex (alex5775@email.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Bob Johnson

Здравствуйте, Alex!
Лучше диоды выпаять перед проверкой - так будет точней. Они (обычно) выглядят как коричневые цилиндры с двумя выводами по бокам. Исправный диод проводит ток только в одну сторону, в другую - абсолютно нет (меньше микроампера). Если диод не проводит ток ни в одну сторону, или проводит в обе - то он неисправен. Более того, исправный диод в рабочем направлении имеет некоторое сопротивление, связанное с падением напряжения на нем (0,6 в), если его нет - чаще всего он будет проводить в обе стороны.
Проверять лучше тестером, если есть. Если нет - можно взять две батарейки от фанарика и лампочку.


Ответ отправлен: 11.05.2003, 14:15
Отправитель: Bob Johnson


 Вопрос № 3166

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



Вопрос отправлен: 11.05.2003, 10:38
Отправитель: Pasha (note2pasha@tut.by)

[Следующий вопрос >>] [Список вопросов]

Отвечает Hangatyr

Доброе время суток, Pasha!
1. Примерно так:
В Си:
global function_name
Асм:
;...
push ebp
mov ebp, esp
mov eax, [ebp+8] ;получаешь параметр из стека.
;... ;Если их несколько, то [ebp+12] и т.д.
pop ebp
ret
2. Никаким Си не пользовался - по причине отсутствия последнего, ну и как следствие, могу ошибаться.


Ответ отправлен: 11.05.2003, 14:22
Отправитель: Hangatyr


 Вопрос № 3167

Здравствуйте, эксперты!
Есть задача под Дос. В родительской программе создать файл и ввести данные. Передать дочерней программе дескриптор файла и адрес данных, используя свободные вектора прерываний либо область межзадачной связи. В дочерней программе обработать данные, записать в файл, файл закрыть в родительской программе. В связи с этим вопросы: что за область межзадачной связи, как под ДОС запустить и дочернюю и родительскую программы одновременно?
Заранее благодарен
Pasha



Вопрос отправлен: 11.05.2003, 10:43
Отправитель: Pasha (note2pasha@tut.by)

[Следующий вопрос >>] [Список вопросов]

Отвечает Broken Sword

Приветствую Вас, Pasha!
:) в ДОС-е? родительский и дочерний процессы?? ... хм.
ну можно конечно извратиться, переключать по таймеру в реальном режиме... кстати по идее должно быть быстрее чем в протекте если все реализовать руками

Ответ отправлен: 11.05.2003, 12:13
Отправитель: Broken Sword


Отвечает Hangatyr

Приветствую Вас, Pasha!
В досе запустить одновременно две программы? Хм... наверное, имеется в виду из "родительской" запустить другую программу, дождаться ее завершения и закрыть обработанный файл? При помощи функции 04bh запускаем программу, передаем ей хэндл файла, она там что-то с ним делает, завершается, когда управление вернется в род. программу закрываем файл. При чем тут неиспользуемые век. прерываний? Если хочешь, можно, конечно, повесить на какой-нибудь вектор свой обработчик, возвращающий хэндл файла и вызывать его потом в дочерней программе.

Ответ отправлен: 11.05.2003, 14:35
Отправитель: Hangatyr



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (40)
C / C++ (31)
Perl (4)
Builder / Delphi (16)
Pascal (30)
Basic / VBA (12)
Java / JavaScript (11)
PHP (5)
MySQL / MSSQL (4)
Пользователю
Windows 95/98/Me (41)
Windows NT/2000/XP (30)
"Железо" (29)
Поиск информации (14)
Администратору
Windows NT/2000/XP (18)
Linux / Unix (9)
Юристу
Гражданское право (7)
Семейное право (4)
Трудовое право (5)
КоАП (4)

Отправить вопрос всем экспертам выбранной рассылки.




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование


Яндекс цитирования
© 2003 Россия, Москва. Авторское право: RusFAQ.ru


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное