
- •Трансляция программы
- •Компоновка программы
- •Система команд микропроцессора
- •32 Разрядные регистры:
- •Целочисленные арифметические команды
- •Особенности реализации микропроцессоров
- •Регистры: пользовательские и системные
- •Программа на языке ассемблера
- •Цепочечные команды
- •Осуществление переходов
- •Счётчик адреса команд
- •Безусловные переходы
- •Команда безусловного перехода jmp
- •Защищённый режим работы микропроцессора
- •Регистры управления
- •Регистры системных адресов
- •Сложные структуры данных
- •Доступ к элементам массива
- •Двумерные массивы
- •Структура
- •Сложные структуры данных 2
- •Методы работы со структурой
- •Объединение
- •Модульное программирование -1
- •Технологии программирования
- •Процедуры в языке ассемблера
- •Модульное программирование – 2 Передача аргумента через регистр
- •Передача аргументов через общую область памяти
- •Передача аргументов через стек
- •Связь ассемблера с языками высокого уровня
- •Макросредства языка ассемблера
- •Создание Windows приложений на ассемблере
- •Процесс производства микропроцессора
Осуществление переходов
Обычно в программе есть точки, в которых будет приниматься решение о том какая команда будет применятся следующая. Это решение может быть 2х видов:
Безусловный – в данной точке нужно передать управление не той команде которая идёт следующая, другой, которая находится на некотором удалении.
Условный – решение о том, какая команда будет выполнятся следующей принимается на основе анализа некоторых условий.
Микропроцессор узнаёт о следующей команде по содержимому пары регистров cs, eip/ip
Cs – сегментный регистр кода, в котором находится физический базовый адрес текущего сегмента кода.
Eip/ip – регистр указателя команды, в котором находятся значения, представляющие собой смещение памяти следующей команды подлежащей выполнению относительно начала текущего сегмента кода.
Таким образом команды передачи управления изменяют значения регистров, в результате чего микропроцессор выполняет переход к другому участку программы. Конвейер внутри микропроцессора при этом сбрасывается.
По принципу действия команды микропроцессора, обеспечивающие организацию перехода, можно разделить на 3 группы:
Команды безусловной передачи управления
Команда безусловного перехода
Вызов процедуры и возврат из процедуры
Вызов программ прерываний и возврат из программы прерываний
Команды условной передачи управления
Команды перехода по результате команды сравнения
Команды перехода по состоянию определённого флага
Команды перехода по состоянию регистра ecx/cx
Команды управления циклом
Команды организации цикла со счётчиком ecx/cx
Команда организации цикла со счётчиком ecx/cx с возможностью досрочного выхода из цикла по дополнительному условию
Метка – это символическое имя обозначающее определённую ячейку памяти, предназначенную для использования в качестве операндов в командах передачи управления.
Транслятор ассемблера присваивает метке 3 атрибута:
Имя сегмента кода где описана метка.
Смещение – это расстояние в байтах от начала сегмента кода, в котором описана метка
Тип метки или атрибут расстояния
Near – это переход на эту метку возможен только в пределах сегмента кода где описана метка. Физически это означает, что для перехода на метку достаточно лишь изменить содержимое регистра eip/ip.
far – переход на метку возможен только в результате межсегментной передачи управления, осуществить которую возможно только с помощью изменения как содержимого eip/ip так и регистра cs
Метку можно определить 2 способами:
Оператором «:» - с помощью этого способа можно определить метку только ближнего типа. Символическое имя может быть определенно в программе только 1 раз. Определённую таким образом метку можно использовать в качестве операндов в командах условного перехода jcc и в командах безусловного перехода jmp или call. Команды должны находится в сегменте кода, где описана метка.
С помощью директивы «label». Её часто используют либо для объявления идентификатора заданного типа, либо для организации доступа к одной области памяти, как к области содержащей данные разных типов
Метка может быть только одного вида: либо near, либо far.