


Рис. 3.1
На схеме, показанной на рис. 3.1, использованы следующие компоненты процессора и памяти:
АЛУ – арифметико-логическое устройство выполняет операции по обработке данных;
РОНы – регистры общего назначения (от 8 до нескольких сотен штук) – сверхбыстрая память малой емкости для хранения операндов;
Рг СС – регистр слова состояния. Содержит текущее состояние процессора, в который входит уровень приоритета текущей программы, биты условий {j}завершения последней команды, режим обработки текущей команды. Возможны следующие режимы обработки (в порядке возрастания уровня приоритета):
- User Mode – режим пользователя; в этом режиме не могут выполнятся системные команды (команды изменения состояния процессора и команды ввода-вывода);
- SuperVisor Mode – режим супервизора; обеспечивается выполнение всех команд ввода- вывода;
- Kernel Mode – режим ядра; в нем возможно выполнение всех команд процессора;
ПСч – программный счетчик. Содержит адрес текущей команды и автоматически наращивается для подготовки адреса следующей команды (исключение составляет команда перехода);
Рг Команд – регистр команд. Содержит код исполняемой в данный момент команды;
ДешКОПиРА – дешифратор кода операции и режимов адресации;
Формирователь УС – формирователь управляющих сигналов { Уi };
РАП - регистр адреса памяти; РДП - регистр данных памяти;
Рг УиС – регистр управления и состояния контроллера памяти.
В процессоре Intel 8086 длина слова составляет 16 бит или 2 байта. Минимально адресуемой и обрабатываемой единицей информации является байт, при этом адрес слова совпадает с адресом младшего байта и является четным. При разрядности адреса 16 бит максимальная емкость прямо адресуемой памяти составляет 216 = 64 Кбайт. Для расширения адресуемого пространства памяти используется ее разбиение на блоки – сегменты, называемое сегментированием памяти. Каждый сегмент имеет произвольную длину, не превышающую 64 Кбайт. Адрес байта в сегментированной памяти задается двумя составляющими: сегментная часть (16 бит), определяющая адрес начала сегмента, и смещение (16 бит) байта в пределах сегмента. Обычно адрес представляется в виде пары Сегмент (Segment) : Смещение (Offset). Начало размещения сегмента выравнивается на границу блока памяти из 16 байт, называемого «параграфом». Соответственно, физический адрес памяти получается путем суммирования сегмента, сдвинутого на 4 бита влево, со значением смещения. Результатом такого суммирования является 20-битный физический адрес, чем обеспечивается адресация 1 Мбайт памяти.
Пример. Пусть Segment = DCBA, Offset = 5678.
Физический адрес Adr будет определяться суммой: DCBA0 + 5678 = E2218.
Начиная с 80386, процессоры Intel предоставляют 16 основных регистров для пользовательских программ плюс еще 11 регистров для работы с числами с плавающей запятой (FPU/NPX) и мультимедийными приложениями (ММХ). Все команды так или иначе изменяют значения регистров, и всегда быстрее и удобнее обращаться к регистру, чем к памяти.
Регистры общего назначения
16-битные регистры АХ (аккумулятор), ВХ (база), СХ (счетчик), DX (регистр данных) могут использоваться без ограничений для любых целей – временного хранения данных, аргументов или результатов различных операций. На самом деле, начиная с процессора 80386, все эти регистры имеют размер 32 бита и называются они ЕАХ, EВХ, EСХ, EDX. Кроме этого, отдельные байты в 16-битных регистрах АХ - DX тоже имеют свои имена и могут использоваться как 8-битные регистры. Старшие байты этих регистров называются АН, ВН, СН, DH, а младшие - AL, DL, CL, DL.
Другие четыре регистра общего назначения (РОН) – SI (индекс источника), DI (индекс приемника), BP (указатель базы), SP (указатель стека) – имеют более конкретное назначение и могут применяться для хранения всевозможных временных переменных, только когда они не используются по назначению. Регистры SI и DI используются в строковых операциях, ВР и SP используются при работе со стеком. Так же как и для регистров АХ - DX, начиная с процессора 80386, эти четыре регистра являются 32-битными, называются ESI, EDI, EВР и ESP соответственно и могут использоваться как универсальные РОН.
Сегментные регистры
При использовании памяти для формирования любого адреса применяются два числа – адрес начала сегмента и смещение искомого байта относительно этого начала. Для хранения адреса начала сегмента в процессорах Intel8086 предусмотрены следующие сегментные регистры – CS (сегмент кода), DS (сегмент данных), ES (дополнительный сегмент данных), SS(сегмент стека). Начиная с процессора 80386, появились дополнительные регистры FS и GS.
Смещение следующей выполняемой команды всегда хранится в специальном регистре – IP (указатель инструкции), принудительная запись в который приведет к тому, что следующей будет исполнена какая-нибудь другая команда, а не команда, расположенная сразу за данной. В общем случае при передаче управления в другой сегмент команды безусловного перехода, вызова подпрограммы и т. п. – осуществляют запись в регистры CS и IP.
Регистр флагов
|
Х |
Х |
Х |
Х |
OF |
DF |
IF |
TF |
SF |
ZF |
0 |
AF |
0 |
PF |
1 |
CF |
15
8
7
0
CF - флаг переноса (CARRY);
PF - флаг четности (PARITY);
AF - дополнительный флаг переноса (AUXILARY);
ZF - флаг нуля (ZERO);
SF - знаковый флаг (SIGN);
TF - флаг слежения, ловушка (TRAP);
IF - флаг прерываний (INTERRUPTION);
DF - флаг направления (DIRECTION);
OF - флаг переполнения (OVERFLOW).
Стек – специальная область памяти, достуная для записи (заполнения) и выборки (выталкивания) данных только с одного конца, называемого верхушкой стека. В процессорах Intel Х86 на верхушку стека указывает РОН указатель стека (SP – stack pointer), стек может работать только со словами, заполнение стека происходит в сторону уменьшения адресов с помощью команды PUSH, а освобождение стека (выталкивание данных из стека) – в сторону увеличения адресов командой РОР.
По существу команды PUSH AX и POP AX, соответственно сохраняющая содержимое РОН AX в стеке и восстанавливающая содержимое РОН AX из стека, выполняются в два приема:
PUSH AX: POP AX:
(SP)-2SP [SP]AX
(AX)[SP] (SP)+2SP
При выполнении программ в процессорах Intel Х86 стек используется в случаях:
промежуточного хранения содержимого регистра или группы регистров;
обмена содержимого регистров;
сохранения адресов возврата при вызове подпрограмм;
передачи параметров между вызываемой и вызывающей программами;
сохранения адресов возврата и регистра флагов при обработке прерываний.
Поскольку выполнение лабораторных работ по курсу происходит в среде ОС MS DOS, рассмотрим основные типы исполняемых файлов:
*.bat – задают порядок выполнения некоторой последовательности программ;
*.com – файлы исполняемых программ типа com;
*.exe – файлы исполняемых программ типа exe.
Файлы типа *.com содержат только исполняемый код без дополнительной информации о программе, формируются в загрузочном виде и не требуют настройки. Весь код, данные и стек такой программы располагаются в одном сегменте, имеют длину не более 64 Кб и служат для организации простых модулей, ориентированных на модели памяти tiny и small (приложение 1).
Файлы типа *.exe могут иметь произвольную длину, они содержат заголовок, в котором описывается размер файла, требуемый объем памяти и таблица загрузки – список команд с абсолютными адресами, требующих настройки при загрузке в зависимости от размещения программы в памяти.
Структура размещения в памяти файла типа COM показана на рис. 3.3.
|
64 Кб |
Стек
Данные и код программы |
SS:SP |
|
|
|
|
|
|
100h CS:IP ( директива ORG 100h) |
|
|
|
PSP |
|
|
|
|
|
|
0 |
DS, CS, ES, SS |
Рис. 3.3
В начальной части com-файла программы (а также и exe-файла) MS DOS размещает специальный блок – префикс сегмента программы ПСП (PSP - рrogram segment prefix), который содержит информацию для доступа программы к параметрам командной строки, к среде окружения, для реакции программы на критические ошибки и управляющие команды типа Ctrl+C. В начальной части PSP размещена команда вызова обработчика прерывания для завершения программы и возврата в DOS. Так как после загрузки все сегментные регистры, включая CS, указывают на начало PSP, а IP = 0, то программа не может исполняться, начиная с этого адреса, и первой командой делают ORG 100h , устанавливающуую CS:IP на конец PSP.
Структура размещения в памяти файла типа EXE показана на рис. 3.4ю мых файлов. сразу за данной.., а состав ряда полей ПСП – в табл. 3.1.
SS:SP
Стек
SS:00
Данные
DS (сюда его необходимо установить)
Код
100h
CS:00
PSP