- •Основы алгоритмизации и программирования
- •29 Декабря 2011, протокол № 4
- •Введение
- •Этапы развития эвм
- •Поколения эвм
- •Машинно-ориентированные языки программирования
- •Архитектура эвм
- •Микропроцессоры intel
- •Набор регистров
- •Регистры общего назначения
- •Сегментные регистры
- •Регистры состояния и управления
- •Организация памяти
- •Сегментная организация памяти
- •Типы данных
- •Символы
- •Целые числа
- •Указатель на память
- •Цепочки
- •Вещественые числа
- •Двоично-десятичные числа (bcd)
- •Формат команд
- •Обработка прерываний
- •Int тип_прерывания
- •Синтаксис ассемблера
- •Алфавит ассемблера
- •Директивы сегментации
- •Упрощённые директивы сегментации
- •Директивы резервирования и инициализации данных
- •Операнды
- •Способы задания операндов Прямая адресация
- •Косвенная адресация
- •Косвенная базовая адресация
- •Косвенная базовая адресация со смещением
- •Косвенная индексная адресация со смещением
- •Косвенная базовая индексная адресация
- •Косвенная базовая индексная адресация со смещением
- •Операторы
- •Функциональная классификация машинных команд
- •Команды пересылки данных Команды общего назначения
- •Работа с адресами и указателями
- •Преобразование данных
- •Xlat [адрес_таблицы_перекодировки]
- •Ввод из порта и вывод в порт
- •Работа со стеком
- •Арифметические команды Форматы арифметических данных
- •Арифметические операции над целыми двоичными числами
- •Логические команды
- •Команды передачи управления
- •Команда безусловного перехода
- •Условные переходы
- •Организация циклов
- •Основы алгоритмизации и программирования
Указатель на память
Указатели на память бывают двух типов:
ближний тип – 32-разрядный логический адрес, представляющий собой относительное смещение в байтах от начала сегмента;
дальний тип – 48-разрядный логический адрес, состоящий из двух частей: 16-разрядной сегментной части и 32-разрядного смещения.
Цепочки
Цепочка – это некоторый непрерывный набор байтов, слов или двойных слов максимальной длиной до 4 Гбайт.
Вещественые числа
Вещественные числа обрабатываются сопроцессором. Данные этого типа описываются тремя форматами: коротким, длинным, расширенным. Все они имеют для хранения ячейки разной длины.
Внутреннее представление вещественных чисел достаточно сложное:
S |
Характеристика |
Нормализованная мантисса |
Где бит S –знак числа.
Характеристика=Смещение + Порядок
Смещение – число, равное половине максимально возможного, которое может поместиться в поле Характеристика.
Двоично-десятичные числа (bcd)
Неупакованный двоично-десятичный тип – байтовое представление десятичной цифры от 0 до 9. Неупакованные десятичные числа хранятся как байтовые значения без знака по одной цифре в каждом байте. Значение цифры определяется младшим полубайтом.
Упакованный двоично-десятичный тип – это упакованное представление десятичных цифр от 0 до 9 в одном байте. Каждая цифра хранится в своем полубайте. Цифра в старшем полубайте является старшей.
Формат команд
Машинная команда представляет собой закодированное по определенным правилам указание процессору на выполнение некоторой операции. Правила кодирования команд называются форматом команд.
0, 1, 2, 3 или 4 байта |
1, 2 или 3 байта |
0 или 1 байта |
0 или 1 байт |
0, 1, 2 или 4 байта |
0, 1, 2 или 4 байт |
Префиксы |
Код операции |
Байт mod r/m |
Байт sib |
Смещение в команде |
Непосредственный операнд |
Рисунок 9. Общий формат машинной команды
Назначения полей машинной команды:
Префиксы – необязательные однобайтные элементы машинной команды. Назначение префиксов — изменить действия, выполняемые командой. Машинная команда может иметь до четырех префиксов одновременно.
Код операции – обязательный элемент, описывающий операцию, выполняемую командой. Многим командам соответствует несколько кодов операций, каждый из которых определяет нюансы выполнения операции. Поле кода операции не имеет однозначной структуры. В зависимости от конкретных команд, оно может иметь в своем составе от одного до трех элементов. Один из этих трех элементов является непосредственно кодом операции или ее частью, остальные уточняют детали операции.
Байт режима адресации mod r/m, иногда называемый постбайтом, несет информацию об операндах и режиме адресации. Операнды могут находиться в памяти, а также в одном или двух регистрах. Если операнд находится в памяти, то байт mod r/m определяет компоненты (смещение, базовый и индексный регистры), используемые для вычисления его эффективного адреса. Байт mod r/m состоит из трех полей: - mod (два бита) определяет способ адресации и количество байтов, занимаемых в команде адресом операнда (поле смещения в команде). - reg (3 бита) определяет либо регистр, находящийся в команде на месте второго операнда, либо возможное расширение кода операции (давая в совокупности размер поля КОП в 11 битов). - г/m используется совместно с полем mod и определяет либо регистр, находящийся в команде на месте первого операнда, либо базовые и индексные регистры, применяемые для вычисления эффективного адреса (совместно с полем смещения в команде).
Байт масштаба, индекса и базы (Scale-Index-Base – sib) используется для расширения возможностей адресации операндов. Байт sib состоит из трех полей: - поле масштаба ss. В этом поле размещается масштабный множитель для индексного компонента index, занимающего следующие три бита байта sib. В поле ss может содержаться одно из следующих значений: 1, 2, 4, 8. При вычислении эффективного адреса на это значение будет умножаться содержимое индексного регистра. - поле index используется для хранения номера индексного регистра, который применяется для вычисления эффективного адреса операнда; - поле base используется для хранения номера базового регистра, который также применяется для вычисления эффективного адреса операнда. В качестве базового и индексного регистров могут использоваться практически все регистры общего назначения.
Поле смещения в команде – это 8-, 16- или 32-разрядное целое число со знаком, представляющее собой полностью или частично значение эффективного адреса операнда.
Поле непосредственного операнда – необязательное поле, представляющее собой 8-, 16- или 32-разрядный непосредственный операнд. Наличие этого поля, конечно, отражается на значении байта mod r/m.
