Полная версия

Главная arrow Информатика arrow Архитектура ЭВМ

  • Увеличить шрифт
  • Уменьшить шрифт


<<   СОДЕРЖАНИЕ   >>

Команды микропроцессора

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

Исходя из логики выполнения, команды разбиты на следующие группы: пересылки данных, арифметические, сдвига, логические, передачи управления, ввода-вывода и работы со строками.

Под адресацией данных в МП подразумеваются способы описания соответствующих адресов хранения операндов, которые можно применять в командах. Основные способы описания операндов: операнды-регистры, непосредственные операнды, операнды в памяти.

Входящие в состав микропроцессора компоненты указывают на то, что он является процессором с программным управлением. Некоторые компоненты — программный счетчик (счетчик команд СК), стек, регистр команд (РК) служат для обработки команд. Арифметико-логическое устройство, триггер переноса, регистры общего назначения (РОН) и регистр адреса данных (РА) служат для обработки данных. Все остальные компоненты, а именно: дешифратор команд (дешифратор кода операции ДКОП) и блок управления и синхронизации (БУ) управляют работой других компонентов. Взаимодействие компонентов осуществляется по внутренней шине данных. Связь МП с другими блоками (ЗУ и устройствами ввода-вывода) происходит по адресной щине, шине данных (внешней) и управляющей шине.

При выполнении каждой команды ЭВМ проделывает определенные стандартные действия.

  • 1. Согласно содержимому счетчика адреса команд считывается очередная команда программы (ее код обычно заносится на хранение в регистр команд).
  • 2. Счетчик команд автоматически изменяется так, чтобы в нем содержался адрес следующей команды.
  • 3. Считанная в регистр команд операция расшифровывается, извлекаются необходимые данные и над ними выполняются требуемые действия.

Затем во всех случаях, за исключением команды останова или наступления прерывания, все описанные действия циклически повторяются.

После выборки команды останова ЭВМ прекращает обработку программы. Для выхода из этого состояния требуется либо запрос от внешних устройств, либо перезапуск машины.

Пр и мер 3.2. Описать процесс выборки и исполнения команды, по которой содержимое регистра РОН суммируется с содержимым аккумулятора Л и результат операции фиксируется в аккумуляторе.

Команда однобайтовая с прямой регистровой адресацией. В коде команды (10000001 )2 = (81) 16 первые пять старших разрядов определяют код операции; три последних — код адреса регистра С. Команда записана в ячейку ОЗУ с адресом (номером) (0176),6. Число (2Б)|6 записано в регистр С РОН. В аккумулятор Л записано число (ЗА)16.

Процесс выборки и исполнения команды можно условно разбить на несколько этапов.

  • 1. Адрес команды (0176) 16 записывается в регистр адреса данных (РА).
  • 2. Адрес команды из РА по шине адреса поступает в ОЗУ.
  • 3. ОЗУ находит ячейку с указанным адресом и считывает команду в буферный регистр ОЗУ.
  • 4. Команда из буферного регистра ОЗУ по внешней шине данных, буфер данных (БД), внутренней шине данных поступает в РК.
  • 5. Дешифратор кода операции (ДКОП) распознает, что выборка команды закончена и содержимое аккумулятора и регистра С РОН необходимо подвергнуть суммированию.
  • 6. Содержимое РА увеличивается на единицу, и формируется адрес следующей ячейки ОЗУ (0177)16.
  • 7. Блок управления и синхронизации (БУ) вырабатывает последовательность сигналов, под воздействием которых числа (ЗА)16 из аккумулятора и (2Б)16 из регистра С РОН поступают в АЛУ, где производится операция суммирования: (ЗА)16 + (2Б)16 = = (69)16 = (01 101001 )2.
  • 8. Результат операции записывается в аккумулятор, замещая в нем прежнее число (ЗА)16.
  • 9. Выполнение команды закончено. Начинается выборка следующей команды с адресом (0177) 16.

Микропроцессор имеет все режимы адресации, однако они обладают определенными особенностями, присущими данному процессору. Непосредственная адресация предполагает, что операнд занимает одно из полей команды, а следовательно, выбирается из оперативной памяти одновременно с ней. В зависимости от форматов обрабатываемых процессором данных непосредственный операнд может иметь длину 8 или 16 бит, что обозначается соответственно data8 и data 16.

Механизмы адресации операндов, находящихся в регистровой и оперативной памяти, существенно различаются. К регистровой памяти допускается лишь прямая регистровая адресация. При этом в команде указывается номер регистра, содержащего операнд. 16-разрядный операнд может находиться в регистрах АХ, ВХ, СХ, DX, DI, SI, SP, ВР, а 8-разрядный — в регистрах AL, АН, BL, ВН, CL, СН, DL и DH.

Регистры общего назначения (РОН) — основные рабочие регистры программ: АХ, ВХ, СХ и DX. К ним можно адресоваться как отдельным, так и однобайтным словом.

Например, АХ — старший байт АН, младший байт AL.

Регистр АХ — аккумулятор, который используется во всех операциях ввода-вывода и в операциях со строками и в арифметических операциях.

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

Регистр DX — регистр данных, используемый в операциях ввода-вывода, а также в операциях умножения и деления больших чисел (совместно с АХ).

Любой из РОН может применяться для сложения или вычитания 8- или 16-разрядных величин.

Регистры указателя SP и ВР применяются для обращения к данным в стеке.

Регистр SP (Stack Pointer) — указатель стека, используется для временного хранения адресов и иногда данных, т. е. адресует стек.

Регистр ВР (Base Pointer) — указатель базы, обеспечивает ссылки на параметры (адрес, данные), передаваемые через стек.

Стек — это линейный список, записи в котором выбираются, вставляются и удаляются с одного конца, называемого вершиной стека. Это обеспечивает доступ к записям по «принципу магазина»: последний вошел, первый вышел (Last In First Out — UFO).

Индексные регистры SI и DI используются для адресации (а также для выполнения операций сложения и вычитания). Регистр SI (Source Index) — индекс источника и регистр DI (Destination Index) — индекс приемника применяются в некоторых операциях со строками или символами.

Адресация оперативной памяти имеет особенности, связанные с ее разбиением на сегменты и использованием сегментной группы регистров для указания начального адреса сегмента. 16-разрядный адрес, получаемый в блоке формирования адреса операнда на основе указанного режима адресации, называется эффективным адресом (ЭА). Иногда эффективный адрес обозначается как ЕА (Effective Address). 20-разрядный адрес, который получается в результате сложения эффективного адреса и увеличенного в 16 раз значения соответствующего сегментного регистра, называется физическим адресом (ФА).

Именно физический адрес передается из микропроцессора по 20-адресным линиям, входящим в состав системной шины, в оперативную память и используется при обращении к ее ячейке на физическом уровне. При получении эффективного адреса могут применяться все основные режимы адресации, рассмотренные выше, а также некоторые их комбинации.

Прямая адресация предполагает, что эффективный адрес — часть команды, так как ЭА состоит из 16 разрядов и соответствующее поле команды имеет такую же длину.

При регистровой косвенной адресации эффективный адрес операнда находится в базовом регистре ВХ или в одном из ин-

дексных регистров DI либо SI:

[ВХ]'

ЭА = <

[DI] >

[SI]

Обозначение имени регистра в квадратных скобках указывает на содержимое соответствующего регистра. Фигурные скобки — символ выбора одного из трех возможных вариантов.

При регистровой относительной адресации эффективный адрес равен сумме содержимого базового или индексного регистра и смещения:

j disp8 I j disp 16 j

Обозначения disp8 и disp 16 указывают на 8- или 16-разряд-ное смещение соответственно.

Эффективный адрес при базово-индексной адресации равен сумме содержимого базового и индексного регистров, определяемых командой:

[DI]] [SI] у

Наиболее сложен механизм относительной базово-индексной адресации. Эффективный адрес в этом случае равен сумме 8- или 16-разрядного смещения и базово-индексного адреса:

эА=ЛвхП+Л01П+1айр8,1.

1 |ВР]} 1 [51] 1 авр1б

Форматы двухоперандных команд представлены на рис. 3.2. Пунктиром показаны поля, которые в зависимости от режима адресации могут отсутствовать в команде.

  • 1 байт
  • 1 байт
  • 1 байт

1 байт

КОП d w md reg r/m

a

1 байт disp L

1 байт

1 байт

і !

сімр і і і

[ disp Н

1 байт

1 байт

бкр Н І

data L

1 байт

data H

б

Рис. 3.2. Форматы двухоперандных команд микропроцессора 18086: а — формат команд типа Я Я и /?5; б — формат команды с непосредственным операндом

Поле КОП содержит код выполняемой операции. Признак указывает на длину операндов. При ы= 1 операция проводится над словами, а при н> = 0 — над байтами. Признак (1 указывает положение приемника результата. Признак с1=, если результат записывается на место операнда, закодированного в поле ге%, и с! = 0, если результат записывается по адресу, закодированному полями (т(1, г/т).

Следующий байт команды, называемый постбайтом, определяет операнды, участвующие в операции. Поле ^ указывает регистр регистровой памяти согласно табл. 3.3.

Поля тс! и г/т задают режим адресации операнда (табл. 3.4).

Таблица 3.3. Регистры памяти

гер,

Регистр

XV = 1

XV = 0

000

АХ

А1^

001

сх

сь

010

ох

оь

011

вх

вь

100

БР

АН

101

ВР

СН

по

Б1

ОН

111

01

вн

Таблица 3.4. Режимы адресации операнда

г/т

тб

00

01

10

11

и>= 1

и> = 0

000

(ВХ) + (81) (ОБ)

(ВХ) + (Б1) + сПзрБ (ОБ)

(ВХ) + (Б1) + сПвр 16 (ОБ)

АХ

АЬ

001

(ВХ) + (01) (ОБ)

(ВХ) + (01) + (И8р8 (ОБ)

(ВХ) + (О!) + сИвр 16 (ОБ)

СХ

СЬ

010

(ВР) + (81) (вв)

(ВР) + (Б1) + сИэрБ (вБ)

(ВР) + (Б1) + (Шр16 (ББ)

ох

ОЬ

011

(ВР) + (01) (вБ)

(ВР) + (01) + сИэрБ (вБ)

(ВР) + (01) + с1 вр 16 (8Б)

вх

ВЬ

100

  • (81)
  • (ОБ)

(Б1) + (Нерв (ОБ)

(Б1) + сИ8р16 (ОБ)

БР

АН

101

  • (01)
  • (ОБ)

(оо + аврв (ОБ)

(01) + сН8р 16 (ОБ)

ВР

СН

ПО

сИвр 16 (ОБ)

(ВР) + сНврБ (вБ)

(ВР) + сП8р16 (вБ)

Б1

ОН

111

  • (ВХ)
  • (ОБ)

(ВХ) + с!вр8 (ОБ)

(ВХ) + сП8р16 (ОБ)

О!

ВН

В табл. 3.4, помимо определения режима адресации оперативной памяти, указан также сегментный регистр, используемый по умолчанию для получения физического адреса. Применение другого сегментного регистра возможно введением специального префикса (дополнительного байта, который записывается перед командой).

В командах, использующих непосредственный операнд, признак 5 вместе с признаком определяет разрядность непосредственного операнда, записываемого в команде, и разрядность выполняемой операции (табл. 3.5).

Таблица 3.5. Разрядности операций

н>

5

Операция

Непосредственный операнд

0

0

8-разрядная

8-разрядный

0

1

Не используется

1

0

16-разрядная

16-разрядный

1

1

16-разрядная

8-разрядный, расширяемый знаком до 16 разрядов при выполнении операции

Изменение естественного порядка выполнения команд программы осуществляется с помощью команд передачи управления. К ним относятся команды переходов, циклов, вызова подпрограммы и возврата из нее, а также некоторые другие. Классификация команд переходов в ПЭВМ представлена на рис. 3.3.

Классификация команд переходов ПЭВМ

Рис. 3.3. Классификация команд переходов ПЭВМ

Физический адрес выполняемой команды определяется содержимым указателя команд 1Р и сегментного регистра команд

С8. Команды, меняющие значение обоих этих регистров, называются командами межсегментных переходов, а меняющие только значение 1Р, — командами внутрисегментных переходов.

Регистровая адресация. Операнды (источники и приемники) — это внутренние регистры МП: АХ, ВХ, СХ, ОХ, 8Р, ВР, 81, 01, а в операциях пересылки — дополнительные сегментные регистры.

Пример 3.3. МОУ АН, ВН.

Непосредственная адресация. Операнды — это константы, непосредственно задаваемые в команде МП (байты, слова, двойные слова).

Пример 3.4. МОУ АН, -2.

Адресация ячеек памяти. При вычислении адреса в памяти используются две составляющие — сегмент и смещение относительно его начала.

Пример 3.5. МОУ У1, 31Ь.

При прямой адресации в команде указывается то смещение, которое соответствует размещению в памяти соответствующего операнда. Обычно считается, что операнды находятся в сегменте данных 08. Прямая адресация используется, когда явно известен адрес операнда, например, при работе с системными областями памяти.

При косвенной адресации смещение соответствующего операнда в сегменте содержится в одном из регистров МП, например МОУ [ВХ], АЬ. Косвенная адресация позволяет легко организовывать доступ к сложным элементам данных, например к массиву данных. Для обозначения косвенной адресации название регистра заключают в квадратные скобки (ВХ — регистровая адресация, а [ВХ] — косвенная). Обычно в качестве регистра косвенной адресации используются: [ВХ], [81], [01] и [ВР]. Для [ВХ], [81], [01] неявно подразумевается сегмент 08, а для [ВР] — сегмент 88.

Косвенная адресация по базе означает, что исполнительный адрес вычисляется как сумма содержимого соответствующего регистра и некоторой константы. Этот способ адресации используется для доступа к полям структуры, начальный адрес которой задается в регистре, а смещение соответствующего поля — константой, записанной непосредственно в команде (применяются базовые регистры [ ВХ], [ВР] с соответствующими сегментами 08, 88).

Прямая индексная адресация эквивалентна косвенной по базе. При этом используются регистры 81, 01 и соответствующий 08-сегмент.

Пример 3.6.

МОУ Х3[01], О (аналогично МОУ [ХЗ + 01], 0);

МОУ ХЗ[ВХ][ОХ + 2], АН (ХЗ - адрес массива).

Адресация по базе с индексированием. В этом случае исполнительный адрес определяется как сумма трех составляющих: содержимого двух регистров и константы, задаваемой непосредственно в команде.

Пример 3.7.

База — ВХ, ВР. Индексы — 81, 01.

[ВХ + 81], [ВХ + 01] — с сегментом Э8.

[ВР + 81], [ВР + 01] — с сегментом 88.

В общем случае при использовании косвенной адресации исполнительный адрес можно представить следующим образом:

ЕА= [Регистр базы] + [Индексный регистр] + Константа.

Любая из этих компонент может отсутствовать.

Команды пересылки данных имеют общий формат с двумя операндами — источником и приемником,

например МОУ <приемник>, <источник>.

Пр и мер 3.8. Команды пересылок данных:

МОУ АН, ВН

МОУ АН, ВХ

МОУ АХ, -2

МОУ ОБ, В1, где В1 — адрес ячейки.

Команда ХСНО <оп.1>, <оп.2> — обмен операндов используется для любых РОН и переменных в памяти, кроме двух ячеек памяти.

Ниже приведены примеры команд.

Примеры арифметических команд:

  • • ADD <приемник>, <источник>;
  • • ADC <приемник>, <источник>;
  • • INC <приемник>;
  • • SUB <приемник>, <источник>;
  • • SBB <приемник>, <источник>;
  • • DEC <приемник>;
  • • MUL <исто4ник>;
  • • IMUL <исто4ник>;
  • • DIV <исто4ник>;
  • • IDIV <ИСТ04НИК>.

Примеры команд сдвига:

  • • SAL <операнд>, <вели4ина>;
  • • SAR <операнд>, <вели4ина>;
  • • SHL <операнд>, <вели4ина>;
  • • SHR <операнд>, <вели4ина>.

Примеры логических команд:

. AND, OR, XOR, NOT.

Примеры команд передачи управления:

  • • перехода JMP, JZ, JNZ, JCXZ;
  • • цикла LOOP;
  • • вызова подпрограммы и возврата из нее: CALL, RET;
  • • вызова прерывания и возврата из него: INT, IRET.

Примеры дополнительных команд:

  • • работы со стеком: PUSH, POP;
  • • установки и ояистки флагов: STC, CLC;
  • • холостого хода NOP.

Примеры команд ввода/вывода:

  • • IN ..<аккумулятор>, <адрес>;
  • • ОиТ..<адрес>, <аккумулятор>.

Примеры команд работы со строками:

. MOVS, CMPS, OUTS.

Команды безусловных переходов производят модификацию регистра IP или регистров IP и CS без предварительного анализа каких-либо условий. Существует пять команд безусловных переходов. Все они имеют одинаковую мнемонику JMP и содержат один операнд. Конкретный формат команды определяется соответствующим префиксом и приведен в табл. 3.6.

Таблица 3.6. Машинные коды некоторых команд

Команда

Байт кода команды

Схема операции

1

2

3..6

АОО

000000

md reg r/m

(disp8/16)

г(г/т) - г + г/т

lOOOOOsw

md 000 r/m

(disp8/disp 16)<У8/16

г/т = г/т +

0000010 vv

data L

(data H)

ас - ас +

Бив

00101 O^/vv

md reg r/m

(disp8/16)

г{г/т) - г{г/т) - (г/т)г

1OOOOOsw

md 101 r/m

(disp8/16)

г/т = г/т -

00101lOw

data L

(data H)

ас = ас -

А^

001000dw

md reg r/m

(disp8/16)

г(г/т) = г & г/т

1OOOOOsw

md 100 r/m

(disp8/16)

г/т = г/т &

OOlOOlOw

data L

(data H)

ас = ас &

Ой

000010dw

md reg r/m

(disp8/16)

г{г/т) = г V г/т

lOOOOOsw

md 001 r/m

(disp8/16)

г/т = г/т V

00001 lOw

data L

(data H)

ас = ас V

Примечание. В столбце «Схема операции» сокращение «ас» означает регистр-аккумулятор, в качестве которого используются регистр АХ при = 1 и регистр АЬ при = 0.

При прямом безусловном внутрисегментном переходе новое значение указателя команд 1Р равно сумме смещения, закодированного в соответствующем поле команды, и текущего значения 1Р, в качестве которого используется адрес команды, записанной вслед за командой перехода. Команды прямых межсегментных переходов содержат помимо нового значения 1Р и новое значение сегментного регистра С5.

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

Команды условных переходов — только внутрисегментные. По формату и способу формирования нового значения 1Р они аналогичны команде прямого внутрисегментного перехода с 8-разрядным смещением. Отличие их заключается в том, что в командах условного перехода механизм формирования нового значения 1Р включается лишь при выполнении определенных условий, а именно при определенном состоянии регистра флагов.

При невыполнении проверяемого условия в 1Р остается его текущее значение, т. е. адрес команды, следующей за командой условного перехода.

Ниже приведены примеры команд переходов различных типов.

Команды условного перехода:

disp L

Формат:

IP- IP+ 2, если условие не выполнено;

IP= IP+2 + disp L, если условие выполнено.

Пример 3.9.

JZ MARK; переход на метку MARK, если ZF = 1.

Команды прямого внутрисегментного перехода:

Формат:

г---------1

disp I

I_________г

IP= IP+ А + disp, где А — длина команды перехода (А = 2 или А = 3 в зависимости от длины смещения).

Пример 3.10.

JMP short ptr MARK; переход на метку MARK с использованием 8-разрядного смещения;

JMP near ptr MARK; переход на метку MARK с использованием 16-разрядного смещения.

Команды прямого межсегментного перехода:

КОП

IPL

1Р_Н

CSL

CS_H

Формат:

IP=JP_H, IP_L CS= CS_H, CS L.

Пример 3.11.

JMP far ptr MARK; переход на метку MARK к команде, находящейся в другом сегменте.

 
<<   СОДЕРЖАНИЕ   >>