
- •Основы алгоритмизации и программирования
- •29 Декабря 2011, протокол № 4
- •Введение
- •Этапы развития эвм
- •Поколения эвм
- •Машинно-ориентированные языки программирования
- •Архитектура эвм
- •Микропроцессоры intel
- •Набор регистров
- •Регистры общего назначения
- •Сегментные регистры
- •Регистры состояния и управления
- •Организация памяти
- •Сегментная организация памяти
- •Типы данных
- •Символы
- •Целые числа
- •Указатель на память
- •Цепочки
- •Вещественые числа
- •Двоично-десятичные числа (bcd)
- •Формат команд
- •Обработка прерываний
- •Int тип_прерывания
- •Синтаксис ассемблера
- •Алфавит ассемблера
- •Директивы сегментации
- •Упрощённые директивы сегментации
- •Директивы резервирования и инициализации данных
- •Операнды
- •Способы задания операндов Прямая адресация
- •Косвенная адресация
- •Косвенная базовая адресация
- •Косвенная базовая адресация со смещением
- •Косвенная индексная адресация со смещением
- •Косвенная базовая индексная адресация
- •Косвенная базовая индексная адресация со смещением
- •Операторы
- •Функциональная классификация машинных команд
- •Команды пересылки данных Команды общего назначения
- •Работа с адресами и указателями
- •Преобразование данных
- •Xlat [адрес_таблицы_перекодировки]
- •Ввод из порта и вывод в порт
- •Работа со стеком
- •Арифметические команды Форматы арифметических данных
- •Арифметические операции над целыми двоичными числами
- •Логические команды
- •Команды передачи управления
- •Команда безусловного перехода
- •Условные переходы
- •Организация циклов
- •Основы алгоритмизации и программирования
Сегментные регистры
Все сегментные регистры содержат адреса памяти, с которых начинаются соответствующие сегменты.
СS |
|
||
|
|
|
|
DS |
|
||
|
|
|
|
SS |
|
||
|
|
|
|
ES |
|
||
|
15 |
0 |
Рисунок 3. Сегментные регистры
CS – регистр сегмента кода (Code Segment). Содержит начальный адрес сегмента кода программы. Этот адрес плюс величина смещения в регистре ip (пара CS:IP) определяют адрес команды, которая должна быть выбрана процессором для выполнения.
DS – регистр сегмента данных (Data Segment). Хранит адрес сегмента, содержащего обрабатываемые программой данные. Этот адрес плюс величина смещения, определённая в команде, указывают на конкретную ячейку в сегмента данных.
SS – регистр сегмента стека (Stack Segment). Содержит начальный адрес сегмента стека.
ES – регистр дополнительного сегмента данных (Extra Segment). Некоторые операции со строками используют этот регистр для управления адресацией памяти. Ассемблерная программа должна инициализировать регистр es явно.
Регистры состояния и управления
К даннаму типу регистров относятся:
IP – регистр указателя команды (Instruction Pointer). Он содержит смещение команды в сегменте кода, которая должна быть выполнена. Этот регистр непосредственно недоступен программисту, но загрузка и изменение его значения производится командами управления (команды условных и безусловных переходов, вызова процедур и др.) осуществляя тем самым переходы в требуемые точки программы.
ip |
|
|
|
15 |
0 |
Рисунок 4. Регистр указателя команды
FLAGS – регистр флагов (Flags register). Отдельные биты этого регистра имеют определённое функциональное назначение и называются флагами. Флаг принимает значение 1, если он установлен, и 0, если он сброшен.
flags |
|
|
|
|
OF |
DF |
IF |
TF |
SF |
ZF |
|
AF |
|
PF |
|
CF |
|
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Рисунок 5. Регистр флагов микропроцессора i8086
Флаги можно разделить на две группы:
флаги состояния, которые обновляются процессором после выполнения каждой очередной команды, и по ним можно судить о результате выполнения этой команды.
CF – флаг переноса (Carry Flag). Содержит признак переноса информациии из старшего бита (после арифметических операций), а также последний бит при операциях сдвига. 1 – перенос был, 0 – переноса не было.
PF – флаг паритета (Parity Flag). Устанавливается в 1, если 8 младших байтов результата содержат чётное число единиц, и в 0 – если нечётное. Это учитывается в операциях ввода-вывода.
AF – флаг вспомогательного переноса (Auxiliaиy Flag). используется в операциях над двоично-десятичными (BCD) числами. Устанавливается в 1, если результате операции сложения был произведен перенос из разряда 3 в старший разряд или при вычитании был заем в разряд 3 младшей тетрады из значения в старшей тетраде; 0 – переносов (заемов) не было.
ZF – флаг нуля (Zero Flag). Устанавливается в 1, если результат операции равен 0.
SF – флаг знака (Sign Flag). Копирует старший бит результата выполнения команды, показывая, таким образом, знак операции.
OF – флаг переполнения (Overflow Flag). Фиксирует переполнение, т.е. выход результата за пределы допустимого диапазона значений для чисел со знаком. Устанавливается в 1 – в результате операции происходит перенос в старший, знаковый бит результата; 0 – такого переноса нет.
флаги управления, позволяющие изменять некоторые условия работы процессора.
TF – флаг трассировки (Trace Flag). Используется для осуществления пошагового выполнения программы. Если TF=1, то после выполнения каждой команды процессор реализует процедуру прерывания с номером 1; если TF=0 – обычная работа.
IF – флаг прерывания (Interrupt Flag). Если флаг равен 1, то прерывания от внешних устройств разрешаются, а если 0 – запрещены.
DF – флаг направления (Directory Flag). Используется командами обработки строк. Если DF=0, строка обрабатывается в прямом направлении; если DF=1, обработка идёт в обратном направлении.