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

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


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

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

Выпуск № 613
от 11.08.2003, 23:30

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


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

dimka
Статус: Доверительный
Общий рейтинг: 150
[Подробней >>]
Zedr0n
Статус: Доверительный
Общий рейтинг: 108.79
[Подробней >>]
Andy
Статус: Опытный
Общий рейтинг: 104.28
[Подробней >>]
 
Tigran K. Kalaidjian
Статус: Профессиональный
Общий рейтинг: 125.51
URL: Методы оптимизации работы ПК
[Подробней >>]
Алексей
Статус: Доверительный
Общий рейтинг: 104.61
[Подробней >>]
_vt
Статус: Профессиональный
Общий рейтинг: 119.31
[Подробней >>]
 
Lynx
Статус: Опытный
Общий рейтинг: 117.18
Телефон: (8442) 750522
[Подробней >>]
Евгений Иванов
Статус: Опытный
Общий рейтинг: 144.94
URL: Super Assembler Software
Телефон: НСС +7 831 3107039
[Подробней >>]
Maverick
Статус: Профессиональный
Общий рейтинг: 126.73
URL: Эхоконференция по вирмейкингу
Телефон: 89039415024 (BeeLine GSM)
[Подробней >>]
 
Bob Johnson
Статус: Профессиональный
Общий рейтинг: 151.64
URL: Программирование
[Подробней >>]
Ayl
Статус: Профессиональный
Общий рейтинг: 118.26
[Подробней >>]
Igoryk
Статус: Профессиональный
Общий рейтинг: 111.02
URL: CodeClimber.Com
[Подробней >>]
 
vitya
Статус: Профессиональный
Общий рейтинг: 108.06
[Подробней >>]
Andrew Vext
Статус: Профессиональный
Общий рейтинг: 105.16
[Подробней >>]


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

Вопрос № 3865. мой вопрос наверное ламерский. но как без биоса обращаться к знакогенератору?а то я так и не понял г... (ответов: 1)
Вопрос № 3866. Доброго время суток! Где можно взять исходники обработчиков прерываний! К примеру 13Н & 10H Спасибо!... (ответов: 5)
Вопрос № 3868. Как в Тасме созд Com Фаил(Я туп в этом)... (ответов: 10)
Вопрос № 3869. Здравствуйте! Мне не понятно назначение трех параметров (выравнивание, объединение и класс) у дирикт... (ответов: 3)
Вопрос № 3870. Приветствую вас ЭксперТы. У меня есть глупый вопрос. Почему 1Кб = 1024б, а не 1000...[[:)... (ответов: 10)

Вопросов: 5, ответов: 29


 Вопрос № 3865

мой вопрос наверное ламерский. но как без биоса обращаться к знакогенератору?а то я так и не понял где находяться адреса этого второго слоя.



Вопрос отправлен: 07.08.2003, 00:33
Отправитель: evgeniy denisenko

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

Отвечает dimka

Здравствуйте, evgeniy denisenko!
ZZZ??

Ответ отправлен: 07.08.2003, 10:59
Отправитель: dimka


 Вопрос № 3866

Доброго время суток!
Где можно взять исходники обработчиков прерываний!
К примеру 13Н & 10H
Спасибо!



Вопрос отправлен: 07.08.2003, 10:09
Отправитель: Madman (yo-ho@km.ru)

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

Отвечает Zedr0n

Здравствуйте, Madman!
Способ 1)
Берешь SoftIce+Icedump и вручную смотришь, что происходит при вызове этих прерываний.
Способ 2)
Все обработчики записаны в BIOS, берешь прошивку материнки и дизассемблишь...
Удачи!


Ответ отправлен: 08.08.2003, 21:00
Отправитель: Zedr0n


Отвечает Andy

Здравствуйте, Madman!
Например, деасемблировать биос с помощью IDA.

Ответ отправлен: 07.08.2003, 10:23
Отправитель: Andy


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

Доброе время суток, Madman!
Если Вам нужны исходники ДОСовских прерываний, то зайдите на http://www.dospage.ru и скачайте исходники MS-DOS
Если Вам нужны исходники БИОСовских прерываний(например int10h и int13h), то попробуйте дизассемблировать код программы из БИОС(для получения кода можно воспользоваться утилиткой bios320).
Я сам пока не смог нормально дизассемблировать этот код, поэтому советую воспользоваться следующим советом:
Предположим Вам надо посмотреть подпрограмму, выполняющуюся при вызове ф-ции 02h прерывания int 10h. Зайдем в Ваш любимый отладчик (я буду описывать действия в Debug.exe).
Посмотрим, что у нас лежит в двойном слове по адресу 0000:0040 (т.е. по смещению 4*10h, мы ведь смотрим int10h, не так ли?):
-d 0000:0040
0000:0040 07 00 70 CC 4D F8 00 F0-41 F8 00 F0
у меня это оказалось 070070СС => обработчик сидит по адресу CC70h:0007h.
теперь смотрим, что "сидит" по этому адресу(на случай, если потеряются отступы, выслал Вам на мыло копию):
-U CC70:0007
CC70:0007 FB STI
CC70:0008 84E4 TEST AH,AH
CC70:000A 7414 JZ 0020
CC70:000C 3D024F CMP AX,4F02
CC70:000F 740A JZ 001B
CC70:0011 80FC4F CMP AH,4F
CC70:0014 740A JZ 0020
CC70:0016 EA0C00860E JMP 0E86:000C
Мда.. тут проверяются возможные номера ф-ции. Такой способ отладки не очень-то приятен. Давайте попробуем по-другому. Попробуем протрассировать код:
-r cs
CS 15AA
:cc70
-r ip
IP 0100
:0007
Теперь в паре CS:IP полный адрес нашего обработчика int 10h
-r AX
AX 0000
:0201
Подсунем ему ф-цию 02h(как и договаривались)
-t
AX=0201 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=15AA ES=15AA SS=15AA CS=CC70 IP=0008 NV UP EI PL NZ NA PO NC
CC70:0008 84E4 TEST AH,AH
Все! теперь мы в обработчике! Узнаёте первую строчку? (тут сначала идёт статус регистров, а затем дизассемблированная команда). Далее, выполняя команду t, вы будете гулять по обработчику, в том же порядке выполняя комады, как это бы делалось в результате выполнения следующего кода:
mov ah, 02h
mov al, 01h
int 10h
Выход из обработчика Вы обнаружите, увидев примерно такую строчку:
AX=0201 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=15AA ES=15AA SS=15AA CS=C000 IP=0226 NV UP EI NG NZ NA PO NC
C000:0226 CF IRET
Если чего не понятно - пишите на kalaidjian@pochtamt.ru

Ответ отправлен: 07.08.2003, 16:26
Отправитель: Tigran K. Kalaidjian


Отвечает Алексей

Здравствуйте, Madman!
Попробуй сам создать программу, которая брала бы дамп памяти по адресу обработчика прерывания и сохраняла в файл. А дальше можешь посмотреть исходный код в каком-нибудь дизассемблере. Только зачем тебе это надо? Там ничего интересного нет!
Если что, пиши: aleksey_1@list.ru

Ответ отправлен: 07.08.2003, 13:37
Отправитель: Алексей


Отвечает dimka

Приветствую Вас, Madman!
По-мойму в книге Том Свана.попробуй поискать, а если найдёшь в электронном варианте, вышли мне!!! doctor_dimka@mail.ru.

Ответ отправлен: 07.08.2003, 10:41
Отправитель: dimka


 Вопрос № 3868

Как в Тасме созд Com Фаил(Я туп в этом)



Вопрос отправлен: 07.08.2003, 11:45
Отправитель: Ленин

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

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

Здравствуйте, Ленин!
Если ваша программа лежит в proga.asm,то выполните следующие действия(пусть proga.asm лежит в папке с tasm.exe):
tasm proga.asm /m3
tlink /t proga
Теперь у Вас есть proga.com, если при компиляции не было обнаружено ошибок. Если Вы - начинающий, тo можно пользоваться некоторыми интегрированными оболочками, типа TurboShell.
Если будут вопросы, пишите на kalaidjian@pochtamt.ru

Ответ отправлен: 07.08.2003, 12:02
Отправитель: Tigran K. Kalaidjian


Отвечает _vt

Приветствую Вас, Ленин!
1)Создаешь в любом текстовом редакторе файл prog.asm (надеюсь, ты не туп в этом!! :-))
2)Пишешь текст программы (тут я даже боюсь спрашивать об умственных способностях...)
3)Сохраняешь
4)запускаешь tasm.exe с параметром prog.asm, если текст лежит в том же каталоге, что и tasm.exe
Если нет, указываешь полное имя файла prog.asm
5)Вряд ли ты дойдешь до этого пункта, но если вдруг получилось все вышеописанное, в тексте не было ошибок и появился рядом с prog.asm файлик prog.obj, то запускаешь tlink.exe с ключом /t и полным именем obj-файла
6) В результате будет com-файл (если будет...) :-)
P.S. А настоящий Ленин бы сам справился!!! :-)

---===*** E-Man - forever! ***===---


Ответ отправлен: 09.08.2003, 17:47
Отправитель: _vt


Отвечает Lynx

Здравствуйте, Ленин!
tasm.exe prog.asm ;<-это Вы, Владимир Ильич, получите prog.obj
tlink.exe /x /t prog.obj ;<- а это получите prog.com
Вместо prog.asm пишете свой файл, и, если всё без ошибок, то должно работать.


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


Отвечает Евгений Иванов

Доброе время суток, Ленин!
VERSION T400
IDEAL
P386
Model use16 Tiny,Normal StdCall
SMART
Locals @@
macro trap
db '@H'
endm
Segment AAAA byte public 'code' use16
Assume CS:AAAA,DS:AAAA
Org 256
proc begin

endp
Ends DERIAN
End begin
;----------- make.bat
@echo off
cls
e:\asm\bin\tasm.exe /m9 /t /ml /ie:\asm\include %1.asc,%1.obj >_errors.obj
if errorlevel 1 goto exit
e:\asm\bin\tlink.exe /Tdc /c /C /x /yx %1.obj ,%1.com
if errorlevel 1 goto exit
del %1.obj
goto end
:exit
e:\asm\into\hiew\hiew.exe _errors.obj
:end


Ответ отправлен: 07.08.2003, 19:00
Отправитель: Евгений Иванов


Отвечает Алексей

Доброе время суток, Ленин!
tasm proga.asm
tilnk /t proga.obj
А вообще, нужно учиться, учиться и ещё раз учиться!
(с) Ленин.

Ответ отправлен: 07.08.2003, 13:29
Отправитель: Алексей


Отвечает dimka

Доброе время суток, Ленин!
Допустим у тебя есть фаил lenin.asm
Пиши в строке адреса:
1)Tasm.exe lenin.asm
2)Tlink.exe lenin.obj /t/x
3)lenin.com


Ответ отправлен: 07.08.2003, 11:55
Отправитель: dimka


Отвечает Andy

Здравствуйте, Ленин!
В программе не задаёшь сегмент стека и сегмент данных, а начинаешь с org 100h. Тасмом компилишь как обычно, а у линкера задаёшь опцию /t.

Ответ отправлен: 07.08.2003, 11:58
Отправитель: Andy


Отвечает Zedr0n

Приветствую Вас, Ленин!
Пример .com файла в приложении. Компилишь следующим образом:
tasm file.asm
tlink /t file.obj
del file.obj
del file.map


Приложение:

Ответ отправлен: 08.08.2003, 21:03
Отправитель: Zedr0n


Отвечает Maverick

Доброе время суток, Ленин!
Партия тебе в этом поможет...
tasm.exe 1.asm
tlink.exe 1.obj /t


Ответ отправлен: 08.08.2003, 14:07
Отправитель: Maverick


Отвечает Bob Johnson

Доброе время суток, Ленин!
tlink /t
а в тасме надо указать org 100h и использовать только один сегмент.

* EMan1.4: ---===*** Die young - live free ***===---


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


 Вопрос № 3869

Здравствуйте!
Мне не понятно назначение трех параметров (выравнивание, объединение и класс) у дириктивы
Segment. Не могли бы вы помочь?



Вопрос отправлен: 07.08.2003, 11:56
Отправитель: Александр

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

Отвечает Ayl

Добрый день, Александр!
Выравнивание - сообщение компоновщику, что он должен позаботиться о том, чтобы сегмент начинался с указанной границы.
Возможные значения:
BYTE - без выравнивания
WORD - начало сегмента выравнивается на начало следующего слова
DWORD - то же двойного слова
PARA - то же параграфа (16 байт)
PAGE - то же страницы (256 байт)
MEMPAGE - то же памяти (4К)
Объединение - предназначено для указания компоновщику, каким образом объединять сегменты, находящиеся в разных модулях и имеющие одинаковые имена:
PRIVATE - без объединения
PUBLIC - объединение в один сегмент
MEMORY - то же, что PUBLIC, но для сегмента стека
COMMON - размещает все сегменты с одним именем по одному и тому же адресу
VIRTUAL - описывает сегмент специального вида, который должен объявляться внутри другого сегмента. Компоновщик рассматривает его как общую область памяти и присоединяет к сегменту, в котором он находится
AT xxx - устанавливает сегмент по
UNINIT - вырабатывает предупреждение, позволяющее получить информацию о попытке записи инициализированных донных в сегмент неинициализированных данных
Класс - строка, которая помогает компоновщику определить нужный порядок размещения сегментовю Компоновщик группирует вместе все сегменты с одним классом

Ответ отправлен: 07.08.2003, 15:13
Отправитель: Ayl


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

Добрый день, Александр!
Сегмент программы описывается директивами SEGMENT и ENDS.
имя_сегмента segment readonly выравн. тип разряд 'класс'
...
имя_сегмента ends
Имя сегмента — метка, которая будет использоваться для получения сегментного адреса, а также для комбинирования сегментов в группы.
Все пять операндов директивы SEGMENT необязательны.
READONLY. Если этот операнд присутствует, MASM выдаст сообщение об ошибке на все команды, выполняющие запись в данный сегмент. Другие ассемблеры этот операнд игнорируют.
Выравнивание. Указывает ассемблеру и компоновщику, с какого адреса может начинаться сегмент. Значения этого операнда:
BYTE — с любого адреса;
WORD — с четного адреса;
DWORD — с адреса, кратного 4;
PARA — с адреса, кратного 16 (граница параграфа);
PAGE — с адреса, кратного 256.
По умолчанию используется выравнивание по границе параграфа.
Тип. Выбирает один из возможных типов комбинирования сегментов:
тип PUBLIC (иногда используется синоним MEMORY) означает, что все такие сегменты с одинаковым именем, но разными классами будут объединены в один;
тип STACK — то же самое, что и PUBLIC, но должен использоваться для сегментов стека, потому что при загрузке программы сегмент, полученный объединением всех сегментов типа STACK, будет использоваться как стек;
сегменты типа COMMON с одинаковым именем также объединяются в один, но не последовательно, а по одному и тому же адресу, следовательно, длина суммарного сегмента будет равна не сумме длин объединяемых сегментов, как в случае PUBLIC и STACK, а длине максимального. Таким способом иногда можно формировать оверлейные программы;
тип AT — выражение указывает, что сегмент должен располагаться по фиксированному абсолютному адресу в памяти. Результат выражения, использующегося в качестве операнда для AT, равен этому адресу, деленному на 16. Например: segment at 40h — сегмент, начинающийся по абсолютному адресу 0400h. Такие сегменты обычно содержат только метки, указывающие на области памяти, которые могут потребоваться программе;
PRIVATE (значение по умолчанию) — сегмент такого типа не объединяется с другими сегментами.
Разрядность. Этот операнд может принимать значения USE16 и USE32. Размер сегмента, описанного как USE16, не может превышать 64 Кб, и все команды и адреса в этом сегменте считаются 16-битными. В этих сегментах все равно можно применять команды, использующие 32-битные регистры или ссылающиеся на данные в 32-битных сегментах, но они будут использовать префикс изменения разрядности операнда или адреса и окажутся длиннее и медленнее. Сегменты USE32 могут занимать до 4 Гб, и все команды и адреса в них по умолчанию 32-битные. Если разрядность сегмента не указана, по умолчанию используется USE16 при условии, что перед директивой .MODEL не применялась директива задания допустимого набора команд .386 или старше.
Класс сегмента — это любая метка, взятая в одинарные кавычки. Все сегменты с одинаковым классом, даже сегменты типа PRIVATE, будут расположены в исполняемом файле непосредственно друг за другом.

Ответ отправлен: 07.08.2003, 14:49
Отправитель: Tigran K. Kalaidjian


Отвечает Евгений Иванов

Добрый день, Александр!
Segment AAAA byte public 'code' use16
byte - это выравнивание, т.е. на какую границу они выравниваются относительно
других сегментов.
'code' - название класса (может быть любым).
Это название влияет на компоновку сегментов.
С одинаковым названием сместе и т.п.
В общем, пережиток прошлого...
Используй win32 и не знай печали!


Ответ отправлен: 07.08.2003, 19:00
Отправитель: Евгений Иванов


 Вопрос № 3870

Приветствую вас ЭксперТы.
У меня есть глупый вопрос. Почему 1Кб = 1024б, а не 1000...[[:)



Вопрос отправлен: 07.08.2003, 22:09
Отправитель: zOmegA (zOmegA@inbox.ru)

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

Отвечает dimka

Доброе время суток, zOmegA!
Степень двойки.


Ответ отправлен: 11.08.2003, 10:27
Отправитель: dimka


Отвечает Zedr0n

Добрый день, zOmegA!
Интересный вопрос, почему ;) Наверное, потому, что в компютерном мире используется двоичная система исчисления...
1 байт = 2^3 бит
1 кБайт = 2^10 байт и так далее. Просто степень двойки
вот и все...


Ответ отправлен: 08.08.2003, 21:05
Отправитель: Zedr0n


Отвечает Евгений Иванов

Добрый день, zOmegA!
Потому что в 1 байте 8 бит и система счисления 16.
И ещё потому что 2 бита - основа.


Ответ отправлен: 08.08.2003, 16:33
Отправитель: Евгений Иванов


Отвечает Igoryk

Добрый день, zOmegA!
1 Кб = 2^10 б = 1024 б

Ответ отправлен: 09.08.2003, 14:52
Отправитель: Igoryk


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

Приветствую Вас, zOmegA!
Потому, что так захотелось программистам...=)
А захотелось им так, потому что 1024 - это 2 в 10-й степени, что есть очень удобное число, кратное 512, 128, 64, 32, 16, 8, 4, 2 и 1, а также наиболее близкое число к одной из степеней десятки(сами понимаете, чтобы легче было бабусек на рынке обвешивать ;) )

Ответ отправлен: 07.08.2003, 23:07
Отправитель: Tigran K. Kalaidjian


Отвечает vitya

Здравствуйте, zOmegA!
потому как в Компьютерных Науках принята двоичная система счисления. А самая близкая степень двойки к тысяче есть 2^10 = 1024... вот...

Ответ отправлен: 08.08.2003, 09:07
Отправитель: vitya


Отвечает Ayl

Приветствую Вас, zOmegA!
Потому что 1 кмлометр равен 1000 метрам, а не 1024 :-)
Все дело в используемых системах счисления. В повседневной жизни мы привыкли, в основном, использовать 10-ную с.с. И названия "круглых" чисел основаны на ней. "Сотня" - это 1 во втором разряде числа, "Тысяча" - в третьем. Из физики, в которой часто используются крупные числа, пришли названия "кило-", "мега-", "гига-". Им, соответственно, приписывались значения 10^3 = 1000, 10^6 = 1000000, 10^9 = 1000000000.
После появления компьютеров выяснилось, что для оптимального использования лучше всего подходит двоичная система счисления, т.к. для описания единицы информации, равной 1 биту, используется триггер, принимающий только 2 значения - 0 и 1. Соответственно, 8 бит назвали байтом. Замечу, что 8 = 2^3.
Далее, 1 бит - это очень мало. Байт ненамного больше. В первых компьютерах использовалась память емкостью несколько тысяч ячеек. 1 ячейка, обычно, представляла собой 1 машинное слово. Оно обычно было равно 2 или 4-м байтам.
Как описывать множество байт? Посмотрим степени двойки:
2^1 = 2
2^2 = 4
2^3 = 8
2^4 = 16
2^5 = 32
2^6 = 64
2^7 = 128
2^8 = 256
2^9 = 512
2^10 = 1024
Так как рассматривать для обозначений менее 1000 ячеек смысла большого не имело, а больше - тоже, потому что такую память еще не всегда и встретишь (:-) ), а также любовь к числу 10 (:-) ), было решено для 1024 байт ввести более крупное обозначение. А чтобы не изобретать велосипед, обозначить это величену как "К". И вначале так и говорили - память 10 К-байт ("ка-байт"). Но при частом употреблении (особенно непрофессионалами) обозначение "К" трансформировалось в "кило". Отсюда и пошел килобайт.
После развития технологий, когда объемы памяти стали измеряться несколькими сотнями и тысячами килобайт опять стало неудобно их называть. И снова по аналогии 1024 Кбайт назвали 1 Мбайтом - мегабайтом. 1 Мб = 2^10 Кб = 2^20 байт. Это число равно 1 048 576, что уже довольно значительно отличается от миллиона. Величина 1 Гб (гигабайт) равна 1024 Мб = 2^30 байт = 1 073 741 824. Как видно, от миллиарда она отличается на величину более 73 миллионов.
Кстати, на этом несоответствии играют производители жестких дисков и продавцы. Если на диске стоит маркировка 60 Гб, то обычно это обозначает не 64 424 509 440 байт, а "всего лишь" 60 000 000 000, что дает чуть менее 56 Гб.

Ответ отправлен: 08.08.2003, 10:23
Отправитель: Ayl


Отвечает Andrew Vext

Добрый день, zOmegA!
Компьютер работает в двоичной системе, а 2^10 = 1024.
Люди считают степени 10, а компьютеры - степени 2.

Ответ отправлен: 08.08.2003, 12:05
Отправитель: Andrew Vext


Отвечает Bob Johnson

Доброе время суток, zOmegA!
Потому что 1024 - это 2^10 степени, а в компьютере удобнее все считать степенями двойки.

* EMan1.4: ---===*** Die young - live free ***===---


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


Отвечает Lynx

Приветствую Вас, zOmegA!
Тут всё привязано к двоичной системе счисления. 1024 = 2^10.


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



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

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

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

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

Ваше имя:

Ваш e-mail:

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


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

Ваш вопрос:


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


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


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

Программисту
Assembler (37)
C / C++ (30)
Perl (3)
Builder / Delphi (22)
Pascal (27)
Basic / VBA (13)
Java / JavaScript (10)
PHP (7)
Криптография (10)
WinAPI (18)
Пользователю
Windows 95/98/Me (48)
Windows NT/2000/XP (55)
"Железо" (44)
Поиск информации (27)
Администратору
Windows NT/2000/XP (29)
Linux / Unix (13)
Юристу
Гражданское право (10)
Семейное право (6)
Трудовое право (7)
КоАП (5)

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




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


Яндекс цитирования
© 2001-2003 Россия, Москва. Авторское право: Калашников О.А.


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

В избранное