Бройдо В.Л. Вычислительные системы, сети и телекоммуникации (2002) (1186248), страница 66
Текст из файла (страница 66)
В работе [101 приведен список прерываний нижнего и верхнего уровня, а также служебных функций Р08 наиболее часто используемого программистами прерывани я 21 Н. Адресация регистров и ячеек памяти в ПК Адресация операндов в команлах программы может быть: гз непосредственной; гз прямой; гз косвенной; сз ассоциативной; гз неявной. Непосредственная адресация заключается в указании в команде самого значения операнла, а не его адреса. Прямая адресация состоит в указании в команде непосредственно абсолютного или исполнительного адреса операнда. гв1 Адресация регистров и ячеек памяти в ПК Косвенная адрвсация'имеет в виду указание в команде регистра(ов) или ячейки памяти, в которых находятся абсолютный, исполнительный адрес операнда или их составляюгцие. Ассоциативная адресация — указание в команде не адреса, а идентифицирующего содержательного признака опсранда, подлежащего выборке (используется в ассоциативных запоминающих устройствах).
Нвявная адрвсация — адрсса операнда в команде нс указанно, но он полразумсвается кодом операции. Адресация ячеек основной памяти ПК имеет две важные разновидности: относительную и стоковую. Относительная адресация Абсолютный (А„, ) адрес формируется как сумма адресов исполнительного (А„,„) и сегментного (А„, ): А„, =А„,„+А„„в где А.н — 20-битовый начальный адрес сегмента, который является увеличенным в 16 раз (сдвинутым на четыре бита влево) 16-битовым адресом ссгмснта А,'„„, хранящемся в одном из 16-бнтных сегментных регистров. Начальный адрес сегмента в таком варианте всегда кратен 16, и он может быть полностью идентифицирован значением А,'„„(ссгмснт всегда состоит из целого числа параграфов, а параграф равен 16 битам), то есть: 16-бнтовый исполнительный адрес может в ПК представлять собой сумму трех адресов: А„,,„= 16.
А„'.„= А;„„0000. где А,„„„, — 16-битовый адрес смешения относительно начала сегмента (или относительно базы, если есть Ам ); Аб — 16-битовый адрес смещения базы адреса операнда относительно начала сегмента; А„„, — адрес индекса (или просто индекс) — дополнительная составляющая адреса операнда, использующаяся часто при программировании циклических процессов с массивами и таблицами. Индекс должен быть непосредственно задан в соответствующем регистре МПП.
При адресации данных могут использоваться все составляющие адреса: А =А„,„+А„,„=А,.„,„+А,. „]+А,,„][+А„м], где А„,„= 16 А,',„„, А;„„берется из регистра РЗ по умолчанию или из регистра ПЯ, если зто указано в программе. Аб „и А„„,„берутся соответственно из регистров ВХ гвг Глава 9. П ограммное управление — основа автоматизации и индексных (51 или И!), а А,, „» в явном или неявном виде указываются в программе. При адресации команд программы могут использоваться только две составляющие адреса: А,' „берется из регистра СЗ, а А„„,„— из регистра 1Р. Стековая адресация В стековой памяти (стеке) доступ к ячейкам памяти не произвольнын, а по прин- ципу «последний записанный операнд первым считывается» (РП.О), А„, =А,.»„+[Аг„,„)+А,,„. 16-битный адрес сегмента А,'„„„берется из регистра 5Б, смещения относительно начала сегмента стека автоматически считываются из регистров ВР (смешение базы стека — А««) и ЯР (смешепие активной ячейки стека, в которую записывается или из которой считывается информация, — «вершины стека» относительно базы— А, „„).
В зашишенном (многопрограммном) режиме работы микропроцессора начальные адреса сегментов хранятся в дсскри игорных таблицах и имеют длину 24 или 32 бит (в зависимости от типа МП). В сегментных регистрах в этом режиме хранятся се.- лекторы, содержащие адресные ссылки на соответствующие дескрипторные таблицы. Элементы программирования на языке ассемблер Программы составляются, как правило, на машинно-независимом алгоритмическом языке высокого уровня (Ваз1с, Разса1, РОКТКАХ, С, РВ.ОЕОС и т.
д.). Представление об основах программирования на машинно-ориентированных языках полезно для: лучшего понимания архитектуры ПК и более грамотного использования комн пьютеров; для разработки более рациональных структур алгоритмов и программ решения прикладных задач; Ы возможности просмотра и корректировки исполняемых программ с расширениями .ехе и .сов, компилированных с любых языков высокого уровня, в случае утраты исходных программ (вызвав указанные программы в отладчик программ РЕВ(10 и декомпилировав их, можно получить их отображение на языке ассемблера); ь«составления программ решения наиболее ответственных задач (программа, составленная на машинно-ориентированном языке, обычно эффективнее (коро- газ Элементы программи овання на языке ассемблер че и быстрее процентов на 30-60) программ, полученных в результате трансляции с языков высокого уровня) и для реализации процедур, включаемых в основную программу в виде отдельных фрагментов в том случае, если они не могут быть реализованы ни на используемом языке высокого уровня, ни с использованием служебных процедур операционной системы.
Основные компоненты языка ассемблер Алфавит языка Алфавит языка составляют символы АНСИ: с1 буквы от А до Х (или от а до т, строчные и прописные буквы в ассемблере не различаются); о цифры от 0 до 9; О специальные символы: Ф, 3,?....—, +, *...;,: и т. д. Из букв, цифр и символов: О, 3,?, ., формируются: ьз простые сообшения: имена (идентификаторы) процедур (подпрограмм), переменных, директив, команд (метки), значения констант и переменных; о составные сообшения: команды (операторы); СЗ директивы (псевдооператоры), модификаторы (операции) и т.
д. Имена меток, переменных, идентификаторов могут быть длиной до 31 символа и начинаться должны обязательно не с цифры. Константы (числа и строки) Числа — только целые Различают: о двоичные числа; заканчиваются буквой В; о десятичные числа;.без спспиального окончания или заканчиваются буквой 1); о шестнадцатеричные числа; заканчиваются буквой Н. Для обозначения цифр 10, 11, 12, 13, 14, 15 в шестнадцатеричной системе счисления используются соответственно буквы А, В, С, 1), Е, Г; но начинаться шестнадцатеричные числа должны обязательно с цифры, например: выражение Г19Н— не число, а идентификатор, правильно число надо записать так: ОГ!9Н. Запись отрицательных чисел: о десятичные числа записываются обычным образом, просто со знаком: -32, -321); ь1 двоичные числа записываются только в дополнительном модифицированном коде: †3) -+ 11.100000В, -191) — э 11.01101В; шестнадцатеричные числа записываются только в дополнительном коде: -321) записывается как 1.ЕОН, -119Р записывается как 1.89Н.
284 Глава 9. П ограммное и авление — основа автоматизации Строки(литералы) Строки символов: включают любые буквы, цифры и символы, но заключаются в кавычки: "ПЭВМ 1ВМ РС с микропроцессором 80386". Команды (операторы) Формат команды: [натка [:11 КОП [Операнд! [,Операнд) [;Комнентарий1. Между элементами команды вставлены пробелы. Здесь и далее элементы, заключенные в квадратные скобки, необязательны.
КОП (Код Оператора) — мнемокод команды (состоит из 2-6 букв). Может быть до 256 различных колов (в ассемблере!ВМ РС их число изменяется в зависимости от типа МП. Наприьтер: 133 в МП 8088, 240 в МП 80386). Операнд — явно заданный адрес (прямой или косвенный); имя метки, переменнон; само значение переменной; ассоциативный признак и т. п.
Количество необходимых в команде операндов ассемблер узнает по КОП. В большинстве двухадресных команд присутствуют операнды приемник (ОК1 — йезсщааоп) и источник (агс — хоцгсе); источник не изменяет своего содержания, в приемнике 1-с число, участвующее в операции, заменяется результатом.
Метка — имя команды ассемблера для ссылки (обращения) к этой команде (до 31 символа). Двоеточие, стоящее после метки, означает, что метка всегда находится в текущем сегменте памяти. Кольнентарий — любой текст, поясняющий человеку программу (не воспринимается ассемблером, но выводится в листинге). Директивы (псевдооператоры) Директивы в отличие от команд выполняются только в процессе ассемблирования (трансляции) программы, а не в процессе решения задачи на компьютере.
То есть команды — это инструкции машине, а директивы — это инструкции ассемблеру(транслятору). Формат директивы; [иаентификатпр1 КПОП [Операнд) [,Операна1... (;Конментарий1 Как и в случае команд, поле директивы может начинаться в любом месте строки программы при условии, что оно отделено от предыдущего поля хотя бы одним пробелом.
Идентификатор — имя директивы (для обращения к ней). КПОП(Код ПсеадоОПератори) — мнемокод директивы (состоит из 2-7 букв). Операнды — их в директиве может быть много; это уже не только адреса, но и различные процедуры. В операндах могут быть записаны простые выражения, использующие модификаторы (операции). Модификаторы В операторах и псевдооператорах языка ассемблер иногда используются модификаторы, которые определяют ту или иную операцию, учитываемую при трансля- Элементы программирования на языке ассемблер 288 цни программы. Сушествует 5 видов модификаторов: арифметические, логические, отношений, возвращения значений и присваивания атрибутов. Наиболее часто используются модификаторы (пк1т): 0 Арифметические модификаторы: + — сложить, - — вычесть, * — умножить, /— разделить, еоо — остаток от деления и т.
д. Формат: орг пк1т орг. 0 Логические модификаторы: апП вЂ” «и», аг — «или», пот — «не» и хог — исключаюшее «или». Формат: орг вз1 орг. П Модификаторы отношения: ед — совладения, пд — несовпадения, 11 — меньше, дг — больше, 1е — меньше или равно, де — больше или равно. Формат: орг пх11 арг. сз Модификаторы, возвращающие значения: ° » — возвращает значение смешения адреса текущего оператора; ° зед — возвращает адрес сегмента адреса метки или переменнои; ° о11зес — возвращает смещение адреса метки или переменной; ° 1епдвб — возвращает длину операнда в единицах определения (байтах или словах) ° суре — возвращает атрибут типа переменной (1, сели ьут е; 2 — ного, 3 — оногс) или метки (1 — пеаг, 3 — 1аг); ° з1ге — возвращает произведение 1епдсп*суре.