Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Счетчик команд IP (instruction pointer
Указатель инструкций (регистр IP) всегда содержит смещение в памяти, по которому хранится следующая выполняемая инструкция. Когда выполняется одна инструкция, указатель инструкций перемещается таким образом, чтобы указывать на адрес памяти, где хранится следующая инструкция. Значение счетчика инструкций нельзя прочитать или записать непосредственно. Загрузить в указатель инструкций новое значение может только специальная инструкция перехода. Указатель инструкций IP сам по себе не определяет адрес, по которому находится следующая выполняемая инструкция. Для извлечения инструкции используется регистр CS, где хранится базовый адрес, при этом указатель инструкций задает смещение относительно этого базового адреса. . Примеры адресации Адрес команды в сегменте кода имеет вид: [CS]: [ смещение] Линейный или физический адрес вычисляется по формуле (CS) * 16 + смещение 16-разрядный регистр, содержит смещение текущей команды относительно регистра CS Адрес операнда из сегмента данных имеет вид: [DS]: [смещение] Адрес операнда из дополнительного сегмента данных: [ES]: [смещение]
Линейные или физические адреса вычисляются по формулам: (DS) * 16 + смещение (ES) * 16 + смещение Адресация сегмента стека В программе всегда только один сегмент стека Стек - это область памяти, в которой можно сохранять значения и из которой они могут затем извлекаться по дисциплине " последний пришел- первый ушел" (LIFO). То есть последнее сохраненное в стеке значение будет первым значением, которое вы получите при чтении из стека. Классической аналогией стека является стопка тарелок. Поскольку тарелки можно класть только сверху стопки (и брать также), то первая положенная тарелка будет последней, которую вы сможете взять. Доступ к элементам стека происходит с помощью двух регистров SP и BP Регистр SP (stack pointer) - 16 разрядный регистр, называется также указателем текущей вершины стека. Регистр SP в начале работы программы имеет значение объема стека( максимальное значение). При каждом занесении данных в стек регистр SP автоматически уменьшается на 2 (длина слова). Текущая вершина стека имеет адрес [SS]: [ SP]; действительный адрес вычисляется по формуле [ss]*16+[sp]. Как и в случае стопки тарелок, вершина стека - это то место, в котором в стеке сохраняется последнее помещенное туда значение. Действие, состоящее в занесении значений в стек, называют также " заталкиванием" (pushing) в стек. В самом деле, инструкция PUSH используется для занесения значений в стек. Аналогично, действие, состоящее в извлечении (выборке) значений из стека, называют также " выталкиванием" (popping) из стека (для этого используется инструкция POP). При выталкивании слова из стека регистр SP увеличивается на 2. Регистр ВР - basa pointer служит для косвенной адресации и доступа к содержимому стека без разрушения стека (выталкивания данных из стека). Регистр SP копируется в регистр BP, адрес [SS] [BP+2] обеспечит доступ к содержимому стека, расположенному на 2 байта дальше вершины стека. Индексные регистры Регистр SI (Source Index). Этот 16-разрядный регистр является индексом источника, обычно он используется в паре [DS]: [SI] для выполнения операций над цепочками символов или строк. Регистр DI (Destination Index ). Этот 16-разрядный регистр является индексом назначения или приемника, обычно он используется в паре [ES]: [ DI] также для строковых операций.. Оба регистра можно применять в арифметических операциях. Индексные регистры используются при работе с таблицами данных, где доступ к отдельному элементу обеспечен с помощью расширенной индексной адресации операндов. Регистры SI и DI не могут использоваться одновременно при формировании одного адреса. Регистр флагов Регистр флагов сигнализирует процессору о его состоянии, о том, как выполнилась арифметическая или логическая команда. Девять из 16 битов регистра флагов являются активными. Флаг – это бит, принимающий значение 1, если он установлен, и 0, если он сброшен. За битами регистра флагов закреплены соответствующие имена.
Таблица Назначение битов регистра флагов.
. Регистр флагов не считывается и не модифицируется непосредственно.
ЛЕКЦИЯ №1 Язык Ассемблера МП 8080. Основные операторы.
Алфавит языка ассемблера составляют следующие символы: § Все латинские буквы от а до z, A..Z ( большие и малые не различаются0 § Цифры: 0 –9 § Спец. знаки: @, $, _, &. § Разделители: :, ., [ ], ( ), {}, ; , ^ § Знаки операций: +, -, /, *, %, =, |, “ ”, #, \. Лексемы – минимальная неделимая единица языка, цепочка символов. Имена, используемые со знаками _,?, @, $.Ключевые слова. Константы Имена - это названия сегментов и переменных, метки команд. Ключевые слова – это директивы языка, названия регистров, мнемокоды машинных команд, операции в выражениях: Shr, shl, type, dup и др. Length, size, offset, и др. Константы – это числа и строки. Числовые константы могут быть заданы в 2-, 10-, 16-системах исчисления. Тип константы указывается с помощью символа - концом числа за последней цифрой. Пример: Константа 10 двоичная система исчисления - 1010В десятичная система исчисления - 10{T} шестнадцатеричная система исчисления - 0AH В 16-ной системе исчисления константу начинают с нуля( 0 ). Количество цифр в константе ограничивается форматом данных, где используется эта константа. Пример: MOV AH, 11111111B MOV BX, 0C5H; C516=110001012 Символьные константы это цепочка любых символов, заключенная в кавычки: `ТЕКСТ `; ”ТЕКСТ”. Количество символов в цепочке также зависит от формата данных, где она используется: MOV AH, `A`; константа длиной в байт MOV AX, `AA`; константа длиной в слово
Структура оператора Каждый оператор занимает одну строку. Операторы могут быть трех видов: комментарий, директива и машинная команда. комментарий -; не транслируется. Директива не порождает машинную команду, она является указанием для транслятора о сегментации программы, о структуре листинга (объект кода), о резервировании и инициализации полей данных. Квадратные скобки в формате директивы означают, что данная часть может отсутствовать в некоторых директивах. [имя ] директива [ параметры ] DSEG SEGMENT PARA; директива начала сегмента Оператор машинная команда
[метка: ] мнемокод [операнды ] Поле имя и поле операнды могут отсутствовать в некоторых командах. Оператор машинной команды порождает одну машинную команду. Длина команды от 1 + до 6 байт (зависит от вида операции, (кода команды) и от способа адресации оперативной памяти).
Директивы языка Ассемблера Директивы сегментации программы. Сегменты программы должны описываться с помощью директивы SEGMENT, указывающей имя сегмента, используемое для ссылок в программе, границу выравнивания (байт, слово, параграф, страница), тип комбинации его с другими сегментами, класс сегмента, определяющий порядок следования сегмента в памятиДиректива SEGMENT открывает сегмент. Любой код или данные, следующие за ней, будут помещаться в указанный сегмент до тех пор, пока не встретится директива ENDS, закрывающая сегмент. имя SEGMENT [ атрибуты ] Имя сегмента — обычно используется идентификатор, из которого можно сделать вывод о характере данных, содержащихся в сегменте. Атрибуты могут состоять из одного или нескольких следующих значений: Комбинации сегмента, класса сегмента, выравнивания сегмента, размера сегмента, доступа к сегменту. Во время трансляции Turbo Assembler рассматривает атрибуты, указанные в директиве SEGMENT, слева направо. Атрибут комбинации сегмента предназначен для указания компоновщику, каким образом объединять сегменты, находящиеся в разных модулях и имеющие одинаковые имена. Популярное:
|
Последнее изменение этой страницы: 2016-04-11; Просмотров: 1538; Нарушение авторского права страницы