Классификация предложений языка Ассемблер
· Многострочные комментарии. Это единственная конструкция Ассемблера, которая может занимать несколько строк текста программы. Будем для унификации терминов считать её неким частным типом предложения, хотя не все авторы учебников по Ассемблеру придерживаются этой точки зрения. Способ записи этих комментариев:
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
Другим примером может служить строка-комментарий, такие строки начинаются с символа точки с запятой, перед которой могут стоять только символы пробелов:
; это строка-комментарий
Дата добавления: 2015-10-05; просмотров: 1241;