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

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


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

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

Выпуск № 491
от 11.02.2003, 16:50

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


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

Maverick
Статус: Профессиональный
Общий рейтинг: 139.01
URL: Задачи по ассемблеру
Телефон: 89039415024 (BeeLine GSM)
[Подробней >>]
masquer
Статус: Профессиональный
Общий рейтинг: 145.28
[Подробней >>]
Bob Johnson
Статус: Профессиональный
Общий рейтинг: 151.7
URL: Программирование
[Подробней >>]
 
Andrew Vext
Статус: Опытный
Общий рейтинг: 107.37
[Подробней >>]
Ayl
Статус: Профессиональный
Общий рейтинг: 118.44
[Подробней >>]
Broken Sword
Статус: Профессиональный
Общий рейтинг: 126.01
URL: моя рассылка по Protected Mode
[Подробней >>]
 
baldr
Статус: Профессиональный
Общий рейтинг: 113.77
URL: Сайт об ОС DOS. Всем, кто любит эту ОС!
[Подробней >>]
Joy
Статус: Начальный
Общий рейтинг: 119.4
[Подробней >>]
Igoryk
Статус: Профессиональный
Общий рейтинг: 138.59
URL: IgorykSoft
[Подробней >>]
 
Beeblebrox
Статус: Профессиональный
Общий рейтинг: 110.12
URL: Beeblebrox / TMA HomePage
[Подробней >>]
LIFO
Статус: Профессиональный
Общий рейтинг: 117.44
URL: наш сайт
Телефон: 8 01710 24758
[Подробней >>]
vitya
Статус: Профессиональный
Общий рейтинг: 107.94
[Подробней >>]
 
ASMодей
Статус: Профессиональный
Общий рейтинг: 117.42
[Подробней >>]


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

Вопрос № 2605. Как зделать набор битовых флагов? Заранее спасибо!!!!!... (ответов: 3)
Вопрос № 2606. Hi. Вот прочитал вопрос 2552. Не могли бы вы и мне выслать Зубкова, плз, а то все магазины города об... (ответов: 1)
Вопрос № 2607. Доброго времени суток! Вопрос про сегмент команд. В ассемблере я не силен, но насколько я понимаю, к... (ответов: 5)
Вопрос № 2608. Здравствуйте Эксперты! Я неделю как Asm изучаю и у меня такие вопросы появились: 1. Что лучше исполь... (ответов: 6)
Вопрос № 2609. Здравствуйте У меня ассемблерная процедура вызывается из c++ программы. Вопрос такой: процедура возв... (ответов: 8)
Вопрос № 2610. Извините вы не подскажете , где можно найти исходник программы синтеза речи на assembler под TMS320C... (ответов: 1)
Вопрос № 2611. Здравствуйте Эксперты и Администратор рассылки! Сколько уже читаю вашу рассылку и часто вижу типа &q... (ответов: 2)
Вопрос № 2612. Привет Спецы! Это опять я! Чем больше начинаешь изучать бем больше вопросов! 1. Почему когда в SOFTI... (ответов: 5)

Вопросов: 8, ответов: 31


 Вопрос № 2605

Как зделать набор битовых флагов?
Заранее спасибо!!!!!



Вопрос отправлен: 06.02.2003, 21:26
Отправитель: radmir (radmir@newmail.ru)

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

Отвечает Maverick

Приветствую Вас, radmir!
Не понял вопроса.
Получить регистр флагов?
CLC установка CF=0
CLD установка DF=0
CLI установка IF=0
LAHF загрузка регистра AH из регистра флагов: устанавливает биты 7, 6, 4, 2 и 0 по значениям флагов SF ZF AF PF CF.
SAHF запись регистра AH в регистр флагов: устанавливает флаги SF ZF AF PF CF по битам 7, 6, 4, 2 и 0 регистра AH.
STC установка CF=1
STD установка DF=1
STI установка IF=1


Ответ отправлен: 07.02.2003, 17:20
Отправитель: Maverick


Отвечает masquer

Добрый день, radmir!
Элементарно. Заводишь область памяти (dword, например) и для себя определяешь, что каждый бит означает (за какой флаг отвечает). Установить флаг в TRUE (1) командой or, инвертировать - xor, проверить - test.

Ответ отправлен: 07.02.2003, 11:02
Отправитель: masquer


Отвечает Bob Johnson

Приветствую Вас, radmir!
А что это такое?


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


 Вопрос № 2606

Hi. Вот прочитал вопрос 2552. Не могли бы вы и мне выслать Зубкова, плз, а то все магазины города облазил, а нет его. Заранее спасибо.



Вопрос отправлен: 06.02.2003, 22:12
Отправитель: HeX

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

Отвечает Andrew Vext

Приветствую Вас, HeX!
Блин! Я же сказал - по почте!!

Ответ отправлен: 07.02.2003, 13:02
Отправитель: Andrew Vext


 Вопрос № 2607

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



Вопрос отправлен: 06.02.2003, 23:34
Отправитель: vova

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

Отвечает Ayl

Доброе время суток, vova!
Все смешалось в доме Облонских!
При чем тут сегмент команд? В каком месте памяти будет размещен код не определяется ничем! Вот так просто - ничем. В процессоре просто есть указатель на текущую инструкцию. Задается он, как обычно, с помощью сегментного регистра и смещения. В качестве сегментного используется CS, в качестве смещения - IP.
Теперь смотри. Алгоритм выполнения команды.
1. У нас есть указатель - CS:IP. По этому адресу извлекается байт. IP увеличивается на 1.
2. Извлеченный байт декодируется. В Приложении приведен формат команды для процессора 80386. Соответственно, первый байт проверяется на соответствие одному из префиксов. Если соответствие найдено, то выполняются установки для этого префикса и процессор снова переходит к шагу 1.
3. Это не префикс. Значит, это код команды (логичное предположение?). Декодируем команду. Возможные варианты:
- команда однобайтная, операндов нет - выполняем (напр., nop)
- команда однобайтная, операнды закодированы в ней же - разбираем операнды и выполняем (напр., push reg; xcgh ax, reg и т.п.)
- команда однобайтная с операндами, следующими за командой - переходим к шагу 4
- команда требует дополнительной дешифрации - переходим к шагу 5
4. Из дешифрации команды и предшествующих ей префиксов уже известно количество дополнительных байт, которые нужно еще прочитать для определения всех операндов. Начиная с текущего значения CS:IP они считываются, каждый раз увеличивая IP на 1. После этого команда выполнятся
5. Дополнительная информация о команде расположена в следующем байте, называемом ModRM. В нем может находится дополнительная информация о самой команде, а также режим адресации и используемые регистры. Соответственно, могут возникнуть два варианта:
- команда двухбайтовая и вся информация уже есть - выполняем
- команда требует дополнительные данные для формирования адресов или непосредственных значений. В этом случае выполняются теже действия, то и на шаге 4.
Кроме этого, еще может быть использован байт SIB - ScaleIndexBase. Этот байт используется в процессорах, начиная с 80386, для дополнительных режимов адресации.
Так что как видишь, ни разделители не нужны, ни фиксированный размер кода. Все дешифруется "на лету".


Приложение:

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


Отвечает Broken Sword

Доброе время суток, vova!
во первых, ассемблер тут не при чем.
куда, как и сколько выделять памяти загруженным прогам - это чисто прерогатива ОС. Ты же должен иметь ввиду то, что COM-прога занимает один сегмент ВСЕГДА (64Кб), а EXE-модуль раскидывается по нескольким сегментам (в зависимости от того, из скольких сегментов он состоит). Тут ты должен учитывать размеры сегментов, которые можно получить из заголовка EXE-файла (это по сути и есть те самые "разделители")
так что для начала определись с ОС, под которую будешь писать

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


Отвечает masquer

Здравствуйте, vova!
Гы, это же тебе не RISC, или речь идет не о х86 процессорах? Смотри интеловские мануалы, та размер зависит и от инструкции, и от разрядности операндов...

Ответ отправлен: 07.02.2003, 10:54
Отправитель: masquer


Отвечает baldr

Доброе время суток, vova!
Дебаггер имеет таблицу, в которой для каждого hex-кода указано, какая команда с него начинается.
Длина этой команды известна - ее и берет. Больше никак... Процессор тоже распознает по ходу поступления.


Ответ отправлен: 07.02.2003, 01:51
Отправитель: baldr


Отвечает Bob Johnson

Доброе время суток, vova!
Коды команд загружаются в память в то место, которое найдет для этого ДОС, а уж потом сегментный регистр настраивается на этот адрес.
На самом деле не делается ни то, не другое - размеры команд всегда разные: от 1 до 15 байт и размер команды зависит от ее типа, префиксов, режима адресации и т.д. Но есть правила, которыми пользуется процессор - ты должен в своем дебагире реализовать хотябы основную часть из них. В общем можно начать так:
1. делает таблицу на 256 байт, каждый байт соответствует первому байту команды. В ней указываешь, что команда, начинающаяся с данного байта может иметь байт mod_r/m, байт SIB и т.д. Потом считываешь первый байт дизассемблируемой (ну и длинное слово) команды и по этой таблице определяешь ее основные параметры. Усложнив в последствии эту процедуру, получишь нормальный дизасм.


Ответ отправлен: 08.02.2003, 00:05
Отправитель: Bob Johnson


 Вопрос № 2608

Здравствуйте Эксперты!
Я неделю как Asm изучаю и у меня такие вопросы появились:
1. Что лучше использовать LEA или OFFSET(в отладчике я посмотрел offset на байт меньше)
и есть между ними какая-нибудь разница.
2. Что будет быстрее работать PUSH DX или код в приложении


Приложение:


Вопрос отправлен: 07.02.2003, 04:11
Отправитель: Ilu (ilua_m@mail.ru)

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

Отвечает Joy

Добрый день, Ilu!
1. Команда LEA предназначена специально для загрузки адреса в регистр, а команда MOV может делать это по "совместительству". А вот что для тебя лучше - это ты решай сам. Можешь посмотреть книгу Р. Журдена, там все это подробно расписано (по тактам и по размерам).
2. Работать быстрее будет PUSH. Опять-таки отправляю тебя на вышеуказанную книгу. Там все это есть! Если не найдешь эту книгу в инете, то пиши joy@stsland.ru, вышлю...


Ответ отправлен: 07.02.2003, 09:48
Отправитель: Joy


Отвечает Ayl

Добрый день, Ilu!
1. Лучше использовать "по-умному" :-) Т.е. если загружается смещение, которое возможно вычислить на этапе трансляции, то лучше использовать OFFSET - и короче, и выполняется быстрее. Если же надо загрузить нечто, что должно вычислятся во время работы программы - то тут уж никуда не деться, придется использовать LEA.
Хотя сейчас компиляторы пошли умные и они заменяют исходный код, скажем, lea dx, Message на такой: mov dx, OFFSET Message. По крайней мере TASM это делает.
Между OFFSET и LEA огромная разница. OFFSET - это директива компилятора. Ее значение вычисляется в момент компиляции и в выполняемый файл помещается соответствующая константа. LEA - это полноправная команда. Причем при ее использовании операнд может представлять собой любое выражение, допустимое в командах. Например, с использованием базовой адресации :-)
2. push dx, естесственно, быстрее.

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


Отвечает Igoryk

Приветствую Вас, Ilu!
1. Нужен конкретный случай использования. Если есть метка к которой нужно обратиться напрямую, то лучше использовать offset, если тебе нужно отсчитать от этой метки n-ое количество байт, то лучше использовать lea (но в совокупности с offset).
2. Push DX

Ответ отправлен: 07.02.2003, 15:00
Отправитель: Igoryk


Отвечает Beeblebrox

Доброе время суток, Ilu!
Приятно видеть, что человек после недели изучения асма задает хорошие вопросы, а не бросается немедленно писать новый дебаггер или супероперационку с элементами AI.
1. В подавляющем большинстве случаев лучше подходит offset. За исключением двух случаев:
а) область памяти, на которую нужно ссылаться, адресуется относительно (через указатель), короче говоря, если ты попробуешь написать оффсет, ассемблер выругается
б) с помощью LEA можно вычислять арифметические выражения, например LEA DX,[BX+SI-1218] равносильно DX=BX+SI-1218
2. PUSH DX будет быстрее, хотя бы потому, что приведенные тобой инструкций не спариваются на пентиуме

Ответ отправлен: 07.02.2003, 10:04
Отправитель: Beeblebrox


Отвечает Bob Johnson

Приветствую Вас, Ilu!
1. Если тебе нужно просто загрузить адрес метки в регистр - то используй offset. А вот представь себе такую ситацию - у тебя есть структура, одно из полей которой текстовое, оно расположено по адресу +10 от начала структуры. Теперь у тебя есть регистр bx, который показывает на начало структуры и ты вдруг захотел вывести на экран это поле с помощью функции 9 int 21h. Как ты сделаешь?
1. mov dx, bx
add dx, 10
...
2. lea dx, [bx + 10]
вот тут lea дает экономию одной команды. В принципе, она только для этого и нужна. Чаще всего применяется в процедурах, когда нужно получить адрес локальной переменной или параметра (они обычно в стеке и адресуются по (e)bp) - тут или надо 2 команды или одна lea.


Ответ отправлен: 08.02.2003, 00:05
Отправитель: Bob Johnson


Отвечает LIFO

Добрый день, Ilu!
1.Lea удобно применять при вычислении сложного физ. адреса
2. Push

Ответ отправлен: 08.02.2003, 15:34
Отправитель: LIFO


 Вопрос № 2609

Здравствуйте
У меня ассемблерная процедура вызывается из c++ программы.
Вопрос такой: процедура возвращает bool, так вот, куда в ассемблерной процедуре записать этот результат?
В дополнение:
есть операция, к примеру
cmp eax,[ebp+10]
мне нужно, что бы при еах меньше [ebp+10] в регистр eax записать к примеру 1. Как наиболее оптимально это сделать?
Спасибо



Вопрос отправлен: 07.02.2003, 12:10
Отправитель: Yuri Gordienko

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

Отвечает masquer

Добрый день, Yuri Gordienko!
1. В eax пишешь 1, если true и 0 - otherwise. Тип boolean насколько я видел в разных ситуациях может иметь размер как 1 бита, так и qword-a
2. Я бы так сделал:
cmp eax, [ebx+10]
setc al
movzx eax, al

Ответ отправлен: 07.02.2003, 13:43
Отправитель: masquer


Отвечает Ayl

Доброе время суток, Yuri Gordienko!
Результат возвращается в регистрах. В данном случае результат должен быть возвращен в регистре AL. Причем false соответствует 0-е значение регистра, true - ненулевое.
Ну, например, так:
cmp eax, [ebp+10]
jge cont ; переход, если eax >= [ebp+10]
mov eax, 1


Ответ отправлен: 07.02.2003, 14:36
Отправитель: Ayl


Отвечает Maverick

Приветствую Вас, Yuri Gordienko!
........
cmp eax,[ebp+10]
ja go
mov eax,1
go: ;Больше......


Ответ отправлен: 07.02.2003, 17:20
Отправитель: Maverick


Отвечает Igoryk

Доброе время суток, Yuri Gordienko!
1. Насчет C не знаю, но в Delphi и VB нужно вернуть -1 (0FFFFh) для Правды, 0 для лжи.
2. Есть два спомоба решения. Первый заключается в "перепрыгивании" кода, который противоречит условию, т.е. примерно так:
cmp eax, [ebp+10]
jb Next
mov eax, 1
Next:
Второй вариант - использование команды cmovl, но для этого в начале программы нужно ввести директиву .686 (В некоторых версиях TASMа не поддерживается):
cmp eax, [ebp+10]
cmovl eax, 1

Ответ отправлен: 07.02.2003, 15:00
Отправитель: Igoryk


Отвечает vitya

Доброе время суток, Yuri Gordienko!
возвращай в регистр AX/EAX.

Ответ отправлен: 07.02.2003, 12:25
Отправитель: vitya


Отвечает Joy

Добрый день, Yuri Gordienko!
Честно говоря вопрос не понял совершенно! А вот дополнение к вопросу ты написал понятно. Ответ на дополнение:
Так и сделать
cmp eax,[ebp+10]
jae next ;Переход на next если eax>=[ebp+10]
mov eax,1 ;иначе eax=1
NEXT:
...

Ответ отправлен: 07.02.2003, 13:09
Отправитель: Joy


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

Добрый день, Yuri Gordienko!
В регистр AX(EAX) его нужно записать. Насколько я помню FALSE=0,
TRUE>0.
Дополнение. Можно сделать так:
;это оптимально по скорости
sub eax,[ebp+10]
rcl eax,1
and eax,1
или так:
;это оптимально по памяти
sub eax,[ebp+10]
rcr eax,1
shr eax,31


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


Отвечает Bob Johnson

Доброе время суток, Yuri Gordienko!
1. В регистр eax. Для bool: 0 = false, не ноль = true (лучше использовать 1).
2. Зависит от того, что тебе нужно в противном случае - 0?
Если да, то можно так:
cmp eax, [ebp+10]
sbb eax, eax
and eax, 1
Еще есть команда CMOV, но она появилась начиная с P6 (Celeron, IP 2, IP Pro). Точнее - смотри cpuid, там есть флаг присутствия этой команды.


Ответ отправлен: 08.02.2003, 00:05
Отправитель: Bob Johnson


 Вопрос № 2610

Извините вы не подскажете , где можно найти исходник программы синтеза речи на assembler под TMS320C50
или кто мог бы ее написать если нужно я заплачу!!! Программа очень нужна 12.02 сдача.
зарание спасибо



Вопрос отправлен: 07.02.2003, 13:09
Отправитель: Slava

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

Отвечает Bob Johnson

Приветствую Вас, Slava!
> или кто мог бы ее написать если нужно я заплачу
Да это на дипломный проект потянет.
> Программа очень нужна 12.02 сдача
Неплохие у тебя задачи....


Ответ отправлен: 08.02.2003, 00:05
Отправитель: Bob Johnson


 Вопрос № 2611

Здравствуйте Эксперты и Администратор рассылки!
Сколько уже читаю вашу рассылку и часто вижу типа
"скиньте мне, плиз, книгу Зубкова на мыло". Почему бы
не сделать раздел на сайте там где можно скачать эту книгу и
не мучить экспертов этой просьбой каждым вторым вопросом :)
Пока этого нет, плиз, Andrew Vext скинь уже и мне на kostyam2000@mail.ru



Вопрос отправлен: 07.02.2003, 13:46
Отправитель: Cosinus (kostyam2000@mail.ru)

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

Отвечает Andrew Vext

Добрый день, Cosinus!
Я уже ответил! Кидайте заказы мне по почте!!!
Книга Зубкова почти вся (кроме 5 главы) лежит у меня на сайте - www.netlib.wallst.ru Выложить ее для скачивания не могу - прикроют сайт.

Ответ отправлен: 07.02.2003, 14:06
Отправитель: Andrew Vext


Отвечает Bob Johnson

Приветствую Вас, Cosinus!
У нас теперь (как я только недавно узнал) есть раздел virus.rusfaq.ru - вот там вроде как теоретически она могла бы появиться, когда Andrew Vext смог бы ее предоставить.
Или мог бы я выложить на своей странице.


Ответ отправлен: 08.02.2003, 00:06
Отправитель: Bob Johnson


 Вопрос № 2612

Привет Спецы!
Это опять я! Чем больше начинаешь изучать бем больше вопросов!
1. Почему когда в SOFTICE ввожу
:bpx GETWINDOWTEXTA
Он мне выдаёт:
Symbol not defined (GETWINDOWTEXTA)
Что делать?
2. В книге по ПЕРЛу написано что cgi скрипты можно програмить хоть на QBASIC'e, хоть на Асме.
Никто не знает как скрипты програмить на асме.
Может инфа есть. А то интересно. На PERL'е могу писать.
Lando



Вопрос отправлен: 07.02.2003, 14:21
Отправитель: Lando (next86@mail.ru)

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

Отвечает Broken Sword

Здравствуйте, Lando!
1. Набери EXP getwindow. Что ты видишь? Не видишь GetwindowtextA в перечисленном? это потому, что она экскортируется из user32.dll, а отладчик SoftICE ее не видет. Для этого зайди в файл winice.dat и раскомментируй в конце библиотеки (начинаются с Exp=), причем пропиши правильные пути.

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


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

Здравствуйте, Lando!
2. Можно CGI-скрипты и на ассемблере писать. Просто получаешь из
стандартного входного потока данные, разбираешь их и записываешь
HTML-страницу в стандартный выходной поток. Все это делается с
помощью INT 21h.


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


Отвечает Bob Johnson

Доброе время суток, Lando!
1. Предположу, что нужно соблюдать регистр в названиях функций - вводи bpx GetWindowTextA.
2. Можно на чем угодно! Все это очень просто - cgi скрипт - в понимании сервера, это программа, которую надо запустить, чтобы она выдала результат. Это может быть "C:\Perl\Perl.exe C:\WebRoot\MyProg.pl" или просто "C:\cgi-bin\myprog.exe". При этом в последнем случае это может быть исполняемый файл, написанный на любом языке, хоть на асме. Далее - существуют правила, как скрипт взаимодействует с сервером: сервер помещает данные о запрашиваемом uri, path в переменные окружения, соответственно: QUERY_STRING и PATH_INFO. Программа может это считать и выполнить необходимые действия. Ответ выводится программой как-бы на экран - в устройство стандартного вывода, а сервер перенаправляет это браузеру для отображения. Выглядит ответ обычно так:
Content-type: text/html
{пустая строка}


...

Кстати, я тут недавно написал простой Web-сервер (15 кб exe файл) на VC++ - если интерсно - можешь скачать его с моей страницы: bobjohnson.nm.ru (вместе с исходниками).


Ответ отправлен: 08.02.2003, 00:06
Отправитель: Bob Johnson


Отвечает baldr

Добрый день, Lando!
1.
2. Да хоть в машинных кодах! не в этом дело, а в том, что за ПО установлено на сервере. Ведь,
именно сервер получает инструкцию и выполняет ее! А инструкцию можно задать на чем угодно.
Главное, чтоб админ сервера разрешил выполнять скрипты на Васике или асме. А такого, как мне
кажется, ни один админ не сделает, потому как безопасность сервака - превыше всего...


Ответ отправлен: 08.02.2003, 00:29
Отправитель: baldr


Отвечает LIFO

Здравствуйте, Lando!
Напиши GETWINDOWTEXT
или GETWINDOWTEXTW
Смотря какие библиотеки загружены софтом

Ответ отправлен: 08.02.2003, 15:37
Отправитель: LIFO



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

Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook" и "Microsoft Outlook Express". В программе The Bat! подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте, что в некоторых браузерах могут стоять запреты на открытие других окон, а также "чрезмерное" кэширование данных, при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

© 2002 Команда RusFAQ.ru.

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

Ваше имя:

Ваш e-mail:

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


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

Ваш вопрос:


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


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


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

Программисту
Assembler (36)
C / C++ (28)
Perl (6)
Delphi (17)
Pascal (23)
Basic / VBA (13)
Java / JavaScript (11)
PHP (9)
MySQL / MSSQL (8)
Пользователю
Windows 95/98/Me (34)
Windows NT/2000/XP (26)
"Железо" (32)
Поиск информации (18)
Администратору
Windows NT/2000/XP (12)
Linux / Unix (13)
Юристу
Гражданское право (10)
Семейное право (6)
Трудовое право (5)
КоАП (4)

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




Яндекс цитирования

© 2002 Россия, Москва. Авторское право: RusFAQ.ru


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

В избранное