Числа — только целые
Глава 14 Элементы программирования на языке ассемблера
После изучения данной главы вы должны знать:
- назначение и области использования языка Ассемблера;
- основные компоненты языка;
- основные команды, директивы, модификаторы;
- адресацию регистров МПП и ячеек памяти в ассемблере;
- программирование процедур вывода информации на дисплей и ввода информации с клавиатуры;
- структуру ассемблерной программы;
- процедуры формирования программы формата EXE;
- назначение, команды и варианты использования отладчика программ Debug.
Пользователь компьютера, равно как и прикладной программист, программы составляет, как правило, на машинно-независимом алгоритмическом языке высокого уровня (Basic, Pascal, FORTRAN, C, PROLOG и т. д.), однако иметь представление об основах программирования и на машинно-ориентированных языках грамотному пользователю весьма полезно для:
l лучшего понимания архитектуры ПК и более грамотного использования компьютеров; для разработки более рациональных структур алгоритмов и программ решения прикладных задач;
l возможности просмотра и корректировки исполняемых программ с расширениями EXE и COM, компилированных с любых языков высокого уровня, в случае утраты исходных программ (вызвав указанные программы в отладчик программ DEBUG и деассемблировав их, можно получить их отображение на языке ассемблера);
l составления программ решения наиболее ответственных задач (программа, подготовленная на машинно-ориентированном языке, обычно эффективнее (короче и быстрее на 30–60%) программ, полученных в результате трансляции с языков высокого уровня) и для реализации процедур, включаемых в основную программу в виде отдельных фрагментов в том случае, если они не могут быть реализованы ни на используемом языке высокого уровня, ни с помощью служебных процедур операционной системы.
Основные компоненты языка ассемблер
Алфавит языка
Алфавит языка составляют символы ASCII:
l буквы от А до Z (или от а до z, строчные и прописные буквы в ассемблере не различаются);
l цифры от 0 до 9;
l специальные символы: @, $, ?, ., _,–, +, *, ', “, ; ,: и т. д.
Из букв, цифр и символов: @, $, ?, ., _ формируются:
l простые сообщения: имена (идентификаторы) процедур (подпрограмм), переменных, директив, команд (метки), значения констант и переменных;
l составные сообщения: команды (операторы);
l директивы (псевдооператоры), модификаторы (операции) и т. д.
Имена меток, переменных, идентификаторов могут быть длиной до 31 символа и начинаться должны обязательно не с цифры.
Константы (числа и строки)
Числа — только целые
Различают:
l двоичные числа; заканчиваются буквой В;
l десятичные числа; без специального окончания или заканчиваются буквой D;
l шестнадцатеричные числа; заканчиваются буквой Н.
Для обозначения цифр 10, 11, 12, 13, 14, 15 в шестнадцатеричной системе счисления используются, соответственно, буквы A, B, C, D, E, F; но начинаться шестнадцатеричные числа должны обязательно с цифры, например: выражение F19Н — не число, а идентификатор, правильно число надо записать так: 0F19Н.
Запись отрицательных чисел:
l десятичные числа записываются обычным образом, просто со знаком: –32, –32D;
l двоичные числа записываются только в дополнительном модифицированном коде: –32D ® 11.100000B, –19D ® 11.01101B;
l шестнадцатеричные числа записываются только в дополнительном коде: –32D выглядит как 1.E0H, –119D — как 1.89H.
Строки (литералы)
Строки символов: включают в себя любые буквы, цифры и символы, но заключаются в кавычки: "ПЭВМ IBM PC с микропроцессором 80386".
Команды (операторы)
Формат команды:
[Метка [:]] КОП [Операнд] [,Операнд] [;Комментарий].
Между элементами команды вставлены пробелы.
Здесь и далее элементы, заключенные в квадратные скобки, необязательны.
КОП (Код ОПератора) — мнемокод команды (состоит из 2–6 букв). Может быть до 256 различных кодов (в ассемблере IBM PC их число изменяется в зависимости от типа МП. Например: 133 в МП 8088, 240 в МП 80386).
Операнд — явно заданный адрес (прямой или косвенный); имя метки, переменной; само значение переменной; ассоциативный признак и т. п. Количество необходимых в команде операндов ассемблер узнает по КОП. В большинстве двухадресных команд присутствуют операнды приемника (dst — destination) и источника (src — source); источник не изменяет своего содержания, в приемнике 1-е число, участвующее в операции, заменяется результатом.
Метка — имя команды ассемблера для ссылки (обращения) к этой команде (до 31 символа). Двоеточие, стоящее после метки, означает, что метка всегда находится в текущем сегменте памяти.
Комментарий—любой текст, поясняющий человеку программу (не воспринимается ассемблером, но выводится в листинге).
Директивы (псевдооператоры)
Директивы, в отличие от команд, выполняются только в процессе ассемблирования (трансляции) программы, а не в ходе решения задачи на компьютере. То есть команды — это инструкции машине, а директивы — это инструкции ассемблеру (транслятору).
Формат директивы:
[Идентификатор] КПОП [Операнд] [,Операнд]... [;Комментарий]
Как и в случае команд, поле директивы может начинаться в любом месте строки программы при условии, что оно отделено от предыдущего поля хотя бы одним пробелом.
Идентификатор — имя директивы (для обращения к ней).
КПОП (Код ПсевдоОПератора) — мнемокод директивы (состоит из 2–7 букв).
Операнды—их в директиве может быть много; это уже не только адреса, но и различные процедуры. В операндах могут быть записаны простые выражения, использующие модификаторы (операции).
Модификаторы
В операторах и псевдооператорах языка ассемблер иногда используются модификаторы, которые определяют ту или иную операцию, учитываемую при трансляции программы. Существует 5 видов модификаторов: арифметические, логические, отношений, возвращения значений и присваивания атрибутов. Наиболее часто используются модификаторы (mdf):
l Арифметические модификаторы: «+» — сложить, «-» — вычесть, «*» — умножить, «/» — разделить, mod — остаток от деления и т. д. Формат: opr mdf opr.
l Логические модификаторы: and — «и», or — «или», not — «не», и xor — исключающее «или». Формат: opr mdf opr.
l Модификаторы отношения: eq — совпадения, nq — несовпадения, lt — меньше, gt — больше, le — меньше или равно, ge — больше или равно. Формат: opr mdf opr.
l Модификаторы, возвращающие значения:
l $ — возвращает значение смещения адреса текущего оператора;
l seg — возвращает адрес сегмента адреса метки или переменной;
l offset — возвращает смещение адреса метки или переменной;
l length — возвращает длину операнда в единицах определения (байтах или словах);
l type — возвращает атрибут типа переменной (1, если byte; 2 — word, 3 — dword) или метки (1 — near, 3 — far);
l size — возвращает произведение length*type. Формат: mdf opr.
l Модификаторы присваивания атрибута:
l ptr — изменяет атрибут типа (byte, word или dword) операнда или атрибут дистанции (near или far) адресного операнда. Формат: тип ptr opr. (Здесь: тип — новый атрибут, opr — идентификатор операнда, чей атрибут должен быть изменен.);
l ds:, es:, cs:, ss: — изменяет атрибут сегмента адреса. Формат: rsegm:адрес. (Адрес может быть задан именем сегмента, переменной, меткой или адресным выражением.);
l short — дополняет атрибут near метки оператора переxoда, указывает, что переход осуществляется на расстояние не более ±128 байтов от текущей команды. Формат: short метка;
l high — возвращает старший байт 16-битового значения opr. Формат: high opr;
l low — возвращает младший байт 16-битового значения opr. Формат: low opr.
В программах используются:
l атрибуты дистанции:
l near — близкий, в пределах одного сегмента;
l far — далекий, за пределами одного сегмента;
l атрибуты типа данных:
l byte — длиной 1 байт;
l word — длиной 2 байта;
l dword — длиной 4 байта.
Дата добавления: 2016-04-02; просмотров: 1124;