Ассемблер

Большинство людей, недавно услышавших об этом языке, задаются вопросом: А зачем его знать, когда существует C/C++, Pascal или, там. Basic. Бытует мнение, что на ассемблере пишут только драйверы и вирусы. Но на самом деле есть и много других моментов, требующих применения этого языка.

Что это такое

Строго говоря, ассемблер — это программа, переводящая язык ассемблера в машинный код. А то, что все называют ассемблером, следует именовать не иначе как язык ассемблера (или assembly language, как кому больше нравится).Впрочем, про это почти все забыли и под словом ассемблер имеют в виду сам язык, о котором здесь и пойдет речь.

Язык ассемблера, во первых, представляет собой набор команд процессора. Это значит, что программу, написанную на ассемблере для процессора фирмы Intel, придется полностью переписывать для Macintosh. Естественно, что программа для чипа от Intel пойдет и на всех Intel-совместимыхпроцессорах, таких, например, как AMD.

В такой привязанности к главной вычислительной микросхеме кроется вся мощь и слабость программ на ассемблере: с одной стороны, все возможности процессора используются по максимуму, с другой— перенести такие программы надругую платформу крайне сложно (но много ли раз вы переносили свои программы на С+ + или Pascal на Silicon Graphics?). Именно в связи с этим в языках высокого уровня есть возможность вставки кусочков кода на ассемблере: на нем можно реализовать небольшую, но ресурсоёмкую часть кода, а все остальное писать на любимом C++ или Pascal. Программы и пишутся, и работают быстрее, да и под другую платформу, если захочется, перенести легче будет. А какие же части кода желательно реализовать на ассемблере?

Фактор1: скорость

Авторы многих книг по ассемблеру начинают свои труды со следующей информации: в любом сложном программном продукте есть определенные 10% кода, которые занимают 90% времени. Как пример можно привести любую крутую игру: ее ядро или частично, или полностью написано на ассемблере. Так, в Unreal около 40% всего кода создано на этом языке.

Другой пример, правда нечистоплотный, — вирус. Ему, сердешному, надо и ехе-файл незараженный отыскать, и заразить его, и стереть важное что-нибудь, и пароль украсть, и своему создателю на e-mail отослать. Причем сделать все это так быстро, чтобы пользователь не заметил. Тут альтернативы нет —только ассемблер. Еще в качестве примера можно привести какую-нибудь программу, делающую любые достаточно сложные математические вычисления: вспомните тот же Photoshop. А если бы писалось не на ассемблере, то ждать бы пришлось пару-тройку часов.

Фактор2: размер

Программы на ассемблере получаются в большинстве случаев гораздо меньше своих собратьев, созданных на языках высокого уровня. Достигается это, как уже упоминалось выше, за счет прямого взаимодействия с процессором, и как следствие — с операционной системой. Даже в случае включения ассемблера в программы на языках высокого уровня разницу легко заметить. Впрочем, фактор размера был больше актуален во времена пятидюймовых дискет и десятимегабайтных винчестеров. Теперь же, когда многие не видят особой разницы (гигабайтом больше или меньше — подумаешь!), об экономии в двадцать-тридцать килобайт говорить как-то неудобно. Впрочем, уменьшение размера можно считать приятным бонусом к повышению скорости.

Фактор3: неограниченные возможности

Если вам надо просто вывести на экран какую-то строку или посчитать примитивное квадратное уравнение, то для такого хватит и Бейсика. Для разработки более сложной программы, при реализации которой надо использовать перегрузку операторов, объекты и т.п., лучше всего подойдет C++. А что, если кроме всего прочего надо, например, работать напрямую с портами ввода/вывода или делать сложные вычисления с плавающей точкой? Тут от ассемблера никуда не уйти. В любом случае, срабатывает правило: надо что-то написать — пиши на С++. Не получается на C++ — пиши на ассемблере. Если и на нем не получается — этого вообще нельзя сделать.

Назад