Здравствуйте, уважаемые эксперты! Большое спасибо эксперту bocha за то, что научил писать в буфер одной строчкой strcpy(buf,"x2Fx3Fx21x0Dx0A"); Также благодарю эксперта CrackLab за то, что не поленился, описал три способа. Кстати, третий способ написан с ошибкой, так и не получилось его попробовать (вырезал из приложения ответа эксперта CrackLab): wsprintf(buffer, "%c%c%c%c%c", 0x2F, 0x3F, 0x21, 0x0D, 0x0A); Просьба эксперту – исправить ошибку. Ну а теперь вопросы: 1) с помощью каких функций: strcpy или wsprintf (может все-таки vsprintf ?) программа будет «быстрее» и «меньше занимать места»? (Они ведь используют разные заголовочные файлы: stdio.h и string.h). Т.е. какая функция предпочтительнее при оптимизации программы? 2) при компиляции программы компилятор выдает кучу Warning’ов (известно,
что на них можно «забить») на команды записи в порт outp следующего содержания: Code has no effect. Причем команды чтения из порта inp проходят нормально. Вопрос: почему «код не имеет эффекта»? В чем может быть причина? Как сделать эффективно? Заранее благодарю всех ответивших!
Добрый день, Эдуард! wsprintf - это Windows API функция. При написании программы в Turbo C++ 3.0 замените ее функцией sprintf. По поводу ответа эксперта bocha, strcpy(buf,"x2Fx3Fx21x0Dx0A") делает совершенно другие вещи. Тут в буффер копируется строка "x2Fx3Fx21x0Dx0A". Т.е. при выводе на экран мы так и увидим "x2Fx3Fx21x0Dx0A" а не "/?!" По поводу памяти и скорости. Функция strcpy быстрее функции sprintf т.к. просто копирует строку из одного места в памяти в другое. Однако в данной ситуации она не применима, и я написал почему. Чтобы решить как сделать лучше - нужно смотреть код программы. Вообще это сильно не повлияет. Вариант с sprintf является более гибким и более красивым. При нечастом использовании он не повлияет на скорость абсолютно. А если такие действия будут проходить у вас тысячи раз в цикле то... ...то
у вас нет другого выбора как использовать sprintf =))) Потому что другие мои два варианта требуют статической инициализации на стадии проектирования. Ответ отправлен: 08.06.2004, 17:42 Отправитель: CrackLab Отвечает bocha
Приветствую Вас, Эдуард! strcpy - по идее должна работать быстрее sprintf (не путать с wsprintf, которая не сишная, а апишная, загловок <windows.h>), т.к. работает с фиксированым числом параметров, соответственно не делает лишней (для своей задачи) работы. Но strcpy может только копировать, а sprintf умеет несколько больше, поэтому для какждой задачи выберается свтоя функция. Ответ отправлен: 08.06.2004, 20:09 Отправитель: bocha
Добрый день, neo! Добро пожаловать в рассылку по ассемблеру! Начинать нужно с написания программ.
Ответ отправлен: 09.06.2004, 19:53 Отправитель: www Отвечает CrackLab
Доброе время суток, neo! Ну смотря какой ассемблер вы хотите освоить: для DOS или для Windows. Если для DOS, то читайте "рассылку Калашникова: Ассемблер - это просто!", если для Windows, то идите на сайт www.wasm.ru и там найдете много статей для начинающих по программированию на ассмеблере в Windows. Ответ отправлен: 08.06.2004, 23:34 Отправитель: CrackLab Отвечает Sedric
Здравствуйте, neo! По-моему, злостный оффтопик %)) Во-первых, зачем он вам нужен? Во-вторых, быстро ассемблер освоить трудновато. Знания, плохо усвоенные - это кирпич на голову(нафиг не нужен). Учите медленно и пребудет с вами Дзен Ответ отправлен: 09.06.2004, 09:32 Отправитель: Sedric Отвечает Fess
Доброе время суток, neo! Кстати, мог бы пооригинальнее ник придумать... Ну, ладно, не моё дело... Смотря на каком уровне собираешься кодить, если на уровне профи, то быстро не получится. А в принципе, некоторые начинают с Абеля, некоторые с Зубкова (я отношусь именно к ним), некоторые с Калашникова. Ну, это основные авторы. Для программирования под ДОС желательно иметь Ralf Brown's Interrupt List (самый полный список прерываний), который можно скачать с сайта автора, URL не помню, на то есть поисковики. Кодинг под Win32 лучше начинать с туториалов Iczelion'а (если на MASM32 кодить собрался). А вообще начинать нужно с выбора самого Ассемблера (masm, tasm, fasm, nasm, HLA и т.д. и т.п.) Советую обратить внимание на masm, fasm и nasm. Простые, компактные. Я начинал с tasm, но тебе не советую, он сейчас не поддерживается, не развивается, отмирает. Если инглиш не проблема,
скачай Art of Assemly Рендала Хайда. Хорошая книга для начинающих. На wasm.ru есть. Мой совет: скачай с wasm.ru, например, пакет MASM32. Прочитай документацию, входящую в пакет (там её уйма!). Это для Windows. Скачай tasm 2.0 для ДОС. Скачай fasm и nasm.
Ответ отправлен: 10.06.2004, 16:19 Отправитель: Fess Отвечает barsik
Здравствуйте, neo! S azov :-)
Ответ отправлен: 09.06.2004, 19:34 Отправитель: barsik Отвечает vitya
Здравствуйте, neo! Раз уж вопрос задается в рассылке по ц++, значит дело плохо. Для начала - научиться отличать - ЯВУ от не ЯВУ, а там сам глядишь и поймешь. Ответ отправлен: 09.06.2004, 09:43 Отправитель: vitya
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.