|
@@ -0,0 +1,68 @@
|
|
|
+# Ассемблер
|
|
|
+
|
|
|
+## Введение
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+Ассемблер — это низкоуровневый язык программирования, который непосредственно отражает архитектуру конкретного компьютера. Он предназначен для написания программ, которые могут напрямую управлять аппаратным обеспечением.
|
|
|
+
|
|
|
+## История Ассемблера
|
|
|
+
|
|
|
+Первая версия Ассемблера создана в 1949 году. Ассемблер был создан для первых ЭВМ на электронных лампах, программы для которых писали на машинном языке. А так как памяти у компьютеров было мало, то команды вводили, переключая тумблеры и нажимая кнопки. Даже несложные вычисления занимали много времени.
|
|
|
+
|
|
|
+Проблему решили, когда ЭВМ научились хранить программы в памяти. Уже в 1950 году была разработана первая программа-транслятор, которая переводила в машинный код программы, написанные на понятном человеку языке. Эту программу назвали программой-сборщиком, а язык — языком ассемблера (от англ. assembler — сборщик).
|
|
|
+
|
|
|
+Появление ассемблера сильно облегчило жизнь программистов. Они смогли вместо двоичных кодов использовать команды, состоящие из близких к обычному языку условных обозначений. Кроме того, ассемблер позволил уменьшить размеры программ — для машин того времени это было важно.
|
|
|
+
|
|
|
+
|
|
|
+## Устройство языка ассемблера
|
|
|
+
|
|
|
+Ассемблер можно считать языком второго поколения, если за первый принять машинный язык. Он работает непосредственно с процессором, и каждая его команда — это инструкция процессора, а не операционной или файловой системы. Перевод языка ассемблера в машинный код называется ассемблированием.
|
|
|
+
|
|
|
+Команды ассемблера состоят из кодов операций и операндов. Операнды — это адреса, из которых процессор будет брать данные для вычислений и в которые будет помещать результат. Адресами могут быть ячейки оперативной памяти и регистры — память внутри процессора. Процессор работает с регистрами гораздо быстрее, чем с оперативной памятью.
|
|
|
+
|
|
|
+Коды операций в языке ассемблера мнемонические, то есть удобные для запоминания.
|
|
|
+
|
|
|
+Не думайте, что ассемблер — всего лишь набор инструкций процессора с удобной для программиста записью. Это полноценный язык программирования, на котором можно организовать циклы, условные переходы, процедуры и функции.
|
|
|
+
|
|
|
+
|
|
|
+Пример программы «Hello World» на Ассесмблере
|
|
|
+
|
|
|
+```
|
|
|
+.MODEL SMALL
|
|
|
+.STACK 100h
|
|
|
+.DATA
|
|
|
+HelloMessage DB 'Hello, World!',13,10,'$'
|
|
|
+.CODE
|
|
|
+START:
|
|
|
+mov ax,@data
|
|
|
+mov ds,ax
|
|
|
+mov ah,9
|
|
|
+mov dx,OFFSET HelloMessage
|
|
|
+int 21h
|
|
|
+mov ah,4ch
|
|
|
+int 21h
|
|
|
+END START
|
|
|
+```
|
|
|
+
|
|
|
+
|
|
|
+## Преимущества и недостатки
|
|
|
+
|
|
|
+|Преимущества|Недостатки|
|
|
|
+-------|--------------|
|
|
|
+|Ассемблер потребляет малое количество ресурсов компьютера.|Программы на ассемблере частенько сложны для чтения и понимания, чем программы, написанные на высокоуровневом языке.
|
|
|
+|Программы, написанные на языке ассемблера, работают быстрее программ, написанных на языках более высокого уровня, потому что они ближе к машинному коду, который понимает компьютер.|На ассемблере тяжело создавать более серьезные проекты.
|
|
|
+|Программы на ассемблере по размеру меньше, чем программы, написанные на яызках более высокого уровня, поскольку они не требуют использования библиотек и других вспомогательных оболочек.|Программы на ассемблере зависят от компьютера, то есть их можно запускать только на компьютере определенного типа.
|
|
|
+
|
|
|
+
|
|
|
+## Заключение
|
|
|
+
|
|
|
+Даже из нашего примера «Hello, World!» видно, что ассемблер не так удобен в разработке, как языки высокого уровня. Больших программ на этом языке сейчас никто не пишет, но есть области, где он незаменим:
|
|
|
+
|
|
|
+На ассемблере разрабатывают встроенные программы для микроконтроллеров. Этоминиатюрные компьютеры, установленные в системах сигнализации, пультах управления, датчиках, бытовой технике, модемах и во многих других устройствах. Микроконтроллеры используются даже в робототехнике и спутниковых навигационных системах. Объём памяти у этих мини-компьютеров ограничен, а ассемблер удобен для их программирования тем, что одна его команда транслируется в одну команду в двоичном коде. По исходному тексту программы можно определить время её исполнения и объём памяти для её хранения.
|
|
|
+
|
|
|
+На ассемблере пишут драйверы устройств и некоторые компоненты операционных систем — например, ядро или загрузчик. Любительские операционные системы MenuetOS и KolibriOS полностью написаны на ассемблере. Ассемблерный код есть в программах для игровых приставок и мультимедийных кодеков.
|
|
|
+
|
|
|
+Ассемблер применяется в реверс-инжиниринге — обратной разработке программ. Реверс-инжиниринг используют, чтобы понять, как работают программы, какой у них алгоритм. Это нужно в тех случаях, когда создатель по каким-то причинам не хочет публиковать исходный код. Обратной разработкой занимаются антивирусные компании, исследующие вирусы и трояны, создатели драйверов и операционных систем, а также просто любопытные. Ещё её активно применяют компьютерные злоумышленники всех мастей: взламывают программы, ищут уязвимости, пишут вирусы, генераторы ключей и тому подобное.
|
|
|
+
|
|
|
+Если вы хотите разрабатывать новые микропроцессоры или стать реверс-инженером, то есть смысл серьёзно заняться изучением языка ассемблера.
|