- •Общая архитектура современных микропроцессорных систем.
- •Основные программно-доступные элементы микропроцессорной системы.
- •Особенности Гарвардской и Принстонской архитектуры построения микропроцессорных систем.
- •Программная модель 16-разрядного микропроцессора i8086.
- •Методы адресации. Безоперандные команды.
- •Методы адресации (см 5). Регистровая адресация.
- •Методы адресации (см 5). Регистровая косвенная адресация.
- •Методы адресации (см 5). Индексная адресация.
Программная модель 16-разрядного микропроцессора i8086.
16-разрядного микропроцессор, позволяющий создавать многопроцессорные системы. Процессор интересует нас, прежде всего, как набор регистров.
Процессор разбит на два функциональных блока - операционный и интерфейсный, которые работют одновременно. В результате исполнение одной команды совмещалось во времени с выборкой следующей инструкции или данных из памяти.
Регистр – быстродействующее запоминающее устройство, реализованное на электронных компонентах.
Все регистры имеют размер слова (16 разрядов), за каждым из них закреплено определенное имя. По назначению и способу использования регистры можно разбить на следующие группы:
регистры общего назначения (AX, BX, CX, DX, SI, DI, BP, SP);
Особенностью регистров общего назначения является то, что их можно использовать в любых арифметических, логических и т.п. машинных операциях.
сегментные регистры (CS, DS, SS, ES); Эти регистры используются для сегментирования адресов, которое является разновидностью модификации адресов и которое используется для сокращения размера команд. Процессор I8086 мог работать с 1 Мб памяти, т.е. 220 байтов (k=20), поэтому абсолютные адреса 20-разрядные. Размер сегмента должен быть равен 64 Кб, т.е. 216 байтов (m=16), поэтому смещения (или эффективный адрес) - это 16-разрядные адреса. Так как существует всего четыре сегментных регистра, то одновременно можно работать с четырьмя сегментами памяти. Если же надо работать с большим числом сегментов, то сохраняем содержимое сегментных регистров в обычных регистрах или в памяти, а затем записываем в них адреса нужных сегментов. Позже, если надо, можно восстановить прежние значения сегментных регистров.
указатель команд (IP);
В регистре IP всегда находится адрес команды, которая должна быть выполнена следующей. Более точно, в IP находится адрес этой команды, отсчитанный от начала сегмента команд, на начало которого указывает регистр CS. Поэтому абсолютный адрес этой команды определяется парой регистров CS и IP. Изменение любого из этих регистров есть ничто иное, как переход. Следовательно, содержимое регистра IP (как и CS) можно менять только командами перехода.
регистр флагов (Flags).
Флаг - это бит, принимающий значение 1 ("флаг установлен") или значение 0 ("флаг сброшен"). В i8086 используется 9 флагов, собранных в один 16-разрядный регистр, называемый регистром флагов (Flags)
Флаги делятся на две группы: флаги условий и флаги состояний.
Флаги условий:
CF (carry flag) - флаг переноса. Наиболее полезен в арифметических операциях над числами без знака; например, если при сложении беззнаковых чисел получилась слишком большая сумма - с единицей переноса, которой нет места в ячейке, тогда флаг CF принимает значение 1, а если сумма "укладывается" в размер ячейки, то значением CF будет 0.
OF (overflow flag) - флаг переполнения. Полезен в арифметических операциях над числами со знаком; например, если при сложении или вычитании знаковых чисел получился результат, по модулю превосходящий допустимую величину (произошло переполнение мантиссы), тогда флаг OF получает значение 1, а если переполнения мантиссы не было - значение 0.
ZF (zero flag) - флаг нуля. Устанавливается в 1, если результат команды оказался нулевым.
SF (sign flag) - флаг знака. Устанавливается в 1, если в операции над знаковыми числами получился отрицательный результат.
PF (parity flag) - флаг четности. Равен 1 , если в 8 младших битах результата очередной команды содержится четное количество двоичных единиц.
AF (auxiliary carry flag) - флаг дополнительного переноса. Фиксирует особенности выполнения операций над двоично-десятичными числами.
Флаги состояний:
DF (direction flag) - флаг направления. Устанавливает направление просмотра строк в строковых командах: при DF=0 строки просматриваются "вперед" (от начала к концу), при DF=1 - в обратном направлении.
IF (interrupt flag) - флаг прерываний. При IF=0 процессор перестает реагировать на поступающие к нему прерывания, а при IF=1 блокировка прерываний снимается.
TF (trace flag) - флаг трассировки. При TF=1 после выполнения каждой команды процессор делает прерывание, чем можно воспользоваться при отладке программы.
Например, команда деления требует, чтобы первый операнд (делимое) находился в регистре AX или регистрах AX и DX (в зависимости от размера операнда), а команды управления циклом используют регистр CX в качестве счетчика цикла. Регистры AX, BX, CX и DX устроены так, что возможен независимый доступ к их старшей и младшей половинам. Обозначают эти половины буквами H (high - выше, старший) и L (low - ниже, младший) и первой буквой из названия регистра: AH и AL - в AX, BH и BL - в BX и т.д.
Приведем расшифровку названий регистров: AX accumulator, аккумулятор; BX base, база; CX counter, счетчик; DX data, данные; (буква X - от слова eXtended, расширенный: в процессоре 8080 были байтовые регистры A, B, C и D, но затем их расширили до размера слова) SI source index, индекс источника; DI destination index, индекс приемника; BP base pointer, указатель базы; SP stack pointer, указатель стека; IP instruction pointer, указатель команд; SS stack segment, сегмент стека; DS data segment, сегмент данных; CS code segment, сегмент команд; ES extra segment, дополнительный сегмент.
