Регистры и команды микропроцессоров Intel
Регистры - ячейки памяти, расположенные в центральном процессоре, используемые для кратковременного хранения данных и доступные из машинных программ. В качестве основной модели для языка ассемблер используется микропроцессорная память (МПП) базового МП 8086 из четырнадцати регистров двухбайтовых (16 разрядов), за каждым закреплено определенное имя (рис. 2.11 справа).
Рис.2.11. Регистры процессора Intel
По назначению и способу использования регистры можно разбить на следующие группы:
· Регистры общего назначения (AX, BX, CX, DX, SI, DI,BP, SP), аналогичные четырехбайтовые регистры у МП 80386 и выше именуются ЕAX, ЕBX,…(рис. 3.41 слева);
· Сегментные или адресные регистры (CS, DS, SS, ES);
· Указатель команд (IP);
· Регистр флагов (Flags).
Название регистров общего назначения могут быть расшифрованы следующим образом:
AX accumulator, аккумулятор;
BX base, база;
CX counter счетчик;
DX data данные;
(буква Х - от слова еXtended, расширенный; в процессоре 8080 были байтовые регистры A, B, C, D, впоследствии расширенные до слова)
SI source index, индекс источника;
DI destination index, индекс приемника;
BP base pointer, указатель базы;
SP stack pointer, указатель стека.
Все эти регистры можно использовать в любых арифметических, логических и т.п. машинных операциях. Однако каждый из них имеет определенную специализацию. Некоторые команды требуют, чтобы их операнд или операнды обязательно находились в определенных регистрах. Например, команда деления требует, чтобы первый операнд (делимое) находился в регистре АХ или в регистрах АХ и DX (в зависимости от размера операнда). Команды управления циклом используют регистр СХ в качестве счетчика цикла. Регистры AX, BX, CX и DX могут делиться на части (по одному байту), называемые соответственно AH (Нigh - старший) и AL (Low - младший), BH и BL, CH и CL, DH и DL. Запись в другие регистры и чтение из них осуществляется только целиком.
Названия сегментных регистров (в старших моделях процессоров их число увеличено) можно расшифровать так:
CS code segment, сегмент команд;
DS data segment, сегмент данных;
SS stack segment, сегмент стека;
ES extra segment, дополнительный сегмент.
Эти регистры используются только для записи и считывания при выполнении сегментирования адресов. В регистре CS должен находиться начальный адрес сегмента команд - той области памяти, где расположены команды программы. Регистр DS должен указывать на начало сегмента данных, в котором размещаются данные программы. Регистр SS должен указывать на начало области памяти, отведенной под стек. Если это сделано, тогда при ссылках на эти сегменты (команд, данных и стека) в командах названия этих регистров можно не указывать, они будут подразумеваться по умолчанию. При сегментировании адресов любой адрес ячейки А представляется в виде суммы B+D, где В - начальный адрес (база) того участка (сегмента) памяти, в котором находится ячейка А, а D - это смещение, адрес ячейки A, отсчитанный от начала этого сегмента (от В). В ПК размеры сегментов памяти не должны превышать 64 Кбайт (216=65536), поэтому смещения - это 16-разрядные адреса. Смещения (относительные 16-разрядные адреса) меняются от 0000h до FFFFh, в то время как абсолютные 20-разрядные адреса - от 00000h до FFFFFh.
В регистре IP (Instruction Pointer, указатель команд) находится адрес команды, которая должна выполняться следующей. Более точно, в IP находится адрес этой команды, отсчитанный от начала сегмента команд, на начало которого указывает регистр CS. Поэтому абсолютный адрес этой команды определяется парой регистров CS и IP. Содержимое этих регистров можно менять только командами перехода.
Каждый разряд (бит) регистра флагов имеет строго определенное значение. Флаг - это бит, принимающий значение 1 (“флаг установлен”), если выполнено некоторое условие, и значение 0 (“флаг сброшен”) в противном случае. В ПК используется 9 флагов, причем они собраны в один 16-разрядный регистр Flag (некоторые разряды не заняты).
Программа, управляющая работой любой ЭВМ, состоит из отдельных команд и вместе с данными размещается в основной памяти. Каждая команда размещается в отдельной ячейке памяти (или группе смежных ячеек) и имеет свой адрес. Структура всех команд одинакова, они состоят из двух частей: кода операции и адресной части. Код операции определяет операцию, которую нужно выполнить. Адресная часть определяет, где хранятся операнды, т.е. обрабатываемые данные, и куда необходимо поместить результат операции. Машинные команды ПК занимают от 1 до 6 байт. Код операции занимает один или два первых байта команды. Использование одного (первого) байта дает возможность закодировать только 256 команд, что недостаточно. Поэтому некоторые операции объединяются в группу и им дается один и тот же код, во втором же байте этот код уточняется. Кроме того, во втором байте указываются типы операндов и способы их адресации. Команды ПК могут иметь от 0 до 6 операндов. Размер операндов - байт или слово (реже двойное слово). Операнд может быть указан в самой команде (непосредственный операнд), либо может находиться в одном из регистров ПК, и тогда в команде указывается адрес ячейки. Результат выполнения команды помещается в регистр или ячейку памяти, откуда берется один из операндов. В отношении всех команд, операнды которых берутся из памяти, применяется сегментирование адресов, поэтому в командах указываются только 16-разрядные адреса (смещения), а не "длинные" 20-разрядные адреса. Таким образом уменьшается размер команды.
Дата добавления: 2017-01-16; просмотров: 3289;