Главная /
Ассемблер /
Для чайников /
Введение
Для начала разберёмся с терминологией.
Машинный код – система команд конкретной вычислительной машины (процессора),
которая интерпретируется непосредственно процессором. Команда, как правило, представляет
собой целое число, которое записывается в регистр процессора. Процессор читает это число и
выполняет операцию, которая соответствует этой команде. Популярно это описано в книге
Как стать программистом.
Язык программирования низкого уровня (низкоуровневый язык программирования) –
это язык программирования, максимально приближённый к программированию в машинных кодах.
В отличие от машинных кодов, в языке низкого уровня каждой команде соответствует не число,
а сокращённое название команды (мнемоника). Например, команда ADD – это сокращение от слова
ADDITION (сложение). Поэтому использование языка низкого уровня существенно упрощает написание
и чтение программ (по сравнению с программированием в машинных кодах). Язык низкого уровня
привязан к конкретному процессору. Например, если вы написали программу на языке низкого
уровня для процессора PIC, то можете быть уверены, что она не будет работать с процессором AVR.
Язык программирования высокого уровня – это язык программирования,
максимально приближённый к человеческому языку (обычно к английскому, но есть языки
программирования на национальных языках, например, язык 1С основан на русском языке).
Язык высокого уровня практически не привязан ни к конкретному процессору, ни к
операционной системе (если не используются специфические директивы).
Язык ассемблера – это низкоуровневый язык программирования, на котором
вы пишите свои программы. Для каждого процессора существует свой язык ассемблера.
Ассемблер – это специальная программа, которая преобразует (компилирует)
исходные тексты вашей программы, написанной на языке ассемблера, в исполняемый файл (файл
с расширением EXE или COM). Если быть точным, то для создания исполняемого файла требуются
дополнительные программы, а не только ассемблер. Но об этом позже…
В большинстве случаев говорят «ассемблер», а подразумевают «язык ассемблера». Теперь
вы знаете, что это разные вещи и так говорить не совсем правильно. Хотя все программисты
вас поймут.
ВАЖНО!
В отличие от языков высокого уровня, таких, как
Паскаль,
Бейсик и т.п., для
КАЖДОГО АССЕМБЛЕРА существует СВОЙ ЯЗЫК АССЕМБЛЕРА. Это правило в корне отличает язык
ассемблера от языков высокого уровня. Исходные тексты программы (или просто «исходники»),
написанной на языке высокого уровня, вы в большинстве случаев можете откомпилировать
разными компиляторами для разных процессоров и разных операционных систем.
С ассемблерными исходниками это сделать будет намного сложнее. Конечно, эта разница
почти не ощутима для разных ассемблеров, которые предназначены для одинаковых процессоров.
Но в том то и дело, что для КАЖДОГО ПРОЦЕССОРА существует СВОЙ АССЕМБЛЕР и
СВОЙ ЯЗЫК АССЕМБЛЕРА. В этом смысле программировать на языках высокого уровня гораздо проще.
Однако за все удовольствия надо платить. В случае с языками высокого уровня мы можем
столкнуться с такими вещами как больший размер исполняемого файла, худшее быстродействие и т.п.
В этой книге мы будем говорить только о программировании для компьютеров с процессорами
Intel (или совместимыми). Для того чтобы на практике проверить приведённые в книге примеры,
вам потребуются следующие программы (или хотя бы некоторые из них):
- Emu8086. Хорошая программа, особенно для новичков. Включает в себя редактор исходного
кода и некоторые другие полезные вещи. Работает в Windows, хотя программы пишутся под DOS.
К сожалению, программа стоит денег (но оно того стоит))). Подробности см. на сайте
http://www.emu8086.com.
- TASM – Турбо Ассемблер от фирмы Borland. Можно создавать программы как для DOS так и для
Windows. Тоже стоит денег и в данный момент уже не поддерживается (да и фирмы Borland уже
не существует). А вообще вещь хорошая.
- MASM – Ассемблер от компании Microsoft (расшифровывается как МАКРО ассемблер, а не
Microsoft Assembler, как думают многие непосвящённые). Пожалуй, самый популярный ассемблер
для процессоров Intel. Поддерживается до сих пор. Условно бесплатная программа. То есть,
если вы будете покупать её отдельно, то она будет стоить денег. Но она доступна бесплатно
подписчикам MSDN и входит в пакет программ Visual Studio от Microsoft.
- WASM – ассемблер от компании Watcom. Как и все другие, обладает преимуществами и
недостатками.
- Debug - обладает скромными возможностями, но имеет большой плюс - входит в стандартный
набор Windows. Поищите ее в папке WINDOWS\COMMAND или WINDOWS\SYSTEM32. Если не найдете,
тогда в других папках каталога WINDOWS.
- Желательно также иметь какой-нибудь
шестнадцатеричный редактор. Не
помешает и досовский файловый менеджер, например Волков Коммандер (VC) или Нортон Коммандер
(NC). С их помощью можно также посмотреть шестнадцатеричные коды файла, но редактировать
нельзя. Бесплатных шестнадцатеричных редакторов в Интернете довольно много. Вот один из них:
McAfee FileInsight v2.1. Этот же редактор можно использовать для работы с исходными текстами программ. Однако мне больше нравится делать это с помощью следующего редактора:
- Текстовый редактор. Необходим для написания исходных текстов ваших программ. Могу
порекомендовать бесплатный редактор
PSPad, который поддерживает множество языков
программирования, в том числе и язык Ассемблера.
Все представленные в этой книге программы (и примеры программ) проверены на работоспособность.
И именно эти программы используются для реализации примеров программ, приведённых в данной
книге.
И еще – исходный код, написанный, например для Emu8086, будет немного отличаться от кода,
написанного, например, для TASM. Эти отличия будут оговорены.
Большая часть программ, приведённых в книге, написана для MASM. Во-первых, потому что
этот ассемблер наиболее популярен и до сих пор поддерживается. Во-вторых, потому что он
поставляется с MSDN и с пакетом программ Visual Studio от Microsoft. Ну и в третьих, потому
что я являюсь счастливым обладателем лицензионной копии MASM.
Если же у вас уже есть какой-либо ассемблер, не вошедший в перечисленный выше список,
то вам придётся самостоятельно разобраться с его синтаксисом и почитать руководство
пользователя, чтобы научиться правильно с ним работать. Но общие рекомендации, приведённые
в данной книге, будут справедливы для любых (ну или почти для любых) ассемблеров.