Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Баула.doc
Скачиваний:
147
Добавлен:
11.02.2016
Размер:
2.08 Mб
Скачать

7.3. Классификация предложений языка Ассемблер

  • Многострочные комментарии.Это единственная конструкция Ассемблера, которая может занимать несколько строк текста программы. Будем для унификации терминов считать её неким частным типом предложения, хотя не все авторы учебников по Ассемблеру придерживаются этой точки зрения. Способ записи этих комментариев:

COMMENT *

< строки – комментарии >

*

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

  • Команды. Почти каждому такому предложению языка Ассемблера будет соответствовать одна команде на языке машины (в редких случаях получаются две "тесно связанных" команды). Как уже отмечалось, вне описания сегмента такое предложение встречаться не может.

  • Резервирование памяти.Эти предложения отводят в том сегменте, где они записаны, области памяти для хранения переменных. Это некоторый аналог описания переменных языка Паскаль. Способ записи таких предложений надо посмотреть в учебнике [5], мы приведём лишь некоторые примеры с комментариями.

Предложение

Количество памяти

A db ?

1 байт

B dw ?

2 байта (слово)

C dd ?

4 байта (двойное слово)

В этих примерах описаны переменные с именами A,B и C разной длины, которые, как мы уже привыкли в языке Паскаль, не будут иметь конкретных начальных значений, что отмечено символом вопросительного знака. Однако, но принципу Фон Неймана ничто не мешает нам работать напрямую с одним или несколькими байтами, расположенными в любом месте памяти. Например, команда

mov ax,B+1

будет читать на регистр axслово,второйбайт которого располагается в конце переменнойB, апервый– в начале переменнойC(помним о "перевёрнутом" хранении слов в памяти!). Поэтому следует быть осторожными и не считатьA,BиCотдельными, "независимыми" переменными в смысле языка Паскаль, это просто именованные области памяти. Разумеется, в понятно написанной программе эти области используются так, как они описаны с помощью присвоенных им имён.

Предложение

D dw 20 dup (?)

резервирует в сегменте 20подряд расположенных слов с неопределёнными начальными значениями. Это можно назвать резервированием памяти под массив из 20 элементов, но при этом мы также не теряем возможности работать с произвольными байтами и словами из области памяти, зарезервированной под массив.

  • Директивы или команды Ассемблеру. Эти предложения, как уже упоминалось, не порождают в машинной программе никакого кода, т.е. команд или переменных (редким исключением является директиваinclude, о которой мы будем говорить при написании полных программ). Директивы используются программистом для того, чтобы давать программе Ассемблер определённые указания, управлять работой Ассемблера при компиляции (переводе) программы на язык машины. В качестве примера рассмотрим директивы объявления начала и конца описания сегмента с именем A:

A segment

...

A ends

Частным случаем директивы является и предложение-метка, она приписывает имя (метку) следующему за ней предложению. Так, в приведённом ниже примере метка Next_Statement_Nameявляется именем следующего за ней предложения, таким образом, у этого предложения две метки:

Next_Statement_Name:

L: mov ax,2

  • Макрокоманды.Этот класс предложений Ассемблера относится кмакросредствамязыка, и будут подробно изучаться далее в нашем курсе. Пока лишь скажем, что на место макрокоманды по определённым правилам подставляется некоторый набор (возможно и пустой) предложений Ассемблера.

Теперь рассмотрим структуру одного предложения. За редким исключением, каждое предложение может содержать от одного до четырёх полей: полеметки, полекода операции,полеоперандови полекомментария(как обычно, квадратные скобки указывают на необязательность заключённой в них конструкции):

[<метка>[:]] КОП [<операнды>] [; комментарий]

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

В очень редких случаях предложения языка Ассемблера имеют другую структуру, например, директиваприсваивания значенияпеременной периода генерации(с этими переменными мы познакомимся при изучении макросредств языка):

K = K+1

Другим примером может служить строка-комментарий, такие строки начинаются с символа точки с запятой, перед которой могут стоять только символы пробелов:

; это строка-комментарий