Синаксис языка ассемблера

Машинный язык и язык Ассемблера

Мы уже видели, как из нулей и единиц, хранимых в ЭВМ, формируются числа. Теперь мы посмотрим как комбинации тех же значений 0 и 1 могут быть использованы для программирования компьютера.

Машинная программа представляет собой последовательность команд (инструкций). Эти команды объясняют компьютеру, что он должен делать. Это похоже на рецепты в кулинарной книге. В рецепте имеется описание действий, которые необходимы для приготовления определенного блюда. Подобным образом, компьютер имеет последовательность команд, которые точно описывают ему последовательность действий. Этот набор команд называется программой. Процесс построения корректного набора команд называют программированием компьютера. В нашей аналогии с рецептом рецепт является программой, а тот кто его написал — программистом. Роль компьютера здесь играет повар, готовящий еду.

Реальная программа, которую выполняет компьютер, это последовательность едениц и нулей связанных с памятью компьютера. Эту строку бит принято называть машинным языком. Машинный язык — это тот язык который машина понимает. Компьютер извлекает команды машинного языка из памяти точно определенным способом. Затем компьютер выполняет команду, обозначенную данной конфигурацией бит. Этот цикл извлечения и исполнения будет разобран в одном из последующих разделов данной главы.

Однако машинный язык мало о чем говорит людям. Если вы хотите сложить два числа в 8088 (например, содержимое регистров AX BX — краткое описание регистров сейчас последует), команда будет выглядеть таким образом:

0000001111000011B (или 03C3H)

Эти два байта точно указывают компьютеру какую опреацию произвести. Аналогично, для вычитания двух чисел (вычитание регистра BX из регистра AX) мы будем иметь в машинном языке

0010101111000011B (или 2BC3H)

Здесь необходимо коротко пояснить, что такое регистры, поскольку в обсуждении основ работы 8088 с ними приходится чато сталкиваться. Регистр — это часть процессора, предназанченная для сохранения данных. К данным, сохраненным в регистре, процессор получает доступ очень быстро — намного быстрее, чем к данным, хранимым в памяти. Возможно еще специальное использование регистров в некоторых командах. В третьей главе будет дано полное описание регистров 8088. Хотя машинный язык — это действительно прекрасно, если вы являетесь компьютером, он труден для программистов — людей. К счастью, существует более простой способ программирования. Этим методом, более близким людям, чем машинам, является программирование на языке ассемблера.

Язык ассемблера, как язык программирования, т.е. более понятный программисту, чем машинный, язык, все еще сохраняет все значения машинного языка. Компьютер читает программы на языке ассемблера и переводит их в машинный язык, в ту форму, которая понятна ЭВМ. Этот процесс, называемый ассемблированием программы, фактически является переводом с одного языка на другой. Операцию перевода с языка ассемблера на машинный язык выполняет программа, называемая ассемблером.

Чтобы лучше понять разницу, давайте взглянем на примеры, которыми мы уже пользовались выше. Ассемблерная команда для сложения содержимого регистров AX и BX проста:

ADD AX,BX

Аналогично, для вычитания регистра BX из регистра AX мы напишем:

SUB AX,BX

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

Язык ассемблера не похож на языки типа Фортран, Кобол или Паскаль. Эти языки, как и многие подобные им, являются языками высокого уровня. Языки высокого уровня разработаны для того, чтобы можно было иметь дело непосредственно с задачей, решаемой программой. В этом качестве они иногда называются процедурными языками, поскольку описывают процедуру, используемую для решения задачи. Языки высокого уровня машинно-независимы. Программа, написанная на Фортране для IBM PC будет правильно работать и давать те же самые результаты при выполнении на IBM/370. язык программирования не зависит от машины.

Програмы же на языке ассемблера непосредственно относятся к той машине, на которой они должны выполняться. Язык ассемблера машиннозависимый. Язык ассемблера для IBM PC принципиально отличен от языка ассемблера для IBM/370. Это связано с тем, что команды языка ассемблера почти один к одному переводятся в команды машинного языка т.е. каждая команда языка ассемблера обычно преобразуется точно в одну команду машинного языка. Поскольку машинные языки разных компьютеров различны, то различаются и языки ассемблера. Обычно каждое утверждение языка ассемблера генерирует одну команду машинного языка. В некоторых случаях это не так, потому что существуют команды, которые не являются частью выполняемой программы, а предназачены для ассемблера. Они описывают действия ассемблера, который должен выполнять их во время ассемблирования. Пример директивы ассемблеру (такой предназначенной только для него команды) —

TITLE Пример Программы

Эта инструкция сообщает ассемблеру заголовок программы. После трансляции ассемблером прграммы этот заголовок — Пример программы- появляется в верхней части каждой страницы сообщений ассемблера. Эта инструкция имеет смысл только для ассемблера. В 8088 нет команды, которая могла бы выполнить эту операцию.

Синаксис языка Ассемблера

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

Команда языка ассемблера состоит из четырех частей. Фиг. 2.8 показывает типичную команду ассемблера и названия этих частей.

———————————————————PART1: ADD AX,BX ;Добавить к длине буфераМетка ОпКод Операнды Комментарий——————————————————— Фиг. 2.8 Синтаксис языка ассемблера

Единственная обязательная часть команды языка ассемблера — ОпКод (сокращение от ОПерационный КОД). Программисты иногда называют машинные команды кодами операций. Операционный код в утверждении языка асемблера определяет, какую операцию должен будет выполнить процессор, в нашем примере — операцию сложения (по английски — add — прим. перев.).

Поле операндов содержит дополнительную информацию о команде, например, какие значения участвуют в операции. Поле операндов определяется операционным кодом. Каждому коду операции должно соответствовать определенное число операндов. Для команды ADD требуется два операнда; операция перемены знака (NEG) обходится лишь одним, а для некоторых команд, например, команды десятичной коррекции DAA, операнды не нужны. В главе 4 описаны эти команды и их операнды.

Метка и комментарий необязательны в команде. Поле метки позволяет обозначить какое-либо конкретное место в памяти компьютера. Собственный адрес имеется у любого участка памяти, но выделить адрес какой либо команды трудно, если вообще возможно. Метка позволяет идентифицировать определенное место в памяти заданным программистом именем. Говоря технически, поле метки содержит символический указатель расположения команды. Если мы хотим обратиться к этой команде позднее, то мы делаем это через символьное имя и нам не требуетсся указывать абсолютное расположение данной инструкции. Использование меток — одна из причин предпочтительности языка ассемблера перед машинным языком. Превращением же символических имен в реальные адреса ведает ассемблер.

Поле комментариев служит для удобства программиста. Программист может использовать это поле для сообщения дополнительной информации о команде. Комментарий не обязательно жестко связан с командой. Вы можете отвести под комментарий целую строку, поставив в ее начале символ ;. Это позвляет программисту в ключить в листинг ассемблера блок собственной информации, к примеру, описание используемого алгоритма.

У каждого есть собственное представление о том, как следует комментировать программы, и вы наверняка тоже скоро выработаете свое. Как правило, вы будете пытаться включать в них информацию, которая относится непосредственно к решаемой проблеме. В приведенном примере было бы бессмысленно комментировать команду чем-нибудь вроде сложить AX и BX. Это не более, чем повторение операционного кода и операндов (разве что в переводе с английского — прим.перев.). Если уж вы намерены связаться с комментариями, то делайте их достойными труда их написания и чтения.

NASM. Первая программа. Урок 1


Похожие статьи.

Понравилась статья? Поделиться с друзьями: