Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
RusFAQ.ru: программирование на языке Assembler
Информационный Канал Subscribe.Ru |
RusFAQ.ru: программирование на языке Assembler
Выпуск № 760
от 21.08.2004, 20:00
Администратор: Имя: Калашников О.А. URL: Информационный ресурс ICQ: 68951340 Россия, Москва |
О рассылке: Задано вопросов: 5748 Отправлено ответов: 15432 Активность: 268.4 %
|
Список экспертов, ответы которых опубликованы в данном выпуске |
Евгений Иванов Статус: Профессиональный Общий рейтинг: 133.24 URL: Super Assembler Software Телефон: НСС +7 831 3107039 [Подробней >>] |
Алексей Статус: Начальный Общий рейтинг: 129.62 [Подробней >>] |
PavPS Статус: Доверительный Общий рейтинг: 117.41 [Подробней >>] |
bocha Статус: Опытный Общий рейтинг: 125.04 [Подробней >>] |
E-terra experts Статус: Доверительный Общий рейтинг: 109.07 [Подробней >>] |
ASMодей Статус: Профессиональный Общий рейтинг: 111.03 [Подробней >>] |
_vt Статус: Профессиональный Общий рейтинг: 118.08 [Подробней >>] |
Coddie Статус: Начальный Общий рейтинг: 109.61 [Подробней >>] |
Ayl Статус: Профессиональный Общий рейтинг: 116.47 [Подробней >>] |
Tigran K. Kalaidjian Статус: Профессиональный Общий рейтинг: 190.79 URL: Оптимизация ПК [Подробней >>] |
Горячев Игорь Статус: Доверительный Общий рейтинг: 118.91 [Подробней >>] |
Краткий перечень вопросов |
Вопрос № 5723. Привет. пишу в проге: push 80 call htons mov serv.sin_port, ax все нормально прога подключается к се... (ответов: 3)
Вопрос № 5724. Здравствуйте, уважаемые эксперты! Есть ли такая программа, которая считает такты или замеряет время ... (ответов: 4)
Вопрос № 5725. Здорово всем!!! У меня такой трабл :-( Создаю exe файл > настраиваю сегменты, все дела > пытаюсь выв... (ответов: 1)
Вопрос № 5728. Здраствуйте. При написании программы я обьявляю большой масив данных(16 кб). Естествено размер моей ... (ответов: 3)
Вопрос № 5729. Здравствуйте, уважаемые эксперты. В последнее время начал интересоваться созданием своего яхыка прог... (ответов: 2)
Вопрос № 5730. Пишу boot sector в TASM 4.1. Он, гад, вставляет где не поподя NOPы. Можно от этого избавиться? (дир... (ответов: 2)
Вопрос № 5731. Пожалуйста, у кого есть (не только эксперты!), киньте ссылки на оригинальные доки Intel'a (по архите... (ответов: 2)
Вопрос № 5732. Здравствуйте! Помогите мне, плз, разобраться с 2-мя проблемами. 1.Отрывок из вируса Калашникова: ---... (ответов: 1)
Вопрос № 5733. Hello, Team!! 1.При запуске prog01 в td5(tasm5) после вызова int21H в AL появляется 24H Откуда?! При... (ответов: 3)
Вопрос № 5734. Доброго времени суток! Объясните пожалуйста, как пользоватся командой div (FASM). Я пытаюсь поместит... (ответов: 2)
Вопрос № 5735. Здраствуйте. В книге Зубкова прочитал что- " Как и следовало ожидать, основным средством создан... (ответов: 3)
Вопросов: 11, ответов: 26
Вопрос № 5723 |
Привет.
пишу в проге:
push 80
call htons
mov serv.sin_port, ax
все нормально прога подключается к серверу по 80 порту, а если напишу:
mov ax, 80
push ax
call htons
mov serv.sin_port, ax
ничего не происходит. Где ошибка?
Вопрос отправлен: 13.08.2004, 18:56
Отправитель: andrey
[Следующий вопрос >>] [Список вопросов]
Отвечает Евгений Иванов
Приветствую Вас, andrey!
Какая у тебя разрядность по умолчанию?
Если 32-битная, тогда всё понятно.
Тогда делай
sub eax,eax
mov al,80h
push eax
* EMan: -=- И легко перо, да на крышу не закинешь. =-=
Ответ отправлен: 16.08.2004, 18:39
Отправитель: Евгений Иванов
Отвечает Алексей
Доброе время суток, andrey!
Теоритически - все правильно, и должно работать. Можно предположить, что компилятор (маловероятно), но посмотреть стоит, как все закомпилировалось - попробуй дизассемблировать... Самый реальный вариант - трассировка первого и второго варианта. Обрати внимание на регистр (E)SP. Может у тебя компилятор воспринимает "push 80" как выталкивание в стек двойного слова? Тогда
mov eax, 80
push eax
должно помоч.
Ответ отправлен: 16.08.2004, 18:11
Отправитель: Алексей
Отвечает PavPS
Доброе время суток, andrey!
htons принимает из стека байт или слово?
80 помещается в байт, а AX в слово.
Ответ отправлен: 13.08.2004, 19:47
Отправитель: PavPS
Вопрос № 5724 |
Здравствуйте, уважаемые эксперты!
Есть ли такая программа, которая считает
такты или замеряет время выполнения
участка кода?
Вопрос отправлен: 13.08.2004, 19:11
Отправитель: Vitaliy (Lytonin@rambler.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает bocha
Доброе время суток, Vitaliy!
Тебе нужна инструкция процессора rdtsc, которая возвращает количество тактов с момента запуска процессора или профайлер, который подсчитывает время выполнения твоего кода.
Ответ отправлен: 17.08.2004, 03:39
Отправитель: bocha
Отвечает PavPS
Добрый день, Vitaliy!
http://wasm.ru/forum/index.php?action=vthread&forum=3&topic=4364
Ответ отправлен: 13.08.2004, 19:52
Отправитель: PavPS
Отвечает E-terra experts
Добрый день, Vitaliy!
Как ты себе это представляешь? какаянибудь прога типа дебагера чтоль?
число тактов - процессорно зависимая величина. соответственно особой нагрузки не несет..
а время выполнения имхо не так уж и сложно самому посчитать :)
Приложение:
Ответ отправлен: 14.08.2004, 01:04
Отправитель: E-terra experts
Отвечает ASMодей
Приветствую Вас, Vitaliy!
Есть, и не одна. Такие программы называются Profiler. Одна из наиболее известных - VTune от Intel.
Ответ отправлен: 17.08.2004, 05:18
Отправитель: ASMодей
Вопрос № 5725 |
Здорово всем!!!
У меня такой трабл :-(
Создаю exe файл > настраиваю сегменты, все дела > пытаюсь вывести строку на экран - не выходит. Оказывается сегменты ds es не настроены. В литературе нашел
mov ax,dgroup
mov ds,ax
Вроде помогло.
Теперь понадобились 32 битные регистры. Пишу
.model 386
use16 (где надо - для Доса)
И вот в чем прикол - перестает работать. Перерыл кучу литературы, нигде не нащел чего-нибудь похожего.
ПОМОГИТЕ!!!
Вопрос отправлен: 13.08.2004, 20:41
Отправитель: Demon2030 (demon2030@nursat.kz)
[Следующий вопрос >>] [Список вопросов]
Отвечает ASMодей
Добрый день, Demon2030!
Нужен текст программы, иначе не понятно где ошибка.
Ответ отправлен: 17.08.2004, 05:19
Отправитель: ASMодей
Вопрос № 5728 |
Здраствуйте.
При написании программы я обьявляю большой масив данных(16 кб). Естествено размер моей программы тоже увеличивается на 16 кб. Это меня совсем не радует. Программа типа com. Пишу под дос. Тоесть я хочу сделать динамическое выделение памяти. Типа malloc(...) в си. Как это сделать ?
Вопрос отправлен: 16.08.2004, 18:10
Отправитель: DeHunter
[Следующий вопрос >>] [Список вопросов]
Отвечает _vt
Приветствую Вас, DeHunter!
Функциями MS-DOS 48h,49h,4Eh можно выделять блоки памяти, изменять размер блока памяти и освобождать. Счас могу ошибиться с номерами - посмотри по справочнику в этом диапазоне :)
* Origin : Life begins at 1000Mhz!
Ответ отправлен: 16.08.2004, 19:57
Отправитель: _vt
Отвечает Алексей
Доброе время суток, DeHunter!
Динамическое выделение памяти осуществляется в ДОСе через прерывание 21h, функция 48h
вот так:
mov ah, 48h
mov bx, <требуемый блок> ; здесь указывается в 16 байтных конструкциях т.е. требуемый размер разделим сначала на 16, а потом запталкиваем в BX
int 21h
Блок памяти будет доступен по адресу AX:0000
Для освобождения памяти делаем так:
mov ah, 49h
mov ex, ax ; тот AX, что нам вернул предыдущий вызов
int 21h
По этому вопросу советую почитать старый добрый HELPBIOS
Ответ отправлен: 16.08.2004, 20:20
Отправитель: Алексей
Отвечает Евгений Иванов
Доброе время суток, DeHunter!
Для ДОС (а он устарел уже) используй его же функции для работы с памятью.
48h, 49h, 4Ah.
Удачи.
* EMan: -=- И легко перо, да на крышу не закинешь. =-=
Ответ отправлен: 17.08.2004, 16:54
Отправитель: Евгений Иванов
Вопрос № 5729 |
Здравствуйте, уважаемые эксперты.
В последнее время начал интересоваться созданием своего
яхыка программирования. :) Простенький компилятор языка из нескольких слов
уже написан. Но вот что делать дальше ? :) Ищу инфу по следеющим вопросам:
1) проектирование языков (именно языков, а не компиляторов)
Что-то типа, мол такой оператор использовать лучше чем какой-то другой,
от такой-то конструкции вообще стоит отказаться и т.д. Надеюсь вы меня поняли.
2) оптимизирующие компиляторыю.
Принципи написания, основы оптимизации кода ...
3) Интерпретацыя кода. Как повысьть эффективность интерпретации..
Вообщем любые материалы по даной теме приветствуються.
Можете закинуть на мылоб если что-то есть на руках :)
Заранее спасибо.
Вопрос отправлен: 16.08.2004, 20:18
Отправитель: x3m (x3ms@ukr.net)
[Следующий вопрос >>] [Список вопросов]
Отвечает Coddie
Добрый день, x3m!
Я изучал программирование компилеров по книжке Альфреда Ахо, Джеффри Ульмана и Рави Сети "Компиляторы: принципы, технологии, инструменты". На мой взгляд - это просто настоящая библия для разработчика компилеров! Там есть все - от создания простенького однопроходного компилера до
оптимизации кода в процессе компиляции. Подробно рассмотрен синтаксический анализ - от обычного рекурсивного спуска до LR-парсинга. Короче - самая лучшая книжка которую я видел!
Прочитав сию книжку, я написал свой компилятор который успешно работает, генерит EXEшники, все пучком. Вот, собираюсь добавлять в него поддержку .NET :)
Ответ отправлен: 16.08.2004, 23:49
Отправитель: Coddie
Отвечает Алексей
Приветствую Вас, x3m!
Ссылок не дам, а вот попробовать TurboC - он из C'шного кода делает ASM-код. ЭТО ОЧЕНЬ ДАЖЕ может пригодиться. Там можно и оптимизацию через регистры включить, и изучить, как он это делает. Советую.
Ответ отправлен: 17.08.2004, 11:07
Отправитель: Алексей
Вопрос № 5730 |
Пишу boot sector в TASM 4.1.
Он, гад, вставляет где не поподя NOPы.
Можно от этого избавиться? (директивы, опции?)
(Переписывать в другой ассемблер влом)
И еще: пишу бут на дискету - работает нормально.
Пишу на винчестер - загрузка Win98 идет нормально, а WinXP перезагружается. В чем может быть дело, даже предположить не могу.
(Бут с выбором варианта загрузки. Суть: пишу "нормальные" буты после MBR (0/0/2...0/0/63), и после отработки своего(0/1/1) загружаю нужный "вместо" себя на 0:7с00.
(7d..: mov bx,7c00
7dff: push bx
7e00: int 13
7e02: ret))
Вопрос отправлен: 17.08.2004, 01:45
Отправитель: Федя
[Следующий вопрос >>] [Список вопросов]
Отвечает Алексей
Приветствую Вас, Федя!
Я так делаю:
.386
_CODE segment public use16 'CODE'
assume cs:_CODE, ds:_CODE
ORG 100h
$code$ equ $
start:
mov ax, 07b0h
mov ds, ax
mov ss, ax
mov es, ax
mov sp, 0ffffh
push ax
push offset begin
retf
begin: и далее по тексту...
Генерится .com файл без лишних NOP'ов, только он прибавляет 100h к смещениям. Поэтому я и пишу 07b0h. Т.е. сегмент реального режима на 10h уменьшаю. В таком случае все нормально генерится.
Ответ отправлен: 17.08.2004, 11:03
Отправитель: Алексей
Отвечает Евгений Иванов
Добрый день, Федя!
Для этого нужно включить многопроходовое Ассемблирование.
/m5
* EMan: -=- И легко перо, да на крышу не закинешь. =-=
Ответ отправлен: 17.08.2004, 16:55
Отправитель: Евгений Иванов
Вопрос № 5731 |
Пожалуйста, у кого есть (не только эксперты!), киньте ссылки на оригинальные доки Intel'a (по архитектуре процессоров, системе команд и т.д.). Не ругайте меня сильно, просто я искал на их сайте, но пока ничего не нашёл, да и сайт у них, по моему мнению, много "весит".
Вопрос отправлен: 17.08.2004, 07:22
Отправитель: Xych (huch@ezmail.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Алексей
Добрый день, Xych!
Помню, что качал с оф. сайта, откуда, сам найти не могу, но по почте могу выслать... пиши на мыло clover@fromru.com если нужно.
полезные ссылки на архитектуру ATA, SCSI и т.п. t10.org, t11.org и так далее ;)
Ответ отправлен: 17.08.2004, 10:58
Отправитель: Алексей
Отвечает Coddie
Здравствуйте, Xych!
На том же Интеле в Literature Centre можно заказать бумажный вариант книг. Я сам заказывал 2 года назад. Заказал в пятницу, принесли в понедельник в белой коробочке прямо домой (я даже на почту за ними не бегал!) First class express mail.
Ответ отправлен: 17.08.2004, 10:08
Отправитель: Coddie
Вопрос № 5732 |
Здравствуйте!
Помогите мне, плз, разобраться с 2-мя проблемами.
1.Отрывок из вируса Калашникова:
--------------------------------------------
.286
cseg SEGMENT
assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG
org 100h
Begin:
jmp Init
Off_move dw offset Lab_jmp
Seg_move dw 0BF00h
Off_return dw offset Lab_return
Seg_return dw ?
Init:
mov es,Seg_move
mov di,100h
mov cx,offset Finish-100h
mov si,100h
rep movsb
jmp dword ptr cs:[Off_move]
--------------------------------------------
Я никак не могу понять почему происходит изменение регистра cs в последней строке на 0BF00h.
2. Также из рассылки Калашникова:
--------------------------------------------
jmp dword ptr cs:[Int_10h_vect]
Int_10h_vect dd ? ;здесь вектор прерывания
--------------------------------------------
В переменной мы сохраняем век тор, т.е. 4 байта (seg+offset). Зачем тогда в команде JMP указывать регистр CS ?
Заранее спасибо за помощь!
Вопрос отправлен: 17.08.2004, 09:46
Отправитель: Alex
[Следующий вопрос >>] [Список вопросов]
Отвечает Ayl
Добрый день, Alex!
1. Потому что при jmp dword ptr cs:[Off_move] из памяти по адресу cs:Off_move извлекаются 4 байта (2 слова). Первое слово обозначает смещение точки перехода и заносится в регистр IP, а второе - сегмент, который заносится в регистр CS. В качестве смещения прописано смещение метки Lab_jmp (Off_move dw offset Lab_jmp - заметь, что переменная описана как слово: dw), а в качестве смещения - непосредственное значение BF00 (Seg_move dw 0BF00h). Вот отсюда и происходит изменение регистра CS.
2. jmp dword ptr cs:[Int_10h_vect] - указание процессору извлечь 4 байта из указанного адреса (см. п.1). А адрес задается с помощью указания сегмента и смещения. По умолчанию адресация памяти ведется либо через сегментный регистр DS, либо через регистр SS (при операциях со стеком и адресацией смещения с помощью регистров SP и BP). Но в данном примере регистр DS не установлен на наш сегмент данных, поэтому и приходится адресоваться через сегмен тный регистр CS.
Ответ отправлен: 17.08.2004, 14:25
Отправитель: Ayl
Вопрос № 5733 |
Hello, Team!!
1.При запуске prog01 в td5(tasm5)
после вызова int21H в AL появляется 24H
Откуда?!
При запуске в afdpro зтот эффект отсутствует
2.Та же прога изначально грузится в разные
сегменты. В afdpro cs=ds=es=ss=1E5A
В td cs=ds=es=ss=0BA5
Почему?
Regards,
Frigid cow
Приложение:
Вопрос отправлен: 17.08.2004, 16:39
Отправитель: frigidcow
[Следующий вопрос >>] [Список вопросов]
Отвечает Алексей
Приветствую Вас, frigidcow! (веселый ник...)
Во время загрузки программы, ДОС (а также дебагеры) должны загрузить CS, DS, SS, SP и естественно IP, другие значения регистров не гарантируются... старые версии ДОС загружали также регистр AX. В нем хранилась барахолка, связанная с какими-то параметрами командной строки (полный бред). Поэтому сейчас ничего нельзя сказать про этот регистр, кроме того, что в нем не должно быть 0ffh. Причем 0ffh означает какую-то непонятную ошибку... о которой ничего не сказано в документации. Даже если там 0ffh - то скорее всего все в полном порядке...
Ответ отправлен: 17.08.2004, 17:53
Отправитель: Алексей
Отвечает Ayl
Доброе время суток, frigidcow!
Да, есть такая фишка. Во всех справочниках по прерываниям для функции 9 прерывания 21 написано, что она не изменяет регистры. Но на самом деле в действительности после выполнения прерывания регистр AL содержит символ '$' (т.е. значение 24h). Я так подозреваю, что эта функция не сохраняет значение регистра AX, но использует его для вывода строки (типа последовательности команд:
@@loop:
lodbs
cmp al, '$'
je @@exit
stosb
inc di
jmp short @@loop
@@exit:
)
поэтому символ окончания строки и остается в AL.
Убедиться, что это так, можно с помощью программки в Приложении. Если запустить ее без отладчика, то будет выведена строка с завершающим символом '$', хотя перед вызовом прерывания в регистр AL заносится значение 21h (символ '!').
Насчет afdpro трудно сказать, это вообще глючный отладчик (например, он запросто вешается с помощью перепрограммирования контроллера прерывани й, а TD - нет). Возможно, они эмулируют вызов прерываний, возможно что-то еще. По крайней мере, будь уверен, без отладчика регистр AL становится равным 24h.
То, что прога грузится в разные сегменты под разными отладчиками - ничего удивительного. Отладчик же тоже занимает место в памяти. Ну а под прогу он сам выделяет место. Что выделилось - туда и грузит. У меня, например, в TD грузится в сегмент 688D (Turbo Debbuger 3.2).
Приложение:
Ответ отправлен: 17.08.2004, 18:56
Отправитель: Ayl
Отвечает Tigran K. Kalaidjian
Здравствуйте, frigidcow!
Так положено, т.е. это не баг, это фича =)
В приложении - описание по Ральфу Брауну.
Приложение:
Ответ отправлен: 17.08.2004, 21:43
Отправитель: Tigran K. Kalaidjian
Вопрос № 5734 |
Доброго времени суток!
Объясните пожалуйста, как пользоватся командой div (FASM).
Я пытаюсь поместить окошко в центр экрана:
start:
invoke GetModuleHandle,0 ; узнаем хэндл собственного процесса
mov [hinstance],eax ; и запоминаем его
invoke GetDesktopWindow ; узнаем хэндл Рабочего Стола
invoke GetWindowRect, eax, screen ; по хэндлу узнаем края рабочего стола
mov eax, [screen.right]
div eax, 2 ; !!! extra charasters on line !!!
sub eax, 300
mov [mainform.left], eax
mov eax, [screen.bottom]
div eax, 2 ; !!! extra charasters on line !!!
sub eax, 200
mov [mainform.top], eax
mov [mainform.right],600
mov [ mainform.bottom],400
Может быть есть лучший способ узнать, где центр?
И, оно центрирует по центру всего экрана, а можно ли центрировать по центру рабочей области? (это без панели задач)
Заранее спасибо
Вопрос отправлен: 17.08.2004, 19:30
Отправитель: kDenis
[Следующий вопрос >>] [Список вопросов]
Отвечает Горячев Игорь
Азы асма знать надо!!! Div имеет один операнд - делитель! Делимое в edx:eax
Ответ отправлен: 17.08.2004, 22:37
Отправитель: Горячев Игорь
Отвечает Евгений Иванов
Добрый день, kDenis!
Call GetWindowRect,ebx,ofs rc
mov eax,[rc.right]
sub eax,[rc.left]
inc eax
xchg esi,eax
mov eax,[rc.bottom]
sub eax,[rc.top]
inc eax
xchg edi,eax
Call GetSystemMetrics,SM_CXSCREEN
sub eax,esi
shr eax, 1
mov [rc.left],eax
Call GetSystemMetrics,SM_CYSCREEN
sub eax,edi
shr eax, 1
mov [rc.bottom],eax
Call SetWindowPos,ebx,0,[rc.left],[rc.bottom],0,0,
SWP_NOZORDER or SWP_NOSIZE
* EMan: -=- И легко перо, да на крышу не закинешь. =-=
Ответ отправлен: 21.08.2004, 03:50
Отправитель: Евгений Иванов
Вопрос № 5735 |
Здраствуйте.
В книге Зубкова прочитал что- " Как и следовало ожидать, основным средством создания драйверов является ассемблер, и хотя применение С здесь возможно (в отличие от случая драйверов DOS), оно оказывается гораздо сложнее, чем применение ассемблера..."
Так это что в ДОСе нельзя драйвера на С писать.Почему???
Вопрос отправлен: 17.08.2004, 19:54
Отправитель: Семен
[Следующий вопрос >>] [Список вопросов]
Отвечает Алексей
Добрый день, Семен!
Достаточно неудобно писать драйвера под ДОС на С, и это правильно. В ДОСе объем памяти 1 мегабайт. Драйвера должны быть маленькими, иначе другим программам места не останется для работы. Си генерирует .COM файл с большим количеством дополнительного "мусора", мало того, в С тяжеловато оставить часть программы резидентной (в памяти), а ненужную - убрать. Действительно проще на ассемблере написать.
Ответ отправлен: 18.08.2004, 15:15
Отправитель: Алексей
Отвечает Coddie
Приветствую Вас, Семен!
Можно, но обычно не пишут. Просто автор видимо, не пробывал, вот и написал. А под Windows дрова все таки в основном на Си пишут, а не на ассемблере
Ответ отправлен: 17.08.2004, 21:58
Отправитель: Coddie
Отвечает Tigran K. Kalaidjian
Приветствую Вас, Семен!
Можно, но не слишком удобно.
Ответ отправлен: 21.08.2004, 10:00
Отправитель: Tigran K. Kalaidjian
Форма отправки вопроса |
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.
(C) 2002-2003 Команда RusFAQ.ru.
Вопрос и дополнение |
Ваш вопрос:
Приложение (если необходимо):
Получить ответов:
Выбор рассылки |
Программисту Assembler (26) C / C++ (13) Perl (7) Builder / Delphi (15) Pascal (25) Basic / VBA (5) Java / JavaScript (6) PHP (13) Криптография (8) WinAPI (13) Радиоэлектроника (8) |
Пользователю Windows 95/98/Me (45) Windows NT/2000/XP (59) "Железо" (38) Поиск информации (18) |
Администратору Windows NT/2000/XP (36) Linux / Unix (19) |
Юристу Гражданское право (10) Семейное право (7) Трудовое право (9) КоАП (6) |
Отправить вопрос всем экспертам выбранной рассылки.
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.
http://subscribe.ru/
http://subscribe.ru/feedback/ |
Адрес подписки |
Отписаться |
В избранное | ||