На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
  
> Как часто вы используете ассемблер?
   
Как часто и где вы используете ассемблер?
Гости не могут просматривать результаты голосования.
Гости не могут голосовать 
    Прошу выбрать один из вариантов ответа.
    Я лично активно использую и изучаю ассемблер. Этот язык даёт неограниченные возможности управления компьютером и позволяет писать эффективный и компактный код. А что думаете вы?
      schooler
      В голосовании мне не хватает варианта:
      ExpandedWrap disabled
        Редко, только для оптимизации "тяжелых участков" кода.
        Azopp
        Я думаю тебе больше всего подойдет 3 вариант ответа, так как обычно (по личному опыту) это так и происходит. Может быть не очень часто. Но с целью оптимизации...
          Ответил (и пока единственный) "никогда". Был бы вариант "Никогда, даже для программирования железа" выбрал бы его.
            Почти всегда :) Крайне редко использую, как каркас, Дельфи, Паскаль, Борланд Си и Ватком Си(весчь), но все равно, основной код оформлен на асме.
              Я соврал и ответил
              "Всегда, пишу программы только на чистом ассемблере"
              потомучто не умею вообще!

              Но удивлён когда продвинутые программисты выбирают что-то другое...
              Мну всегда духом болеет только за асм!
              А лучше может только быть машинный код... Но времена и нравы меняются и против этого уже трудно попереть :ph34r:
              Сообщение отредактировано: semiono -
                Думаю, в настоящее время знания ассемблера действительно необходимы только для исследования "чужих" программ. С другой стороны, если есть опыт, куча готовых шаблонов и функций - то почему б и нет. Я использую ассемблер просто ради интереса.
                Цитата semiono @
                удивлён когда продвинутые программисты выбирают что-то другое...
                наверное, ты часто бываешь удивлен ;)
                  Полностью согласен с Azopp.
                  На ЯВУ можно (и нужно!) написать все то же самое, что и на ассемблере (за исключением оптимизации средствами MMX, SSE, etc.), но код быстрее пишется, легче отлаживается, проще сопровождается и модифицируется.

                  PS. Нет, вру: вспомнил еще один вариант, где нужен ассемблер - добывание информации опроцессоре через CPUID.
                    Цитата andriano @
                    На ЯВУ можно (и нужно!) написать все то же самое, что и на ассемблере (за исключением оптимизации средствами MMX, SSE, etc.),

                    + FPU , т.к. ЯВУ-компиляторы неплохо оптимизируют целочисленные операции и, мягко говоря, неважно FPU. Видимо из-за сложностей работы со FPU-стеком явушные реализации грешат ненужными загрузками\выгрузками промежуточных FPU-вычислений в память и многочисленными обменами регистров fxch
                      Цитата semiono @
                      Но удивлён когда продвинутые программисты выбирают что-то другое...
                      Время - деньги ;) Но заметь, что если профи выбирают Си и Дельфи, то любители нередко предпочитают ассемблер, некоторые на него переходят именно с ЯВУ. Думаю этот факт о многом говорит.
                      Цитата quotter @
                      Думаю, в настоящее время знания ассемблера действительно необходимы только для исследования "чужих" программ
                      Тоже неплохой вариант. Зачастую проще "подглядеть" у других, чем лазить по многотонным докам, особенно с хорошим инструментарием :ph34r:
                      Цитата andriano @
                      но код быстрее пишется, легче отлаживается, проще сопровождается и модифицируется
                      Согласен только с первым, остальное - дело привычки и опыта. Когда постоянно практикуешся, то вырабатывается стиль, позволяющий значительно упрощать отладку и модификацию. Но это относится и к ЯВУ, правда там "адаптация" происходит быстрее.
                      Цитата andriano @
                      вспомнил еще один вариант, где нужен ассемблер - добывание информации опроцессоре через CPUID
                      Вспомнить можно много чего, например мониторинг производительности, через регистры MSR и CESR ;) Или возьми такую область, как дебаггеры. Только на асме возможно легко и просто кодить работу с отладочными регистрами. Только на асме можно сделать обработчики исключений процессора. Только на асме можно реализовать нормальное переключение задач. Да много чего невозможно на ЯВУ ;) Просто расслабились все из-за винды, вот и думают, что виндозные дрова - это низкий уровень :lol:
                        leo, еще раз: я признаю право на ассемблерную оптимизацию, но считаю, что в ней нуждается не более 10-20% программ, а в них, в свою очередь, не более 10-15% кода (т.е. доля ассемблерного кода - где-то 2%). В то же время компилляторы с ЯВУ, сециально предназначенных для обработки чисел с плавающей точкой (например, с Фортрана) делают достаточно "чистый" код. Ну а для универсального языка плавающая точка - как-то не слишком актуально.

                        -Added
                        Цитата AndNot @
                        Согласен только с первым, остальное - дело привычки и опыта.

                        Не могу согласиться.
                        Объем кода принято выражать в количестве строк не только потому, что больше не в чем, но и потому, что реальная сложность отладки, сопровождения и модификации зависит именно от количества строк. Я на ЯВУ это количество при той же функциональности оказывается меньше.
                          Цитата Azopp @
                          В голосовании мне не хватает варианта:

                          Редко, только для оптимизации "тяжелых участков" кода.

                          Ага, как раз для таких вещей и применяю. В основном оптимизация компактных вычислительных ядер с плавучкой - раз.
                          И для минимизации времени выполнения и объема кода на встроенном микроконтроллерном железе (опять же - избранные куски) - два.
                            Цитата andriano @
                            реальная сложность отладки, сопровождения и модификации зависит именно от количества строк
                            Общий объем кода, в проекте несущественнен, все равно проект делится на небольшие модули, которые отлаживаются раздельно, с пол пинка ;) Может быть у нас с тобой разные подходы, но я предпочитаю дробить проект на множество мелких модулей(10-500 строк), нежели пихать все в кучу, как делают немало ЯВУшников, которые просто не умеют взять бумагу, карандаш, пиво, и продумать задачу в мельчайших деталях, тщательно разбивая ее на отдельные подзадачи. После подобной процедуры уже редко приходится пользоваться отладчиком, в основном допускаешь синтаксические ошибки, которые компилятор отлавливает. И расширяемость хорошая, поскольку модули получаются независимыми от других, типа ООП :)
                            Цитата andriano @
                            Я на ЯВУ это количество при той же функциональности оказывается меньше
                            Могу разочаровать тебя - не всегда, более того не всегда код на ЯВУ получается нагляднее ;) Особенно когда пытаются сделать на ЯВУ чисто ассемблерные задачи.
                              Хе. Задумал я написать минимальную программу на C++, показывающую окно. Для этого, подумал я, нужно избавиться от CRT. Ога, пишем без глобальных объектов, без new/delete, на чистом WinAPI, указываем свою точку входа. Написал. Откомпилировал. Смотрю - тянет CRT. И тянет memset оттудава. Ага, подумал я:
                              ExpandedWrap disabled
                                #define ZeroMemory(ptr,size) memset(ptr,0,size)

                              А в коде у меня только одна строчка может это вызывать:
                              ExpandedWrap disabled
                                WNDCLASSEX classEx = {0};

                              Можно, конечно, занулить все поля вручную, но я решил, что ято не мой метод и надо писать своя "занулятор" =)
                              Написал типа этого:
                              ExpandedWrap disabled
                                void MyZeroMem(void *ptr,unsigned int size)
                                {
                                  char *ch = ptr;
                                  for(i = 0 ; i < size; ++i)
                                  {
                                     *ch = 0;
                                     ch++;
                                  }
                                }

                              Вставил, скомпилил, смотрю, всё равно, собака, тянет =(
                              Дизассемблировал, и что же я вижу??? На том месте, где должна вызываться моя функция, компилятор вставил memset(!!!!). Это он, собака, соптимизировал! Посмотрел, что я тут стабильно зануляю кусок памяти и решил, что memset работает быстрее (снимаю перед разработчиками оптимизатора шляпу).
                              Вот тут то я и вспомнил, что компилятор никогда не меняет ассемблерные вставки...

                              Это был чуть ли не единственный раз, когда я вспоминал ассемблер :)
                                Цитата andriano @
                                Ну а для универсального языка плавающая точка - как-то не слишком актуально
                                Вспомнилось две игрухи, первая на Си, вторая на Паскале. Обе - шутеры, почти одинаковы (во втором спецэффекты более продвинутые). Но вторая на 70% состояла из асма. В результате - вторая работала более гладко, нежели первая, даже при вдвое большем разрешении экрана и большем количестве спецэффектов. Первая была - знаменитая Quake, а вот вторая - Chasm: Shadow The Rift :D А казалось бы, подумаешь ерунда, какой то там FPU.
                                  Цитата Hsilgos @
                                  Задумал я написать минимальную программу

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

                                  Сам постоянно пишу на асм-е, но только для микроконтроллера. При этом заявить, что знаю ассемблер - ну никак не могу, ибо их - ассемблеров - уж больно много, я знаю более-менее хорошо только для одной(!) линейки мк (а для 286 читаю, ну мелочь какую написать, и то с трудом; старшие - вообще тёмный лес).
                                  К сожалению - сколько процессоров, столько и ассемблеров. И каждый практически с 0 изучать надо - ведь это по сути не изучение языка, а изучение процессора. Расточительная трата времени.
                                    Цитата Adil @
                                    Цитата Hsilgos @
                                    Задумал я написать минимальную программу

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

                                    А думаешь нет? Уже пару лет поддерживаю пару программ, работающих на смешных компах, еще первые пни, с винтами на 125 и 500 Мб. Основное место занимают базы данных и система, оставляя программе мизер. Тут выбора нет, только асм и возможен.
                                    Несколько раз кодил аналоги 8086, с 4-256Кб памяти.
                                    Сейчас экспериментирую с интерфейсом, расчитанным на несколько Кб памяти, пытаясь сделать в графике :) если получится то срублю неплохие бабки.
                                    Так что еще есть где развернуться, старого барахла осталось немало, а выкидывать его не торопятся :)
                                      Цитата AndNot @
                                      Несколько раз кодил аналоги 8086, с 4-256Кб памяти.
                                      Сейчас экспериментирую с интерфейсом, расчитанным на несколько Кб памяти, пытаясь сделать в графике :) если получится то срублю неплохие бабки.
                                      Ну это сродни МК, тут спору нет - асм рулит.
                                      Цитата AndNot @
                                      А думаешь нет? Уже пару лет поддерживаю пару программ, работающих на смешных компах, еще первые пни, с винтами на 125 и 500 Мб. Основное место занимают базы данных и система, оставляя программе мизер. Тут выбора нет, только асм и возможен.
                                      ...
                                      Так что еще есть где развернуться, старого барахла осталось немало, а выкидывать его не торопятся
                                      Ну так это от бестолковости заказчиков - свои же деньги считать не умеют - купить нормальный комп, программисту денег заплатить меньше - еще в большом плюсе останутся.
                                        Ты не понял :) Те устройства, на 8086, пошли в серию, так что экономия очень значительна ;) Какие, говорить не буду, но одно из них используется повсеместно , хотя я был одним из многих, но все равно приятно осознавать, что жизнь прожил не зря ;)
                                          Цитата semiono @
                                          Но удивлён когда продвинутые программисты выбирают что-то другое...
                                          Поверь, станешь продвинутым - будешь удивляться, вспоминая вот эту свою точку зрения. Сам такой был, знаю. После реализации DMPI-хоста, соответствущего спецификации 1.0 и навешивающегося на любой уже имеющийся, соответствующий спецификации 0.9, интересы сместились от виртуозности управления процессором в сторону виртуозности управления компилятором. Оказалось, это не менее увлекательно.
                                          Цитата andriano @
                                          На ЯВУ можно (и нужно!) написать все то же самое, что и на ассемблере (за исключением оптимизации средствами MMX, SSE, etc.), ...
                                          Не правда. Нормальные копиляторы уже давно это делают, а Intel, так та вообще хочет забыть нафиг FPU как страшный сон и заставить всех юзать исключительно SSE2 и выше...
                                          Цитата leo @
                                          ...ЯВУ-компиляторы неплохо оптимизируют целочисленные операции и, мягко говоря, неважно FPU. Видимо из-за сложностей работы со FPU-стеком явушные реализации грешат ненужными загрузками\выгрузками промежуточных FPU-вычислений в память и многочисленными обменами регистров fxch
                                          ...в основном как раз из-за архитектурных недостатков FPU. Но ненужные "загрузки/выгрузки" и "многочисленные обмены регистров fxch" не есть дезоптимизация. Обмены, например, как раз и позволяют обойти архитектурное неудобство FPU, связанное с его стек-ориентированностью и позволяет спараллелить исполнение нескольких FPU-инструкций, убрав зависимость по ST(0), лишь бы исполнительных блоков у процессора хватило. "Ненужные" же операции с памятью могут выполнять роль SSEёвых PREFETCH-ей. Не стоит спорить с оптимизатором без необходимости.
                                          Цитата AndNot @
                                          Вспомнить можно много чего, например мониторинг производительности, через регистры MSR и CESR Или возьми такую область, как дебаггеры. Только на асме возможно легко и просто кодить работу с отладочными регистрами. Только на асме можно сделать обработчики исключений процессора. Только на асме можно реализовать нормальное переключение задач. Да много чего невозможно на ЯВУ...
                                          Я как-то поспорил на много пива, что смогу написать DOSовый драйвер устройства только на C++ без капли ассемблера. Выиграл. Там много чего было, проще сказать, чего аппаратного я не делал, не прибегая к ассемблеру. На "безасмовом" Паскале писал DSP-библиотеку для записи/проигрывания через SB в фоне, включая SB16. И IRQ там были, и DMA, как же без них... Ну а VxD без ассемблера через несколько лет уже никого бы не удивило.
                                          Вот чего действительно нельзя сделать без ассемблера, так это завязанного на архитектурные детали процессора, которым компилятор просто не научен. В частности это то, что я не покрасил. Многозадачность, например, как семестрования констрольная была сделана исключительно на переключении стеков, а вместе с ними и сохранённых контекстов CPU, что делалось единственной Борланд С++ной строкой _BP = task[targetsIndex].basePtr; внутри обработчика IRQ0, естественно написанного тоже без ассемблера. Препод тоже долго не мог поверить, что ассемблер для этой задачи не нужен. Когда убедился, учиться остальные полтора года у него стало легче. :P Так что, учите матчасть, то бишь возможности ваших компиляторов: никогда не знаешь, в чём и когда это может помочь. Знатоков ассеблера хватает, а работодателю зачастую не они нужны, а профи-виртуозы, способные выжать максимум из того инструмента, что есть, и знание ассемблера - всего лишь одна и не самая важная составляющая.
                                          Цитата AndNot @
                                          Вспомнилось две игрухи, первая на Си, вторая на Паскале. Обе - шутеры, почти одинаковы (во втором спецэффекты более продвинутые). Но вторая на 70% состояла из асма. В результате - вторая работала более гладко, нежели первая, даже при вдвое большем разрешении экрана и большем количестве спецэффектов. Первая была - знаменитая Quake, а вот вторая - Chasm: Shadow The Rift А казалось бы, подумаешь ерунда, какой то там FPU.
                                          Насколько я помню, ID как раз Quake I выпустила как первую игру, которой действительно требовался FPU. И, показав, что без FPU игровая индустрия дальше будет всё меньше и меньше обходиться, чуть не убила этим MMX. А AMD со своим 3DNow! резво поднялась в рейтингах. А казалось бы - всего-то одна-единственная операция деления, тщательно оптимизированная по тактам под Pentium, чтобы исполняться максимально параллельно с CPU. Не знаю, насколько кривили душой Кармаки, но по их заявлениям перспективную коррекцию текстур с шагом хотя бы в 16 пикселов нереально реализовать без деления, которое можно было сделать целочисленным, т.е. в формате с фиксированной точкой, но хоть FPU и чуть медленее, зато параллелится с CPU. И кстати, FPS был выше даже на менеечастотных Pentium по сравнению с более высокочастотными AMD и Cyrrus. Сам видел - Pentium 120 делал почти вдвое CyrrusLogic 166 - 24 vs 14 (!) Потому как Intel очень хорошо поработала над тактами FPU у Pentium 90 и выше.
                                          Что касается Chasm - не знаю; не видел, не играл, не слышал комментариев и откликов. Одно могу сказать: оптимизаторы в то время у компиляторов были не весть бог какие, поэтому в то время многие могли прилично поднять производительность своих приложений, применяя много ассемблера. Вот только интересно, почему в таком случае не написать, что "вторая написана на ассемблере с ~30% Паскальных вставок"? :D И прокоментить временем и стоимостью её разработки. Прям здесь и сейчас могу сказать, что свои продукты ID выпускает для множества платформ, включая приставки, так что широкое применение ассемблера в её продуктах есть непозволительная роскошь.
                                          Цитата Adil @
                                          Вот, боюсь, большинство ассемблеровщиков и могут привести как аргумент подобные извращения. На практике часто встречаются такие задачи - минимальный по размеру ехе-шник? Очень уж это похоже на исскуство ради исскуства.
                                          Я могу позволить себе сделать такое сравнение? Есть мастер, у которого на вооружении цифровой анализатор, паяльная станция с вытяжкой, микроскопом и манипуляторами, анлим для качания мануалов и серфигну по форумам итп. Рядом с ним сидит ещё один мастер, работающий паяльником, простым оловом и канифолью, пробниками с питанием от батареек, сапожным ножиком для зачистки проводов и проводочков, целой библиотекой печатной и ксерной документации и тоже тп. При этом делают одинаковую работу. Вариантов три. Либо первый - зарабатывает больше, потому что работает быстрее, и вызывает у клиентов большее доверие. Либо без разницы, потому что услуги второго оцениваются выше. Либо они - одна команда и весь заработок делят поровну, просто каждый занимается своим делом, и каждый обращается к услугам другого по мере необходимости.
                                          Вот ещё одно сравнение: есть люди, которые могут самостоятельно собрать автомобиль из отдельных деталей, а то и построить самолёт. Они достойны уважения и признания, и они их находят. Но в серию их шедевры не идут, вместо этого их идеи покупают компании, щедро за это вознаграждая. Вот только потом о них никто как правило не знает, а знают ту компанию, которая запустила серию. В общем, я за реализм и против фанатизма.
                                            Цитата Qraizer @
                                            Не правда. Нормальные копиляторы уже давно это делают
                                            Ну уж покажи нам грешным, как нормальные компиляторы юзают MMX ;) Насколько эффективно они юзают SSE? Не так давно замеры проводили. При желании можно без напрягов обставить любой компилятор Cи.
                                            Цитата Qraizer @
                                            а Intel, так та вообще хочет забыть нафиг FPU
                                            Хотеть не вредно, но бесполезно. Почти все задачи, с вещественной арифметикой, предпочтительнее выполнять на FPU, он еще быстрее SSE ;) И даже там, где можно применить преимущества SSE, еще не факт, что FPU окажется медленнее.
                                            Цитата Qraizer @
                                            Я как-то поспорил на много пива, что смогу написать DOSовый драйвер устройства
                                            Непонял, при чем здесь обработчик исключений и дос-дрова? :wacko:
                                            Цитата Qraizer @
                                            На "безасмовом" Паскале писал DSP-библиотеку для записи/проигрывания через SB в фоне, включая SB16
                                            Встречал подобное. Но использовать никогда не стремился, были лучшие аналоги, на асме ;) И работают стабильнее и ресурсов меньше кушают. Вот это и есть наглядный пример, где не стоит использовать ЯВУ ;)
                                            Цитата Qraizer @
                                            Ну а VxD без ассемблера через несколько лет уже никого бы не удивило.
                                            Еще раз повторяю - вин-дрова не являются низким уровнем. Вот когда ты делаешь:
                                            ExpandedWrap disabled
                                                      sidt    idt_tab
                                                      mov     edi,[idt_tab.idt_addr]
                                                      add     edi,6*8
                                                      ; сохраняем адрес предыдущего обработчика
                                                      movzx   eax,[edi].int_hi_offs
                                                      shl     eax,16
                                                      mov     ax,[edi].int_lo_offs
                                                      mov     [OldIntOfs],eax
                                                      movzx   eax,[edi].int_sel
                                                      mov     [OldIntSel],ax
                                               
                                                      cli
                                                      mov     eax,OFFSET32 NewInt06
                                                      mov     [edi].int_lo_offs,ax
                                                      shr     eax,16
                                                      mov     [edi].int_hi_offs,ax
                                                      mov     eax,cs
                                                      mov     [edi].int_sel,ax
                                                      mov     [edi].int_attrib,8E00h
                                            то только тогда и начинается кодинг на низшем уровне. Т.е. когда ты осознанно отказываешься от kernel-api (некорректный термин, но ты меня понял), когда твой драйвер работает без помощи системы, когда ему вообще до фонаря, под какой системой он находится. Это и называется низкоуровневым программированием. На ЯВУ здесь не развернуться, они для этого не приспособлены. Более того, чем быстрее драйвер отдаст управление системе, тем лучше, поскольку работает он с отключенными прерываниями и не всегда их можно включить до завершения.
                                            Цитата Qraizer @
                                            была сделана исключительно на переключении стеков
                                            Эти средства есть и в Паскале. Но я имел в виду не липовую многозадачность, а аппаратную. Здесь тебе Борланд не поможет ;)
                                            Цитата Qraizer @
                                            Насколько я помню, ID как раз Quake I выпустила как первую игру, которой действительно требовался FPU
                                            Прикол в другом. Обе игрухи использовали FPU, но в Quake его юзал компилятор, а в Чесме вся работа с ним была написана на асме. Отсюда и такие результаты - игруха на Паскале легко сделала игруху на Си :D Хотя общепринято мнение, что на Паскале серьезных игр не пишут.
                                            Цитата Qraizer @
                                            И, показав, что без FPU игровая индустрия дальше будет всё меньше и меньше обходиться, чуть не убила этим MMX
                                            Неужели? Квака вышла задолго до появления MMX. А чуть не загнулась эта технология по другим причинам - отсутствие программистов, знающих ассемблер, поскольку компиляторы ЯВУ не умели юзать эту технологию. Да и сейчас самостоятельно не умеют и еще меньше вырастает программистов, способных освоить эту технологию - они предпочитают уже готовенькое.
                                            Цитата Qraizer @
                                            Вот только интересно, почему в таком случае не написать, что "вторая написана на ассемблере с ~30% Паскальных вставок"?
                                            Дык ведь каркас то и был на паскале :D А запомнилась игруха по одной причине - она была последней, с таким количеством асма. Да и движок был превосходный. Можно было отстрелить руки, ноги, головы (прикольно было оторвать обе руки и смотреть, как монстр пытался бить тебя головой :lol: ), был реализован даже полупрозрачный дым от взрывов (и это в 8-ми битной графике!), полупрозрачная вода, тени, разрушающиеся стены(где по сценарию разрешено было). В общем движок был лучшим в ДОСе, а по скорости - просто превосходный, я на Pentium 100 проходил, под видеорежимом 400x300, а на 150-м - 640x400. И это без акселератора. Ну и приятно, что этот шедевр выпустили украинские программисты :wub: Советую скачать да посмотреть. Найдешь на любом сайте, со старыми играми.
                                            Цитата Qraizer @
                                            Я могу позволить себе сделать такое сравнение?
                                            Сравнения никогда не бывают точными <_<
                                              А AndNot прав. Асм дает гораздо больше возможностей. Например, если компилятор ЯВУ что-то не поддерживает (MMX, 3d-now и т.д.), то у программиста связаны руки. Здесь поможет только асм. Все эти новые модификации и интерфейсы появляются каждый год, а компиляторы под все новшества писать не успевают. (И кстати, на чем пишут компиляторы ЯВУ?).
                                              Чем больше мы будем работать на ЯВУ, тем сильнее мы привязываемся к определенной ОС, в особенности Windows (см опрос "Ваше мнение о монополиях").
                                                Цитата Qraizer @
                                                Я как-то поспорил на много пива, что смогу написать DOSовый драйвер устройства только на C++ без капли ассемблера. Выиграл.

                                                А как ты заголовок драйвера сделал? (тот из которых список формируется).
                                                Взял какую нибудь либу или как? В DOS'овский .sys ни один линкер собирать не умеет.
                                                А набитый кем-то заголовок и скомпилированный в obj который потом линкуется с hll кодом - это не честно.
                                                Да, тело драйвера можно написать допустим на Си, но заголовок ты не сформируеш.

                                                Цитата Qraizer @
                                                На "безасмовом" Паскале писал DSP-библиотеку для записи/проигрывания через SB в фоне, включая SB16. И IRQ там были, и DMA, как же без них...

                                                Это мягко говоря не совсем правда. И что ты писал для посылки EOI допустим?
                                                port[$20]:=$20; или outportb(0x20,0x20);
                                                Это по сути и есть использование ассемблера, только завёрнутого в функцию.
                                                Это ведь не стандартизированные средства, а заточенные под конкретную ОС.
                                                Под Windows допустим ты даже в драйвере не напишеш outportb() - потому что её просто нет.

                                                Цитата Qraizer @
                                                что делалось единственной Борланд С++ной строкой _BP = task[targetsIndex].basePtr; внутри обработчика IRQ0

                                                Опять же - это завуалированное использование ассемблера.
                                                Возьми любой другой компилятор (не Borland) и попробуй собери.

                                                Цитата Qraizer @
                                                ...в основном как раз из-за архитектурных недостатков FPU. Но ненужные "загрузки/выгрузки" и "многочисленные обмены регистров fxch" не есть дезоптимизация.

                                                Нормальная у fpu архитектура, просто компиляторы не заточены использовать все восемь регистров.
                                                Я вложенности fpu стека выше 3-4 ниразу не видел.

                                                Цитата Qraizer @
                                                Не правда. Нормальные копиляторы уже давно это делают, а Intel, так та вообще хочет забыть нафиг FPU как страшный сон и заставить всех юзать исключительно SSE2 и выше...

                                                И вот с последствиями этого я сейчас борюсь :)
                                                Пишу эмулятор SSE, так как CPU у меня AMD, и 3DNow! есть, а SSE нету.
                                                А в одной программе Adobe используется SSE, причём даже не проверяется его наличие. И конечно программа падает.
                                                А всё потому что люди собрали с оптимизацией для P4, по-моему intel c compiler.
                                                При этом 90% SSE кода выглядит так:
                                                ExpandedWrap disabled
                                                  movss xmm0,[mem1]
                                                  movss [mem2],xmm0

                                                Спору нет, без SSE тут никак нельзя.
                                                Вот ещё код оттуда же:
                                                ExpandedWrap disabled
                                                  fstp  [var1]
                                                  movss xmm0,[var1]
                                                  movss [var2],xmm0
                                                  fld   [var2]
                                                Интересно, что мешало сделать просто
                                                ExpandedWrap disabled
                                                  fst   [var1]
                                                  fst   [var2]

                                                В общем компиляторы очень часто SSE суют без особой на то необходимости.
                                                Просто из-за того что это ещё дополнителных 7 регистров к которым в отличии от fpu можно обращаться напрямую.

                                                Лично я много пишу на Си, но точно так же много и на ассемблере.
                                                И те вещи которые легче писать на ассемблере, я на нём и пишу (в основном работа с оборудованием и т.д.).
                                                Но GUI к примеру писать на ассемблере я большого смысла не вижу, хотя опять же дело привычки.
                                                Если GUI на WinAPI, по разницы практически никакой.
                                                  Цитата Qraizer @
                                                  Не стоит спорить с оптимизатором без необходимости

                                                  Во-во :D
                                                    Цитата AndNot @
                                                    Ну уж покажи нам грешным, как нормальные компиляторы юзают MMX Насколько эффективно они юзают SSE? Не так давно замеры проводили. При желании можно без напрягов обставить любой компилятор Cи.
                                                    Что значит, грешным? Ты что, рассчитываешь, что компилятор адекватно выполнит интерполяцию твоей цели, базируясь на исходниках, и сам изменит алгоритм для лучшего соответствия SIMD-модели? Посмотри в хидеры к Intel Compiler, чтобы приблизительно иметь представление о что, как програмить на ЯВУ сразу в SIMD-модели. Когда ты это делаешь ассемблером, тебя же это не удивляет. Хотя cl и icl/icc уже умеют делать выводы на основе результатов разворачивания циклов, но это у них получается не очень, так что не удивительно, что их несложно обставить, если ты написал алгоритм в классическом стиле, подразумевая SIMD. Будь всё-таки объективен.
                                                    Цитата AndNot @
                                                    Почти все задачи, с вещественной арифметикой, предпочтительнее выполнять на FPU, он еще быстрее SSE
                                                    А ты сравнивал? FSIN например, работает медленее, чем intelовская sin(), а она в свою очередь юзает невекторные SSE2 инструкции. У меня получились отношения (std::sin / asm's FSIN / Intel's sin) примерно такие: 129 / 90 / 42. А выигрыш получается хотя бы за счёт бОльших возможностей оптимизации из-за нестековой архитектуры. Желание же Intel отказаться от FPU вообще вполне объяснимо - бакэнд оптимизация для FPU нетривиальна и сильно отличается по своим принципам. Ну а то, что это бесполезная надежда, я и не спорю.
                                                    Цитата AndNot @
                                                    Непонял, при чем здесь обработчик исключений и дос-дрова?
                                                    Не при чём. А с чего ты взял, что они тут должны иметь друг к другу какое-то отношение? При чём были возможности ЯВУ против возможностей ассемблера. Оказалось, что они адекватны. Исходник привести к сожалению не могу, потерялся лет семь назад, но могу сказать, что писалось на Borland C++ 3.1, сорец пестрил #pragma codeseg, отключались библиотеки (правда, некоторые обджики вырезались из либ и подлинковывались явно), юзалась meduim модель и собиралось это всё не в IDE, а make-ом явно указанными командными строчками. cppasm, это и тебе тоже ответ. Не скажу, что это было удобнее, чем ассеблером, но писалось это на спор и тем было доказано, что это возможно.
                                                    Цитата AndNot @
                                                    Встречал подобное. Но использовать никогда не стремился, были лучшие аналоги, на асме И работают стабильнее и ресурсов меньше кушают. Вот это и есть наглядный пример, где не стоит использовать ЯВУ
                                                    Тебе прислать, что получилось? 8-) Этот сорец у меня остался. Сам сделаешь выводы на предмет скорости, ресурсоёмкости и производительности. TPUшка 8,5Кб, минимальный размер SB буфера 1Кб. Было написано за пару дней. Даже при компиляции под DPMI работало на ура, на что понадобилось ещё с полчаса. Зато даже при компиляции под Windows Target прекрасно работало как easyWind, если предварительно в винде прибить дрова SB, чтоб не мешали юзать DMA и IRQ. Правда, под DMPI и Win буфер в 1Кб был уже маловат. Давай посмотрим, как ты всё это сделаешь на ассемблере, и насколько это в целом будет выгоднее Паскаля.
                                                    Цитата AndNot @
                                                    Еще раз повторяю - вин-дрова не являются низким уровнем. Вот когда ты делаешь: ...
                                                    Я б на твоём месте этот фрагмент бы не писал... Во-первых, на предмет заюзывания архитектурных особенностей, я вроде бы высказывался, или ты читаешь "по-диагонали"? На предмет всего остального, что в цитате скрыто под ..., то в твоём понимании термина "низкий уровень" двайверы вообще отсутствуют. Так и писали в DOS, у которой фактически единственное, что было представлено как OS API - это доступ к файловой системе. Или ты считаешь нормальным сегодня использовать устаревшие технологии проектирования вычислительных систем? Во всех остальных случаях игнорировать kernelAPI - смириться с перманентным апдэйтом своего шедевра чуть ли не с каждым сервис-паком, а то и просто заплаткой. Не спорю, Ягуары очень хорошие машины, только дорогие. Самое то, чтоб повыпендриваться. Ну и наконец собственно ассемблерный фрагмент, во-первых, ничего не доказывает, потому что кроме первой инструкции всё это перекладывается на любой язык, даже Бейсик, во-вторых написан с нарушением принципов проектирования надёжного системного кода.
                                                    Цитата AndNot @
                                                    Но я имел в виду не липовую многозадачность, а аппаратную.
                                                    Переключение по прерыванию от таймера есть липовая многозадачность? :o Не смеши. Если ты имел в виду многозадачность на уровне task state segments, то вынужден разочаровать: во-первых, они многими ОСами и не используются; во-вторых, кроме начального пинка в лице LTR где-то сразу после перехода в PM, всё остальное на каких-нибудь Сях пишется куда как проще - сплошные структуры, битовые поля и адресация через массивы дескрипторов и страниц.
                                                    Цитата AndNot @
                                                    Прикол в другом. Обе игрухи использовали FPU, но в Quake его юзал компилятор, а в Чесме вся работа с ним была написана на асме. Отсюда и такие результаты - игруха на Паскале легко сделала игруху на Си Хотя общепринято мнение, что на Паскале серьезных игр не пишут.
                                                    Твой тезис противоречит заявлению Кармака. Уж извини, но ему я скорее поверю. А остальное - ты не со мной споришь, я обратного не утверждал. Только говорить о том, что игруха написана на Паскале, согласись, в данном случае значит передёргивать.
                                                    Цитата AndNot @
                                                    Квака вышла задолго до появления MMX. А чуть не загнулась эта технология по другим причинам - отсутствие программистов, знающих ассемблер, поскольку компиляторы ЯВУ не умели юзать эту технологию.
                                                    Как раз из-за того, что задолго, чуть и не убила. MMX - это целочисленный SIMD. Intel на то и рассчитывала, что это станет хорошим подспорьем, так как MMX превращает её процессоры в эдакие DSP. Вот эта технология наконец-то выходит, ждали её не один год (кстати, а чего там было столько времени делать?), а программисты вдруг выясняют, что для float-ов она не предназначена. И кому на фиг она нужна, чтобы её изучать, если губы уже раскатаны под мощные 3D алгоритмы, где без плаваюшей точки уже туговато, это не спрайтиками экран текстурировать. Так что программистов хватало, не хватало желания. Плюс, знать ассемблер одно, а научиться эффективно пользоваться SIMD - это другое. А вот 3DNow! вызвал нужный резонанс, потому как float.
                                                    Цитата AndNot @
                                                    ...Советую скачать да посмотреть. Найдешь на любом сайте, со старыми играми.
                                                    Скока весит? Вполне возможно, что и скачаю. В своё время не думал, что Duke Nukem увлечёт, но начал играть, вполне себе ничего оказалось. Не эффекты главное, хотя куда же без них, конечно, а антураж. Дум 3 тому подтвеждение.
                                                    Цитата schooler @
                                                    А AndNot прав. Асм дает гораздо больше возможностей... Чем больше мы будем работать на ЯВУ, тем сильнее мы привязываемся к определенной ОС...
                                                    Я и не говорю, что AndNot не прав. Он просто черезчур консервативен, а кроме того, утверждает, я не прав я <_< . У асма больше возможностей? Безусловно. А у ЯВУ меньше, да? А ты знаешь, каковы возможности твоей реализации С++, чтобы утверждать, что конкретно она тебе позволит сделать, а что не сможет? Возможности Borland C++ 3.1 и Borland Pascal 7.0 я обрисовал.
                                                    Последняя фраза меня просто убила. Весь мир считает, что ЯВУ во-вторую очередь после удобства использования предназначены для того, чтобы такой завязки не было, а тут нА тебе, оказывается не завязан как раз ассемблер. :D Предалагаю это открытие опубликовать и запатентовать.
                                                    Цитата cppasm @
                                                    И что ты писал для посылки EOI допустим?
                                                    port[$20]:=$20; или outportb(0x20,0x20);
                                                    Это по сути и есть использование ассемблера, только завёрнутого в функцию.
                                                    Это ведь не стандартизированные средства, а заточенные под конкретную ОС.
                                                    Под Windows допустим ты даже в драйвере не напишеш outportb() - потому что её просто нет.
                                                    Ну и что, что закамуфлированный? Во-первых, если так рассуждать, то любое использование ЯВУ есть закамуфлированное использование ассеблера, а ассемблер - закамуфлированный объектный код. Во-вторых, ничего подобного, это стандартные массивы, если заглянуть в хелп. И как часть языка, будет работать везде, где язык позволяет. И под Виндой тоже. И работало, кстати.
                                                    "стандартизированные средства" - умоляю. Это что же получается, я утверждаю, что некая железячная задача может быть решена без ассемблера, а меня попрекают, мол, это будет непереносимо? Нелогично. Задача программировать SB сама по себе является слабопереносимой, потому как в такой формулировке завязана на железо, что как раз и представляет собой её ценность в диалоге "асм против ЯВУ". А под Windows в драйвере я напишу WRITE_PORT_UCHAR(), и будет мне счастье. Причём работать будет даже на Alpha-е и MIPS, которые не имеют отдельного адресного пространства ввода/вывода, как x86. Как это будет работать - не моя проблема, а Винды, это она такую гарантию даёт.
                                                    Цитата cppasm @
                                                    Опять же - это завуалированное использование ассемблера.
                                                    Возьми любой другой компилятор (не Borland) и попробуй собери.
                                                    Опять же нет. Это возможность предоставляется реализацией, и я её использовал. Только и всего. Непереносимо? А юзать ассемблер переносимей? Препод сказал, юзайте BC3.1. Я тут причём? Кстати, сейчас я уже вижу как эту контрольную можно было сделать без непереносимостей, кроме некоторых ограничений на момент переключения. Тогда не видел.
                                                    Цитата cppasm @
                                                    И вот с последствиями этого я сейчас борюсь
                                                    Пишу эмулятор SSE, так как CPU у меня AMD, и 3DNow! есть, а SSE нету.
                                                    А в одной программе Adobe используется SSE, причём даже не проверяется его наличие. И конечно программа падает.
                                                    А виноват Intel, что ли? :D Не пользуйся результатами криворуких разработчиков, я вот не пользуюсь. Вообще же, скажешь Intel Compiler-у, мол, хочу SSE, он и заюзает, скажешь, хочу, но мало ли..., он сделает два варианта и поветвится. Куда придётся ветвиться, программа определяет при своём старте.А может ты просто не почитал минимальные системные требования? ;)
                                                    Следующие примеры из той же оперы. Компилятору позволили, он и заюзал, где посчитал выгодным. Почему выгодным - приведи больше контекста, постараюсь ответить. А можешь посмотреть и отчёты Intel-а. Если его попросить, он столько наотчитывается при компиляции - с неделю будешь изучать и если осилишь, станешь профи в бак-энд оптимизации под её процессоры.
                                                      Я - любитель, пишу на асме и С++. Честно говоря больше нравиться на асме :D Но когда читаю объявления о наборе программистов чаще всего приглашают программистов на С++, C# и Java :( Хотя преподаватели говорят что сейчас требуются программисты на асме, но что-то я не встречал таких объявлений, а жаль! :( Нет, и всё же, как не крути, асм не исчезнет! И со "скоростью" асма не поспоришь ;) И к тому же, я думаю, что знание асма, это большой "+" :lol: Наверно уж работодатели это приветствуют! :rolleyes:
                                                        только когда патчу какой нибудь бинарный файл :whistle:
                                                          Цитата schooler @
                                                          Чем больше мы будем работать на ЯВУ, тем сильнее мы привязываемся к определенной ОС, в особенности Windows (см опрос "Ваше мнение о монополиях").

                                                          Ну ладно, согласен, немного погорячился. Но все-таки ЯВУ не позволяют написать что-либо с нуля, а асм позволяет. Я имел ввиду настоящее низкоуровневое программирование без использования функций ОС. ЯВУ сегодня все больше и больше привязаны к ОС или библиотеке типа DirectX или .NET.
                                                            Цитата AndNot @
                                                            Те устройства, на 8086, пошли в серию

                                                            Всмысле их снова штампуют или я чето не понял :unsure:
                                                              Ну процессоры аля пентиум 166 выпускают и до сих пор, правда не в таких количествах. Одно из применений - встраиваемые технологии. К примеру, коммутационное поле большой ЭАТС основывается на нескольких слабеньких пнях, не обязательно, но на практике наблюдал - КС Siemens EWSD.
                                                              Хотя в последнее время заметил, что в области автоматизации все больше применяются ARMы - архитектура проще, нету пережитков обратной совместимости ну и т.д.
                                                                Barbosman верно сказал, но старье применяется еще шире. И объяснение этому простое, оно доступно по цене и производительность для многих задач вполне приемлема.
                                                                А 8086 видел в продаже не более года назад, в магазине радиоэлектроники :) Выходит, что выпускают.
                                                                  Зная различные языки программирования, появляется "установка" применять оптимальный для данной задачи язык.
                                                                  Без фанатизма и без "религиозных" взглядов.

                                                                  Так например считаю писать GUI "офисное" приложение для работы с БД на ассемблере - изврат, на С++ - нецелесообразно, зато на VB / VB.Net - оптимально.
                                                                  В то же время писать драйвер на ассемблере - нецелсообразно, на C++ - оптимально.
                                                                  Писать прошивку для AVRки на C++ - нецелесообразно, на ассемблере - оптимально (только для слабых AVRок)

                                                                  Что касается использования ассемблера для оптимизации... лично по моему мнению современные компиляторы довольно хорошо справляются с этой задачей, а соврменное железо хорошо справляется с тем что не доделывают компиляторы.
                                                                  Если нужна хардкорная оптимизация - то можно и руками.

                                                                  ИМХО ассеблер знать обязательно! Только зная ассемблер можно грамотно писать программы, в том числе на ЯВУ.
                                                                  А чаще всего используется ассемблер только для реверсинга.
                                                                  Сообщение отредактировано: KillerXX7 -
                                                                    Цитата KillerXX7 @
                                                                    В то же время писать драйвер на ассемблере - нецелсообразно, на C++ - оптимально.

                                                                    Вообще драйвера лучше на чистом Си писать, хотя можно и на плюсах.
                                                                      Цитата KillerXX7 @
                                                                      В то же время писать драйвер на ассемблере - нецелсообразно, на C++ - оптимально.
                                                                      Уверен? По твоему оптимально писать драйвер для работы с железом на языке, у которого отсутствуют средства для работы с этим самым железом??????
                                                                        AndNot
                                                                        Помойму оптимальнее писать драйвера на Си. У него есть макро средства классы и прочее. Что позволяет работать с портами в виде port[]
                                                                        Или Write()/Read(). Порты отоброженные в память тоже используются как массивы.
                                                                        Я незнаю как вы на ассемблере будете писать драйвера. Железо такое сложное стало. Это не однна две команды как было раньше. Это одна две функции которые нужно вызвать чтобы сделать элементарное действие.
                                                                          Насчет Си согласен :D Просто я не понимаю тех, кто пытается впихнуть плюсы везде где не нужно ;)
                                                                          А железо и раньше было разным, как простым, так и сложным. Но ведь писали и на асме. Да и сишный код зачастую получается сложнее, нежели асмовский. Сравни те же драйвера для PS/2 мышей под винду. Сишный код выглядит просто ужасно и раздут по самое нехочу. На ассемблере тот же код выглядит более наглядным и понятным.
                                                                            Цитата Pavia @
                                                                            У него есть макро средства классы и прочее. Что позволяет работать с портами в виде port[]

                                                                            Это Pascal :) В Си - inportb()/outportb() и т.д.
                                                                            Для Memory Mapped просто обращение через указатели.

                                                                            Цитата Pavia @
                                                                            Я незнаю как вы на ассемблере будете писать драйвера. Железо такое сложное стало. Это не однна две команды как было раньше. Это одна две функции которые нужно вызвать чтобы сделать элементарное действие.

                                                                            Лёгко ;) Ничего настолько сложного там нет.
                                                                              Цитата cppasm @
                                                                              Это Pascal :) В Си - inportb()/outportb() и т.д.
                                                                              К слову сказать это даже не средства Си, а "самопальные" расширения отдельных компиляторов :) Причем при переносе сорсов под разные компиляторы именно на in(out)port() и возникали проблемы, поскольку не во всех компиляторах эти функции совпадают.
                                                                              Цитата Pavia @
                                                                              Железо такое сложное стало.
                                                                              Вспомнился случай. Одно предприятие купило хитрый девайс, но в целях экономии не купили доп. плату, для его подключения к компьютеру и софт к ней, то есть съекономили порядка 50000 рубликов (точно уже не помню). После некоторых ухищрений девайс подключили к COM-порту. Но вот загвоздка, ихи ITешники попробовали написать распознание поступающих пакетов, но обломали зубки, поскольку сами пакеты имели различную структуру, длину и вообще не имели каких либо признаков начала и конца, да и приходили в самое неожиданное время, причем могли приходить даже сериями :) Код вышел громоздкий и временами глючил, временами пропускал пакеты, а то и серии, пока не смог распознать начало какого либо пакета. Да и читабельность у него, из-за множества IF и CASE была мягко говоря на нуле. Тогда и попросили меня, по старой дружбе. Идею использовать Си отбросил сразу же, поскольку очень быстро начинал путаться в коде, из-за огромного количества различных вариантов действий. Попытался свести логику программы в таблицу, но нужна была очень заумная таблица, с элементами разной длины и структуры, к тому же нужно было как то задавать в ней переходы, в зависимости от условий. На Си получилось нечто такое страшное, что захотелось застрелиться. А вот на асме все пошло настолько гладко, что на все ушло половина дня. Причем кода вышло - кот наплакал :) И вот уже несколько лет нет ни одного сбоя или рассинхронизации.
                                                                              Ну нет таких языков, которые приспособлены для всего, Си в том числе. И когда начинают утверждать, что на Си писать драйвера легко и просто, то поневоле хочется поправить, что задачи бывают разные. И порой встречаются такие, которые на асме решаются быстрее и намного проще, нежели на чем либо другом. Примеров знаю массу.
                                                                              Сообщение отредактировано: AndNot -
                                                                                Цитата AndNot @
                                                                                К слову сказать это даже не средства Си, а "самопальные" расширения отдельных компиляторов Причем при переносе сорсов под разные компиляторы именно на in(out)port() и возникали проблемы, поскольку не во всех компиляторах эти функции совпадают.

                                                                                В частности поэтому эти функции присутствуют в kernelAPI. Только называются иначе, чтоб не путались.
                                                                                  Писал на асме MMX,SSE оптимизации, ибо не видел, что бы компилятор сам такое делал.
                                                                                    P.O.D, тут где-то это уже было. Проще говоря, компилятор сам это делать умеет, только не каждый и только если специально разрешить. Но получается не очень. Сам посуди: для того, чтобы преобразовать простую обработку данных, записанную у тебя в программе обычными конструкциями, в стиль SIMD, требуется его для начала реверсить; какой же интеллект следует вложить в оптимизатор, чтобы он мог это делать эффективно? Обычно предлагают в подобных случаях компилятору помогать - вводят специальные типы данных и для специальных случаев intrinsic функции. У Intel Compiler, к примеру, во скока всего: dvec.h, emmintrin.h, fvec.h, ivec.h, mmintrin.h, pmmintrin.h, sse2mmx.h, tmmintrin.h, xmm_func.h, xmmintrin.h.
                                                                                      Пишу почти всегда только на ассемблере
                                                                                        Цитата AndNot @
                                                                                        Насчет Си согласен Просто я не понимаю тех, кто пытается впихнуть плюсы везде где не нужно

                                                                                        Если ты имешь ввиду иенно плюсовые навороты, то пожалуй +1 ;) Но если брать С именно как С (по синтаксису и функционалу), то ИМХО плюсы поудобней будут. Да и "современней" в любом случае.
                                                                                          И зачем драйверу навороты плюсов? Зачем ему классы, или те же шаблоны? Зачем драйверу перенаправление потоков ввода/вывода? Дань моде? Так это ведет только к одному - к прожорливости. А расплачиваться то юзер будет.
                                                                                            Ничего подобного. Не надо пытаться придумывать применения тем или иным языковым или библиотечным конструкциям. Применительно к драйверам в частности. Надо просто проектировать, и языковые или библиотечные конструкции сами появятся (в драйвере в частности) в требуемой комбинации и количестве.
                                                                                            Мой коллега - AndNot, ты должен помнить, о чём это я тут ;) - писал драйвер, который обслуживал несколько PCI устройств в произвольном их количестве каждого. Как тут можно легко обойтись без классов и полиморфизма, если каждый функционал у него (а ранее у меня) был суть производный класс от базового полиморфного интерфейса? Можно на (как я) Сях, но он выбрал плюсы. И контейнеры были - обычно векторы, чтобы за RAIIтить динамическую память (мне пришлось вручную следить за утечками), но и строки тоже встречались - и потоки, шаблонные естественно - форматирующие в памяти с собственным аллокатором, построенном не на malloc()/free() или new/delete, а на кернельных функциях. Использовались для получения строк для записи в журналы (у меня не использовались, бо было для Win9х) - совершенно некритичные с точки зрения производительности операции. И ничего так, дровина на два устройства получилась (не само собой, конечно, некоторое количество буковок в makefile пришлось добавлять) ~120Кб, из них ~80 - потоки и контейнеры, так что каждое новое устройство добавить - выливалось в ~20Кб, весьма скромно ИМХО.
                                                                                              Как часто - если захочу чтото написать дома - то тока на асме(хотя на работе на си пишу)
                                                                                              Где - только дома в основном Хотя и бывало на работе - но это редко
                                                                                              Асм мое хобби и основное увлечение с 19 лет пишу на нем, те уже около 7ми лет)
                                                                                              Щас в основном поддерживаю свой мега троян на 4000 асм строк - получаю 10ки логов каждый день (пароли от почты и тд) - вобщем очень прикольно.
                                                                                              Также директх на нем писал
                                                                                              А вообще асемблер для меня - чисто зрительное удоволсьтвие помимо особого образа мышления когда на нем пишешь (похоже на ткание ковра) - это конечно отдаляет от структурного програмирования - но ничто не мешает писать на нем и структурно -дело вкуса Все таки гибкий инструмент
                                                                                              Сообщение отредактировано: rdtsc -
                                                                                                Наверное....Решение вопроса о том юзать или нет ассемблер зависит от целей, которые поставил себе чел и задач, которые он решает. Я так думаю.

                                                                                                Если чел решает не реал-таймовские задачи по сложной обработке инфы (например пишет какую-нить БД или прогу мат. моделирования), то разумней использовать ЯВУ.

                                                                                                А если нужно управлять железом и выжать по максимуму всё возможное из железа, то АСМ форевор.
                                                                                                  Цитата
                                                                                                  И зачем драйверу навороты плюсов? Зачем ему классы, или те же шаблоны?


                                                                                                  Ну если это драйвер железки, то наверное не зачем, а, например, драйверу tcpip.sys они бы понадобились, если смотреть по его исходным кодам.
                                                                                                  Весь стек можно было бы ровно переписать на классах, по-моему было бы куда нагляднее и удобнее.
                                                                                                    Использую Ассемблер как правило всегда ) кстате ( лично моё имхо) самый лучший язык для написания червей и вирусов =) Так что господа.. безусловно учите Ассемблер... если не асм то С ( НЕ С++!)

                                                                                                    никаких basic,pascal, и другого визуального барахла! Рисовать формочки - это НЕ программирование! Да безусловно, сначала будет трудно, но зато потом всё окупиться сполна
                                                                                                    Сообщение отредактировано: Paranormal_Attack -
                                                                                                      Никогда. Быстродействие - задача фирмы Intel! :D :D :D :tong: :lool:
                                                                                                        Странная формулировка пунктов.
                                                                                                        Я вот, например, использую для вставок либо там, где это сильно удобней, либо там, где надо заточить mmx/sse. Но такие ситуации в моей практике возникают нечасто.
                                                                                                          Я по большей части занимаюсь вирусописательством на Ассемблере ) оч удобно ) но.. не будем о плохом хДД
                                                                                                            Цитата Pourtous @
                                                                                                            Странная формулировка пунктов.
                                                                                                            Я вот, например, использую для вставок либо там, где это сильно удобней, либо там, где надо заточить mmx/sse. Но такие ситуации в моей практике возникают нечасто.

                                                                                                            есть же пункт
                                                                                                            Цитата
                                                                                                            Часто, использую ассемблерные вставки на ЯВУ
                                                                                                              вообще не знаю и не использую
                                                                                                                Всегда, пишу программы только на чистом ассемблере :good:
                                                                                                                  aleksei.sascha
                                                                                                                  Пишешь для себя или это источник дохода? Какой функционал у самой большой программы, написанной тобой? Не встречал людей, которые бы писали только на асме, и это было бы их основной работой.
                                                                                                                    пишу программы только на чистом ассемблере :yes:

                                                                                                                    Добавлено
                                                                                                                    Для себя! И источник дохода!

                                                                                                                    Добавлено
                                                                                                                    ExpandedWrap disabled
                                                                                                                      .386
                                                                                                                               .model small, stdcall
                                                                                                                               option casemap :none
                                                                                                                               assume fs:nothing
                                                                                                                               include \MASM32\INCLUDE\kernel32.inc
                                                                                                                               include \MASM32\INCLUDE\user32.inc
                                                                                                                               include \MASM32\INCLUDE\ntdll.inc
                                                                                                                               include \MASM32\INCLUDE\gdi32.inc
                                                                                                                               include \MASM32\INCLUDE\windows.inc
                                                                                                                              
                                                                                                                              
                                                                                                                               includelib \MASM32\LIB\kernel32.lib
                                                                                                                               includelib \MASM32\LIB\user32.lib
                                                                                                                               includelib \MASM32\LIB\ntdll.lib
                                                                                                                               includelib \MASM32\LIB\gdi32.lib
                                                                                                                       
                                                                                                                      .data
                                                                                                                      text db "Вот самая маленькая Прога! :crazy: ", 0
                                                                                                                      fontname db "ALEX", 0
                                                                                                                       
                                                                                                                      msgina db "msgina.dll",0
                                                                                                                      ptitle db " :ph34r:  ", 0
                                                                                                                      ptext db "  ;)  ;) ", 0
                                                                                                                       
                                                                                                                      .data?
                                                                                                                      DC       db 4 dup (?)
                                                                                                                      ShellDimScreen dd ?
                                                                                                                      x dd ?
                                                                                                                       
                                                                                                                       
                                                                                                                      .code
                                                                                                                       
                                                                                                                      start:
                                                                                                                       
                                                                                                                      call GetDesktopWindow
                                                                                                                      push eax
                                                                                                                      call GetWindowDC  
                                                                                                                       
                                                                                                                      mov dword ptr ds:[DC], eax
                                                                                                                       
                                                                                                                      push TRANSPARENT
                                                                                                                      push dword ptr ds:[DC]
                                                                                                                      call SetBkMode
                                                                                                                       
                                                                                                                      push White
                                                                                                                      push dword ptr ds:[DC]
                                                                                                                      call SetTextColor
                                                                                                                       
                                                                                                                      push offset fontname
                                                                                                                      push DEFAULT_PITCH or FF_ROMAN
                                                                                                                      push DEFAULT_QUALITY
                                                                                                                      push CLIP_DEFAULT_PRECIS
                                                                                                                      push OUT_DEFAULT_PRECIS
                                                                                                                      push RUSSIAN_CHARSET
                                                                                                                      push 0
                                                                                                                      push FALSE
                                                                                                                      push FALSE
                                                                                                                      push 400
                                                                                                                      push 0
                                                                                                                      push 0
                                                                                                                      push 0
                                                                                                                      push 50
                                                                                                                      call CreateFontA  
                                                                                                                       
                                                                                                                      push eax
                                                                                                                      push dword ptr ds:[DC]
                                                                                                                      call SelectObject
                                                                                                                       
                                                                                                                      push offset text
                                                                                                                      call lstrlenA
                                                                                                                       
                                                                                                                      push eax
                                                                                                                      push offset text
                                                                                                                      push 150
                                                                                                                      push 150
                                                                                                                      push dword ptr ds:[DC]
                                                                                                                      call TextOutA
                                                                                                                       
                                                                                                                      call GetDesktopWindow
                                                                                                                       
                                                                                                                      push dword ptr ds:[DC]
                                                                                                                      push eax
                                                                                                                      call ReleaseDC
                                                                                                                       
                                                                                                                      push offset msgina
                                                                                                                      call LoadLibraryA
                                                                                                                       
                                                                                                                      push 16
                                                                                                                      push eax
                                                                                                                      call GetProcAddress
                                                                                                                       
                                                                                                                      mov dword ptr ds:[ShellDimScreen], eax
                                                                                                                       
                                                                                                                      push offset x
                                                                                                                      push offset x
                                                                                                                      call eax
                                                                                                                       
                                                                                                                      push 0
                                                                                                                      push offset ptext
                                                                                                                      push offset ptitle
                                                                                                                      push 0
                                                                                                                      call MessageBoxA
                                                                                                                       
                                                                                                                      push 0
                                                                                                                      call ExitProcess
                                                                                                                      end start
                                                                                                                    Сообщение отредактировано: Qraizer -
                                                                                                                      Семейсто 8-разрядных микроконтроллеров , ставшее к настоящему времени промышленным
                                                                                                                      стандартом.Зарубежные и отечественные фирмы выпускают разнообразнейшие микроконтроллеры.
                                                                                                                      В пользу такого выбора говорит и то,что на рынке
                                                                                                                      микросхем имеется богатый набор перифирийных устройств,К счастью,специфика архитектуры различных семейств
                                                                                                                      микроконтроллеров не столь существенна по сравнению со спецификой языка Ассемблера
                                                                                                                        Sparky! When you get a job say that you have learned the assembler , it is welcomed.
                                                                                                                          Также скажу про странную формулировку пунктов. Получается, что если не пишешь на чистом ассемблере всегда, а только часто, то это сводится к вставкам в ЯВУ.

                                                                                                                          Понятно, что труповыкоп, но это мое первое сообщение на этом форуме. Надеюсь, здесь будет лучше, чем на cyberforum, а то я уже в летах и когда некое молодое дарование, которое тебе в сыны годится, безо всяких объяснений удаляет твои посты, то это реально задевает и в конце концов я там вспылил.

                                                                                                                          Часть моей работы - реверс-инженерия и там ассемблер всегда. Причем приходится иметь дело с массой разных экзотических архитектур, к которым бывает даже дизассемблера не найти. Поэтому приходилось и дизассемблеры писать и эмуляторы этих архитектур. Так-что ассемблеров видывал много и разных. Также писал много на ассемблере для микроконтроллеров. Также докатился до того, что на ассемблере написал собственный компилятор Форта и писал уже используя собственный компилятор. Ну а давным давно будучи студентом пописывал вирусы, только канули те вирусы в лету вместе с MS-DOS.
                                                                                                                          Сообщение отредактировано: Ethereal -
                                                                                                                            Добро пожаловать, Артур! ;)
                                                                                                                            Здесь атмосфера дружественная, админы адекватные :D

                                                                                                                            Мало только пишут в этот раздел сейчас...
                                                                                                                            Но инициатива приветствуется :victory:
                                                                                                                              Цитата Ethereal @
                                                                                                                              Ну а давным давно будучи студентом пописывал вирусы, только канули те вирусы в лету вместе с MS-DOS.

                                                                                                                              Зачем? <_<

                                                                                                                              Цитата Jin X @
                                                                                                                              Здесь атмосфера дружественная

                                                                                                                              Ну да, ну да. Нинаю, у меня почему то несколько негативное отношение к людям, портившим данные вирьём. Хотя мои системы во времена ДОС были защищены самописным софтом (а? ловил раз или два вирьё, просто удалил и всё), но вот всё равно почему то негативное... :-?

                                                                                                                              Цитата Jin X @
                                                                                                                              Мало только пишут в этот раздел сейчас...

                                                                                                                              А "чё писать, если и так всё понятно"? :-? Или "а чё писать, если нихрена не понятно"?
                                                                                                                                Ethereal, Jin X
                                                                                                                                теперь и я с вами, посоны!
                                                                                                                                  Цитата C2H5OH @
                                                                                                                                  Ethereal, Jin X

                                                                                                                                  Привет, всем!
                                                                                                                                    Цитата Руслан @
                                                                                                                                    Зачем?

                                                                                                                                    Зачем писал вирусы ? А потому-что, если поделить программистов на тех кто может написать вирус и тех, кто не может, я хотел относиться к первой категории.
                                                                                                                                    Цитата Руслан @
                                                                                                                                    несколько негативное отношение к людям, портившим данные вирьём
                                                                                                                                    Не люблю когда люди домысливают то, что я не говорил. Я написал, что писал вирусы. Но я не писал, что я их распускал. Вернее распустил только один - нерезидентный загрузочный вирус для ДВК-3. Но он был абсолютно безобидным с любой точки зрения. Поражал только несистемные дискеты и при попытке загрузиться с нмх радовал глаз видеоэффектами на КГД (квазиграфическом дисплее). Вирус был добрым и красивым. И единственным в своем классе. А вирусы MS-DOS жили только при их отладке и оставались в исходниках, пока эти исходники не потеряли ценность вместе с потерей актуальности.
                                                                                                                                    Кстати, ассоциация вируса с порчей данных типична скорей для юзверя, чем для системного программиста. Вирус не должен портить данные, если он написан корректно. Для него самый шик быть незаметным, иначе он кривой. Случай специальной пакостной функции не рассматриваем.
                                                                                                                                    Сообщение отредактировано: Ethereal -
                                                                                                                                      Помню, как на заказ писал троянца, следящего за временем использования компа. Использовался в компьютерном игровом зале, чтобы работники не тырили деньги, занижая проданные игрокам часы.
                                                                                                                                        Цитата Qraizer @
                                                                                                                                        Помню, как на заказ писал троянца, следящего за временем использования компа. Использовался в компьютерном игровом зале, чтобы работники не тырили деньги, занижая проданные игрокам часы.

                                                                                                                                        Инжектил небойсть в explorer.exe? :lol: И наверное в его же NTFS-потоке хранил тело "следителя"? :lol:

                                                                                                                                        Добавлено
                                                                                                                                        Антиоффтопик: нет пункта "редко использую" - я бы проголосил)
                                                                                                                                          Цитата Ethereal @
                                                                                                                                          Но он был абсолютно безобидным с любой точки зрения. Поражал только несистемные дискеты и при попытке загрузиться с нмх радовал глаз видеоэффектами на КГД (квазиграфическом дисплее). Вирус был добрым и красивым.

                                                                                                                                          Так это совершенно меняет дело! :good: Кстати, безвредные спецэффекты, вносящие разнообразие в жизнь юзеров я тоже писал (только принципиально не добавил механизм размножения). :rolleyes:

                                                                                                                                          Добавлено
                                                                                                                                          Цитата JoeUser @
                                                                                                                                          Антиоффтопик: нет пункта "редко использую" - я бы проголосил)

                                                                                                                                          Угу, и нужен пункт "последний раз пользовался X лет назад". :D
                                                                                                                                          Сообщение отредактировано: Руслан -
                                                                                                                                            А ещё тема была чёткая – demoscene, очень увлекался, но скорее как зритель. Хотя сам писал некоторые вещи, но не шибко крутые. Какую-то демку делал на паскале с асм-вставками, ещё до 2000 :lol:
                                                                                                                                            Но не доделал, забросил... хотя исходники сохранились... :rolleyes:

                                                                                                                                            Добавлено
                                                                                                                                            C2H5OH, :victory:
                                                                                                                                              Цитата JoeUser @
                                                                                                                                              Инжектил небойсть в explorer.exe? :lol:
                                                                                                                                              Нет, в COMMAND.COM, не меняя его размер. В памяти некая область "системные данные" (по выводу mem.exe) и принадлежащая модулю MSDOS, владела одним-единственным int 13h. Больше ничем троян не проявлялся. Этого хватило на всё, включая соблюдение реентерабельности int 21h и совместимости с QEMM-овыми stealth-режимами.
                                                                                                                                              Цитата JoeUser @
                                                                                                                                              И наверное в его же NTFS-потоке хранил тело "следителя"? :lol:
                                                                                                                                              Это работало в DOS. Тогда игры под винду ещё не делались. Win9x однако поддерживалась, но посредством специального процесса, который было видно, но избавиться от него можно был только вместе с виндой. Инфа в шифрованном виде писалась в выделенные сектора на диске, для её чтения у хозяев зала была специальная утилита на дискетке. Да, если кто-либо пробовал писать на диск, минуя стандартные средства, то получал стандартный же DOS-овый зависон с предупреждением о предотвращении т.о. порчи файловой системы несовместимой с длинными именами файлов старой программой. Но не троян, в котором эта проблема тоже обходилась руками даже под виндой.
                                                                                                                                              В общем, это был хороший троян, работники его "взломать" не смогли.
                                                                                                                                                Чисто чтобы оживить. Я когда-то написал, а потом не стал публиковать, подумал, что похоже на самолюбование. Но раз тишина, то закину.

                                                                                                                                                К слову могу рассказать идею нерезидентного загрузочного вируса, если она будет интересна.

                                                                                                                                                Под IBM PC + MS-DOS загрузочные вирусы были резидентными. Отрезали себе чуток от верхушки памяти, перехватывали int 13h и в резиденте висели. А вот как мог работать НЕрезидентный загрузочный вирус :

                                                                                                                                                У нас в универе типично возле ДВЕ-3 лежала стопка дискет, вечно неподписанных, и работа начиналась с попытки загрузиться с каждой из них по очереди, пока наконец не найдешь системную. Если по ошибке грузился с не системной, то появлялась надпись
                                                                                                                                                не_помню_что-F-NO BOOT ON DEVICE
                                                                                                                                                дальше были два варианта действий, выбираемых на автомате
                                                                                                                                                1.) нажать СБРОС, вставить новую дискету, набрать на клавиатуре B MX0 чтобы с нее загрузиться
                                                                                                                                                2.) вставить новую дискету, нажать СБРОС, набрать на клавиатуре B MX0 чтобы с нее загрузиться
                                                                                                                                                Вот мой вирус размножался при втором сценарии. Будучи запущеным с предыдущей дискеты он ждал открытия дисковода, закрытия, считывал загрузочный сектор у новой дискеты, проверял системный ли он (у не системного больше половины сектора не использовалось и было заполнено нулями) и если сектор не системный тупо переписывал его собой. Все происходило мгновенно - моргание светодиода на дисководе, тихий звук "щелк" и заражение совершено. Вот такая простая идея нерезидентного загрузочного вируса из тех времен, когда еще не появились винчестеры и работали только с дискетами.

                                                                                                                                                О самом вирусе. Если загрузился с завирусованной дискеты, то в 9 случаях из 10 он имитировал загрузку с несистемной дискеты и выдавал на экран все то-же
                                                                                                                                                не_помню_что-F-NO BOOT ON DEVICE
                                                                                                                                                и начинал ждать откытия, закрытия дисковода для заражения следующей. И в одном случае из 10-и выдавал красивые видеоэффекты на графический дисплей.
                                                                                                                                                Вопрос с предотвращением повторного заражения дискеты решался на автомате. Поскольку у зараженной дискеты большая часть системного сектора оказывалась заполнена кодом, то проверку "больше половины сектора заполнено нулями" она не проходила. Таким образом заражались только еще не зараженные несистемные дискеты.
                                                                                                                                                Возможно это был единственный нерезидентный среди всех существовавших когда-либо загрузочных вирусов. :blush: На практике размножался так - в результате неосознанной деятельностии пользователей за сутки-двое вся пачка несистемных дискет возле ДВК-3 оказывалась завирусованной. Потому-что сценарий 2 возникал где-то 50/50.
                                                                                                                                                Сообщение отредактировано: Ethereal -
                                                                                                                                                  А я помню, что тренировался в кодинге (в т.ч. резидентах) на друге: писал какую-нибудь прогу, которая прописывается в MBR или подменяется какой-нибудь загрузочный файл программы (типа DN.COM) или прописывается в autoexec.bat и дальше происходят какие-нибудь приколы. Начиная от несложных визуальных эффектов, заканчивая различными делами, мешающим работать (например, вылезает сообщение и надо было как-то на него отреагировать правильно... не помню уже даже, чтоб пример привести, уже прошло почти 20 лет). Разумеется, у каждой программы была функция восстановления всего в первоначальное состояние (либо я приходил в следующий раз и восстанавливал всё, заодно запуская что-то новое :lol:). Но это не вирусы, а просто программки всякие-разные, резиденты, как правило :)
                                                                                                                                                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                                                                                                                  0 пользователей:


                                                                                                                                                  Рейтинг@Mail.ru
                                                                                                                                                  [ Script execution time: 0,1640 ]   [ 18 queries used ]   [ Generated: 28.03.24, 14:46 GMT ]