Курс лекций для студентов заочного факультета самара

Вид материалаКурс лекций

Содержание


2.АРХИТЕКТУРА РЕАЛЬНОГО РЕЖИМА РАБОТЫ М/П СЕМЕЙСТВА 8086 2.1.Форматы данных микропроцессора
2.2.Адресация памяти
2.3.1.Регистры общего назначения
2.3.2.Сегментные регистры
2.3.3.Регистры смещения
2.3.4.Регистр флагов
Подобный материал:
1   2   3   4   5   6   7   8   9   ...   13

2.АРХИТЕКТУРА РЕАЛЬНОГО РЕЖИМА РАБОТЫ М/П СЕМЕЙСТВА 8086

2.1.Форматы данных микропроцессора

2.1.1.Числа


Микропроцессор работает с двоичными числами со знаком и без знака, длиной 8 бит (1 байт), 16 бит (2 байта) или 32 бита (4 байта), с двоично-десятичными числами длиной 8 бит (BCD - числа) и с десятичными числами длиной 8 бит.

Байт - это число без знака в диапазоне от 0 до 255 или число со знаком в диапазоне от - 128 до +127.

Слово - это число без знака в диапазоне от 0 до 65535 или число со знаком, то от - 32768 до +32767.

Для 32-разрядных процессоров определены операции над двойными словами. Двойное слово - это число без знака в диапазоне от 0 до 4294967295, или число со знаком в диапазоне от -2147483648 до +2147483647.

Для чисел со знаком старший бит является знаковым: для положительных чисел он равен нулю, а для отрицательных чисел - единице.

Отрицательные числа представлены в дополнительном коде, который получается путем инвертирования всех разрядов положительного числа и суммирования полученного кода с единицей в младшем разряде.

Микропроцессор может выполнять арифметические операции над двоично-десятичными числами, хранящимися в упакованном (2 цифры в байте) формате, и над десятичными числами в неупакованном (1 цифра в байте) формате. Упакованный формат предполагает, что байт содержит две десятичные цифры, занимающие старший и младший полубайты. Диапазон представимых чисел составляет от 0 до 99. В неупакованном формате байт содержит одну десятичную цифру, которая обычно кодируется в символьном коде ASCII. Цифра 0 кодируется как 30Н, а цифра 9 - как 39Н.

2.1.2.Символы


Символьные данные хранятся в стандартном символьном коде ASCII, каждый символ занимает 1 байт. Микропроцессор ничего не знает об ASCII-коде и рассматривает символьные данные как цепочки произвольных байтов, то есть последовательность кодов символов.

2.1.3.Указатели


Указатели применяются для обращения к некоторым объектам в памяти, например адресам процедур или адресам меток. Близкий (NEAR) внутрисегментный указатель - это 16-битное или 32-битное смещение (в зависимости от разрядности микропроцессора) от базового адреса того сегмента, в котором находится указатель.

Далекий (FAR) межсегментный указатель применяется в тех случаях, когда программа осуществляет передачу управления в другой сегмент. Такой указатель определяет адрес сегмента и смещение внутри сегмента.

2.1.4.Цепочки


Микропроцессоры семейства 8086 могут оперировать цепочками(строками) байт, слов и двойных слов (32-разрядные процессоры). Под цепочкой понимается последовательность взаимосвязанных элементов, хранящихся по соседним адресам. Длина цепочки не может превышать длину сегмента. Система команд процессора имеет набор цепочечных примитивов, позволяющих эффективно работать с цепочками.

2.2.Адресация памяти


Микропроцессор делит адресное пространство на произвольное количество сегментов, каждый из которых содержит не более 64 Кб. Адрес первого байта сегмента всегда кратен 16 байтам и называется адресом сегмента (параграфом сегмента, номером сегмента). Для обращения к памяти внутри сегмента используется дополнительный адрес, называемый смещением, который указывает расположение байта относительно начала сегмента (относительный адрес или относительное смещение или исполнительный адрес). Адрес сегмента и смещение составляют логический адрес.

Физический адрес образуется с помощью объединения 16 разрядного адреса сегмента и 16 разрядного смещения. Если адрес сегмента сдвинуть влево на 4 бита и дополнить справа 4 нуля, то получится 20-разрядный базовый адрес сегмента. Если сложить базовый адрес сегмента с 16 разрядным смещением, то получится 20 разрядный физический адрес. Следовательно, адресуемая память составляет 220 байт = 1024 К = 1 М. Адрес сегмента - пятизначное шестнадцатеричное число, последняя цифра = нулю, так как адрес получается в результате умножения на 16. Смещение - четырехзначное шестнадцатеричное число. В памяти слово хранится в двух соседних байтах. Младший байт - младший адрес. Старший байт - старший адрес.

2.3.Внутренние регистры процессора

2.3.1.Регистры общего назначения


В микропроцессоре есть четыре 16-битных регистра общего назначения: AX, BX, CX, DX. Младший и старший байты регистров общего назначения доступны для работы и имеют свои уникальные имена: AL и AH, BL и BH, CL и CH, DL и DH соответственно. Регистры общего назначения в основном используются для временного хранения данных, особенно операндов арифметических операций. Данные регистры взаимозаменяемы, но тем не менее каждый из них имеет специальные функции:

AX - основной регистр, используемый в арифметических операциях над словом, также используется в операциях ввода/вывода и в некоторых операциях со строками.

AL - используется в аналогичных операциях над байтами, при преобразовании 10-х чисел и в операциях над ними.

AH - используется при умножении и делении байтов.

BX - используется при адресации данных.

CX - счетчик числа повторений циклов, номер позиции элемента данных при операциях сдвига и циклического сдвига на несколько битов.

DX - используется как расширение аккумулятора при операциях, дающих 32-разрядный результат и в операциях ввода/вывода.

Начиная с микропроцессора 80386, в дополнение к вышеперечисленным регистрам, существуют еще 32-разрядные регистры общего назначения EAX, EBX, ECX, EDX, младшим словом которых являются регистры AX, BX, CX, DX соответственно.

2.3.2.Сегментные регистры


Все сегментные регистры имеют размер 16 битов (слово).

CS - содержит адрес сегмента кода исполняемой программы.

SS - указывает на сегмент стека - область данных, предназначенную для временного хранения параметров и адресов, используемых программой.

DS - указывает на сегмент данных.

ES - указывает на дополнительный сегмент данных, используется при операциях с цепочками (если данные программы превышают 64 Кб).

Если программа не изменяет значения регистра CS, то размер ее кода не может превышать 64 Кб. Переключение адреса сегмента кода программы выполняется с помощью специальных команд JMP и CALL, когда управление передается на дальнюю метку или в дальнюю процедуру. Эти формы передачи управления неявно изменяют значение регистра CS и позволяют создавать программы любого размера.

Начиная с микропроцессора 80386, в дополнение к вышеперечисленным регистрам, существуют еще два регистра для адресации дополнительных сегментов данных FS и GS.

2.3.3.Регистры смещения


Микропроцессор содержит пять основных 16-битных регистров смещения:

SP и BP - содержат смещение в сегменте стека. SP-указывает на вершину стека, BP используется как базовый регистр для того, чтобы зафиксировать положение стека в какой-то момент времени и в дальнейшем адресоваться к данным, расположенным в стеке;

SI и DI в основном используются для формирования сложных адресов, состоящих из смещения начала блока данных в сегменте, и относительного смещения элемента данных внутри блока. При этом смещение начала блока обычно хранится в регистре BX или непосредственно в команде, а SI или DI задают смещение внутри блока. Кроме того, они участвуют в выполнении команд работы с цепочками;

IP - указывает на следующую выполняемую команду в сегменте кода, адрес ее хранится в CS. Программа не может явно получить или изменить значение этого регистра. Однако команды JMP и CALL неявно изменяют его значение, а также сохраняют его в стеке и восстанавливают из стека.

Начиная с микропроцессора 80386, в дополнение к перечисленным регистрам, существуют еще 32-разрядные регистры смещения ESP, EBP, ESI, EDI, EIP, младшее слово которых составляют регистры SP, BP, SI, DI и IP соответственно.

2.3.4.Регистр флагов


Для 16-разрядных микропроцессоров регистр флагов имеет размер 16 битов и использует в реальном режиме работы 9 флагов: 6-статусных флагов (отражают результаты арифметических и логических операций) и 3-управляющих флага (изменяют режим работы процессора).

Начиная с микропроцессора 80386 регистр флагов имеет размер 32-бита, но в реальном режиме используются тоже только 9 флагов из младшего слова:

CF - флаг переноса, указывает на арифметический перенос разряда. CF также может содержать значение бита, который при сдвиге или циклическом сдвиге вышел за границы регистра. CF=1, если перенос был (0 разряд).

PF - флаг четности, указывает на четность единичных разрядов в результате операции. Используется в основ­ном в операциях обмена данными (2 разряд).

AF - вспомогательный флаг переноса, указывает на корректировку, необходимую при двоично-десятичных арифметических операциях (фиксирует факт переноса из младшего полубайта в старший полубайт). Упакованное число - 2 цифры в байте. В микропроцессоре нет десятичного сумматора. Сложение и вычитание десятичных чисел производится как сложение и вычитание двоичных чисел. Результат может быть неверным десятеричным числом, поэтому существуют команды преобразования результата в правильное десятеричное число. Чтобы это сделать, надо знать, был ли перенос (4 разряд).

ZF - флаг нуля. Указывает на нулевой результат или равенство при сравнении (6 разряд).

SF - флаг знака. Указывает на отрицательный результат в арифметической операции, логической, операциях сдвига или циклического сдвига (7 разряд).

OF - флаг переполнения. Указывает на арифметическое переполнение при операции (выход за пределы допустимых значений) (11 разряд).

TF - флаг трассировки (ловушки). Управляет одношаговыми операциями (при использовании отладчика), генерируя программные прерывания в конце каждой команды (8 разряд).

IF - флаг прерываний. Управляет разрешением и запретом прерываний от внешних устройств. Блокирует все прерывания, за исключением немаскируемых прерываний (NMI) (9 разряд).

DF - флаг направления. Управляет направлением влево и вправо в операциях со строками. При DF=1 микропроцессор уменьшает на 1 содержимое регистров индекса SI и DI после выполнения команды, а при DF=0 увели­чивает на 1 содержимое регистра индексов (10 разряд).

Регистр флагов не имеет имени, однако, часто 16-разрядный регистр флагов называют FLAGS, а 32-разрядный регистр флагов - EFLAGS.

Формат 16-разрядного регистра флагов

16










11

10

9

8

7

6




4




2




0













OF

DF

IF

TF

SF

ZF




AF




PF




CF