Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
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.
Вопрос и дополнение |
Ваш вопрос:
Приложение (если необходимо):
Получить ответов:
Выбор рассылки |
Программисту 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 |
Отписаться
Убрать рекламу |
В избранное | ||