Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Булатов В.Н. Архитектура микропроцессороной системы, состав машинных команд и основы программирования микропроцессорной .pdf
Скачиваний:
97
Добавлен:
02.05.2014
Размер:
7.1 Mб
Скачать

незаметно стремление развивать объем ОЗУ до объема внешних носителей. Что это? Факт, отражающий реальное положение дел в этой области? Или опять философский подход к решению проблемы? Что человеческий мозг ограничен по емкости, а размеры книжных полок и их количество ограничивать теоретически нечем?

Ну и, наконец, связь с внешним миром. Для того, чтобы это интеллектуальное устройство не было бы изолировано от внешнего мира, чтобы могло «слышать» и «видеть», «говорить» и «воздействовать», необходимо, как минимум, иметь входное и выходное интерфейсные устройства. Какие функции они реализуют? Их две.

Во-первых, с одной стороны они должны полностью сопрягаться с системной шиной по протоколу системной шины, и с другой стороны – по протоколу внешнего устройства сопрягаться с внешним устройством. Протоколы установления связи и обмена для внешних устройств, как правило, стандартизованы: RS-232, Centronics, IRPR и так далее. Знакомство с ними произойдет при изучении соответствующих интерфейсных схем. Таким образом, интерфейсные устройства (схемы) играют роль переводчиков. Отсюда и название: интерфейс.

Во-вторых, интерфейсное устройство должно быть согласовано по электрическим параметрам с обоими «разговаривающими». А эти сигналы бывают различными и по напряжению, и по мощности, и по составляющей помехе. Поэтому, интерфейсные интегральные схемы (ИИС), как правило, «обвязываются», то есть между ИИС и внешним устройством ставятся специальные приемники и передатчики. Это схемное решение: интерфейсная ИИС плюс обвязка —и называется адаптером.

Теперь, когда в общих чертах обрисована структура и функции ЭВМ минимальной конфигурации, можно перейти к понятиям: однокристальный микропроцессор, микропроцессорный модуль, микропроцессорная секция (секционный микропроцессор), однокристальная ЭВМ.

1.2 Секционный микропроцессор.

Вернемся к рисунку 1. Если из состава микропроцессора извлечь цифровой автомат, то микропроцессор превратится в микропроцессорную секцию со входами управления функциями АЛУ и чтением-записью РОНов.

Проигрыш — отсутствует реализация команд.

Выигрыш — можно самим реализовывать любую систему команд микропроцессора и обрабатывать любую длину слова (за 1 раз), так как синтезировать цифровой автомат предоставляется самим. Для секционных микропроцессоров даже существует такой термин: «Система команд пользователя».Типичные отечественные представители этого семейства:

К581 — 8р.,16р. n-МОП; К583 — 8xn р. И2П;

К588 — 16&n р. КМОП; К589 — 2&n р. ТТЛШ; К1800 — 4&n р. ЭСЛ;

10

К1804 — 4&n р. ТТЛШ; К1811 — 8&n р. n-МОП;

Здесь первая буква и последующие цифры означают семейство микросхем микропроцессорного комплекта; цифра после тире – число разрядов в секции; «n» – множитель (целое число), показывающий возможное увеличение размера обрабатываемого слова; «р.» - разряд; последние буквы – тип технологии (например, ЭСЛ – эмиттерно-связанная логика).

Однако, как показывает опыт, производители ЭВМ на секционных микропроцессорах (ряд ЭВМ СМ: г. Киев, г. Северодонецк — в Украине) все же реализуют известные системы команд. И это вполне понятно. Консерватизм в системе команд — это тоже путь к прогрессу в области программного продукта.

1.3 Однокристальный микропроцессор.

Однокристальный микропроцессор это собственно все то, что входит в процессор (рисунок 1, ПРОЦЕССОР).

Типичные представители:

 

(США)

(аналог, Россия)

 

Intel 8085

(1821BM85),

n-МОП;

Zilog 80

(1858BM80),

n-МОП;

F11/34 (DEC)

(1801BM3),

n-МОП;

MC 6800 (Motorola) (нет),

n-МОП .

F11/34 —микропроцессор фирмы Digital Equipment Corporation (DEC), с

одной из самых лучших системой команд. Изготавливается по специальной вентильной технологии. Системная шина: Q-bus. Аналог в России —1801ВМ3. Как самый надежный из семейства однокристальных микропроцессоров (МП) используется в военной технике.

Известные родоначальники персональных ЭВМ:

на основе МП F11 —ПЭВМ PDP-11 с операционной системой RT-11;

на основе МП МС6800 —ПЭВМ «Mackintosh» .

1.4 Микропроцессорный модуль.

Этот термин совершенно не принципиальный. А появился он потому, что фирме Intel на определенном этапе не удалось вырастить очередной микропроцессор в одном кристалле. Представьте себе, что некто «вытащил» из процессора генераторную часть ЦА (рисунок 1) и часть ЦА, которая управляет системной шиной, и «обрезал» эти связи, оставив выводы этих связей наружи.

Таким образом, получилось три кристалла, и, как следствие, три корпуса микросхем. Для одного из семейств Intel-8080 одна из них называется генератор-формирователь (8224), другая (8228) контроллер системной шиной (CONTROL — управление) и третья (8080) — остатки процессора, которую принято называть: микропроцессор. Понятно, что процессором это все может называться только тогда, когда все эти кристаллы соединятся соответственно «обрезанными» выводами в единое логическое устройство. Вот это все: 8224 & 8228 & 8080 и есть микропроцессорный модуль (МПМ). Так выглядит

11

родоначальник, составляющий основу популярного семейства компьютеров IBM PC на основе МПМ из четырех микросхем (кристаллов или чипов):

Чип

Микропроцессорная система

 

 

 

 

8284

 

Известный базовый 16-разрядный PC/XT

 

8288

 

фирмы IBM с операционной системой

 

8086

 

MS-DOS

 

8087

 

фирмы Microsoft.

 

 

 

 

 

 

 

 

1.5 Однокристальные ЭВМ (ОЭВМ).

Пояснить, что такое ОЭВМ, оказывается, достаточно просто. Все, что составляет ЭВМ (рисунок 1), выращено на одном кристалле. Понятно, что по возможностям ОЭВМ уступают таким гигантам как F-11 или 8086. Но они и создаются для «мелких» целей и используются: для управления печатающим устройством, клавиатурой, изображением дисплея и тому подобное. Здесь преуспели фирмы Intel и Motorola. Самые популярные 8-и разрядные ОЭВМ: 8048 (1816РВЕ48), 8050, 8031,8051,8052.

Номенклатура ОЭВМ велика и характеризуется большим разнообразием. Связано это с разработкой специализированных ОЭВМ для аудио- и видеотехники, техники связи, систем регулирования, информационноизмерительных систем и так далее. Появился целый класс ОЭВМ со встроенными ЦАП и АЦП, с элементами регулирования для следящих динамических систем, реализующие быстрые функциональные преобразования (например, преобразование Фурье) и так далее.

В заключение представляется интересным провести обзор тенденций, существующих на момент издания пособия, в области разработок и производства средств микропроцессорной техники. Судя по приведенной в настоящей главе информации по микропроцессорам, все они разработаны и изготовлены в США. Значит ли это, что США — лидер в этой области? Анализ рынка интегральных схем показывает, что в области разработок больших интегральных схем лидируют Япония, Тайвань, подтягивается Южная Корея. Сегодняшний высокий технологический уровень в этой области в США поддерживают специалисты именно из этих стран. Европейцы, из-за необходимости платить высокую зарплату производственному персоналу, вообще не конкурентоспособны и в подавляющем случае покупают (или производят на дочерних фирмах) микропроцессорные комплекты в Азии.

Особым образом дело обстоит в России. Имея высокий научнотехнический потенциал, но при отсутствии конкуренции и по причине закрытости все лучшие разработки малоизвестны и связаны, главным образом, с оборонным и космическим комплексом. Что касается западных микропроцессорных средств, то российские специалисты достаточно легко проникали в технологические тонкости и фирмы Intel, и фирмы DEC, и быстро осваивали производство копий интегральных схем или их аналогов для

12

внутренних нужд. Теперь, в связи с вхождением России в мировой рынок, нашим производителям необходимо или изобретать что-то свое, или покупать лицензии на необходимые технологии, или покупать дешевые комплектующие и осваивать производство ЭВМ. Сейчас на рынке России появились различные модификации компьютера ВИСТ-1000 с микропроцессорами, которые реализуют систему команд микропроцессора Pentium (AMD, Cyrix). Компьютеры собираются в г. Зеленограде, в ведущем в России предприятииразработчике ИС. Почти все большие ИС и блочные комплектующие приобретаются в Азии. Значит ли это, что принят третий вариант. Время покажет.

2 Состав команд и архитектура микропроцессора 8086

Микропроцессор 8086 не самый лучший и не самый надежный микропроцессор. Но он один из самых дешевых, как и весь его микропроцессорный комплект ИС, разработанный для создания единой микропроцессорной системы. Именно на этом комплекте были реализованы компьютеры IBM PС/ХТ, а так же некоторые отечественные компьютеры 80-х годов, такие, как ЕС-1841, ЕС-1843, Искра-1030.11 и другие. Для изучения микропроцессорных средств неважно, какой микропроцессор будет взят в качестве изучаемого объекта. Все они – братья-близнецы. И достаточно познакомиться с одним, чтоб иметь представление о других. Тем более, что во всех последующих поколениях — вплоть до Pentium-II, можно обнаружить все основные черты процессора 8086, как по структуре, так и по составу команд.

Как уже отмечалось в предыдущей главе, микропроцессор 8086 является составной частью микропроцессорного модуля, состоящего из генератора-формирователя 8284 и контроллера системной шины 8288, и только микропроцессорный модуль является единым целым, то есть, процессором. При изучении подобных устройств рассматривают не структурную, и тем более, не функциональную схему, а архитектуру устройства — новый для технических средств термин. Архитектура —это такое представление устройства, которое демонстрирует функциональные возможности аппаратных средств (процессора, ОЭВМ или вообще ЭВМ) с точки зрения воздействия на них программных средств (то есть, последовательности команд).

На рисунке 3 представлена архитектура микропроцессора 8086. Изучение можно начать с элементов, которые формируют физический адрес. Из рисунка 3 видно, что адресное пространство равно 220=1Мбайт (1 мегабайт). Почему адресное пространство измеряется в байтах? Дело в том, что в качестве элемента обмена информации вообще принято считать коды ASCII (отечественные аналоги —КОИ-7, КОИ-8 —соответственно 7-разрядные и 8-разрядные двоичные коды). Восьми разрядов вполне достаточно (28=256), чтобы закодировать латинский и русский (заглавный и строчный) алфавиты, цифры, знаки препинания, математические обозначения и специальные управляющие сигналы, как перевод каретки

13

(CR или ВВОД), перевод строки, звуковой сигнал и тому подобное. Ниже приведена таблица (таблица 1) для одной из альтернативных кодировок

символов для IBM совместимых компьютеров.

Рисунок 3 – Архитектура МП модуля 8086

Поэтому любые носители: древние — перфолента, менее древние – магнитная лента, современные — магнитные поверхности дисков и лазерный диск (Cdisk) — все это запоминало и запоминает (то есть, записывает на себя) восьми разрядным кодом, то есть, байтом. А поскольку ПЗУ и ОЗУ —это те же носители информации, то и размер одного слова, записываемого по одному адресу, составляет 1 байт. Шина данных системной магистрали может быть 16-разрядной, 32-разрядной, но логическое обращение к памяти (через специальную схему — контроллер динамической памяти) всегда происходит так: по одному адресу — 1 байт.

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

14

без напряжения укладывается в пространство 216=64 Кбайта. А потом все связывают главной (резидентной) программой.

Таблица 1 —Коды символов ПЭВМ для внешних устройств Старший разряд

 

код

0

1

2

3

4

5

6

7

8

9

А

В

С

D

Е

F

 

0

NUL

 

SP

0

 

P

'

p

A

Р

а

р

Ё

М

1

 

DCI

!

1

A

Q

a

q

B

С

б

с

ё

л

2

 

DC2

"

2

В

R

b

r

B

Т

в

т

/

а

3

 

DC3

#

3

С

S

c

s

Г

У

г

у

 

д

4

 

DC4

$

4

D

T

d

t

Д

Ф

д

ф

 

ш

5

 

 

%

5

E

U

e

u

E

Х

е

x

 

и

6

 

 

&

6

F

V

f

v

Ж

Ц

ж

ц

 

й

7

BEL

 

'

7

G

W

g

w

3

Ч

з

ч

 

р

8

BS

CAN

(

8

H

X

h

x

И

Ш

и

ш

 

9

HT

EM

)

9

I

Y

i

y

И

Щ

и

щ

 

а

A

LF

ESC

*

:

J

Z

j

z

К

Ъ

к

ъ

 

з

В

VT

 

+

;

К

k

±

Л

Ы

л

ы

 

р

С

FF

 

,

<

L

/

l

\

М

Ь

м

ь

 

я

D

CR

 

-

=

M

/

m

\

Н

Э

н

э

 

д

E

SO

 

.

>

N

^

n

b

О

Ю

о

 

ю

 

 

F

SI

 

/

?

O

o

DEL

П

Я

п

я

SP

Так вот, регистры DI, SI, BP, SP, IP — 16-и разрядные регистры и, в зависимости от типа команд, являются источниками адреса ЕА или участвуют в формировании ЕА (ЕА —эффективный адрес) фрагментов программ. Их выходы мультиплексируются на шину A15...A0 (до сумматора). Программист, когда указывает те или иные адреса ЕА, имеет ввиду именно эти регистры.

Самый важный адресный регистр — регистр IP — регистр-счетчик текущего адреса программы (программный счетчик). После выборки из ЗУ очередного кода операции какой-либо команды его содержимое автоматически увеличивается на «1», подготавливая тем самым выборку следующего операнда из ОЗУ.

SP —указатель стека (Stack) — тоже адресный регистр-счетчик, только для специальной — стековой памяти. С этим регистром предстоит поближе познакомиться, когда будут изучаться стековая память и ее команды.

BP — просто регистр адреса стековой памяти. Используется программно для перехвата <SP> и его временного хранения.

Регистры SI и DI предназначены, главным образом, для использования в специальных — цепочных (или строковых) командах, когда, например, необходимо «переместить» массив данных из одного места ОЗУ (ПЗУ) в другое место ОЗУ. В этих цепочных командах SI хранит адрес источника данных (src),

15

а DI — адрес приемника данных (dst). При этом после каждой пересылки одного операнда их содержимое автоматически увеличивается (или уменьшается — это как задано направление), подготавливая адреса транспортировки очередного операнда.

Другая группа регистров называется сегментной (RS) и тоже участвует в формировании физического адреса. Обычно в других мощных микропроцессорах, где адресное пространство от 1 Мбайт до 4 Гбайт, роль сегментного регистра выполняет регистр с одним именем. И это, в общем-то, достаточно. Но фирма Intel — не как все, и в данном микропроцессоре их четыре. Главное назначение сегментных регистров — расширение адресного пространства. Сегментные регистры — те же 16-разрядные регистры, как и адресные. Но их содержимое гораздо «тяжелее»: A19...A4.

Физический адрес ОЗУ/ПЗУ автоматически вычисляется в результате следующего сложения:

RS: A19A18A17A16A15A14A13A12A11A10A9A8A7A6A5A40 0 0 0

+

ЕА: 0 0 0 0 A15A14A13A12A11A10A9A8A7A6A5A4A3A2A1A0

———————————————————————————————————————

Add:A19A18A17A16A15A14A13A12A11A10A9A8A7A6A5A4A3A2A1A0

Для удобства, чтобы не писать длинные двоичные числа, далее будут использоваться их шестнадцатеричные свертки. Так, например, двоичное число 1110 1111 0010 1100 есть EF2C в шестнадцатеричном коде (Н-коде). (Рекомендуется иметь постоянно под рукой таблицу перевода десятичных чисел от «0» до «15» в двоичную и шестнадцатеричную формы).

Следовательно, если в сегментном регистре находится число 1CDO, а ЕА= F156, то физический адрес на шине адреса системной магистрали будет:

1CDO + F156

—————

2BE56

На рисунке 3 видно, что выходы сегментных регистров тоже мультиплексируются. Почему их четыре и когда они используются? Для начала необходимо обратить внимание, что последняя буква у них S, что значит — сегментный. Теперь разберемся с первыми буквами.

C – command —командный. CS используется при формировании только выборок команд из ЗУ совместно с IP (указывают: CS:IP);

S — stack — стековый. SS используется только при формировании адреса стековой памяти (стека) совместно с SP (указывают: SS:SP) или BP (SS:BP);

D – data — данные. DS по умолчанию используется в пересылках данных между микропроцессором и ЗУ совместно с адресом ЕА этих данных, указанных прямо или косвенно в команде;

ES — резервный сегментный регистр. На этом пока можно закончить знакомство с сегментными регистрами.

16

Далее, на рисунке 3 видно, что сегментные и адресные регистры доступны со стороны шины данных. А поставленные рядом с именами регистров числа — это номера (или адреса), на которые они (если они указаны в коде операции) должны откликаться.

Следующая группа регистров: AX, BX, CX и DX. Из рисунка 3 следует, что они подключены к ВШД — внутренней шине данных, и что они могут функционировать как 16-разрядные регистры в количестве 4 штук или как 8-разрядные в количестве 8 штук. Размер регистра полностью определяется кодом операции команды. Рядом с именем регистра в скобках указан его номер (адрес). Эти регистры в командах используются самым различным образом. Поэтому они получили название: РОНы —регистры общего назначения. Правда, есть одно небольшое примечание: ввод-вывод данных осуществляется только через регистр AL (или AX), поэтому этот регистр еще иногда называют аккумулятором. Хотя для МП 8086 это совершенно нехарактерно. Дело в том, что МП 8086 «вырос» из МП 8080, а там регистр A используется как накопитель результата всех арифметико-логических операций.

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

Кроме этого, выход АЛУ 6-ю разрядами подключен еще к одному регистру — регистру флагов F. Слово «флаг» в данном случае жаргонное слово. По смыслу, в этом регистре хранится слово состояния процессора (PSW — processor status word), где каждый из разрядов регистра F хранит результат какой-либо операции или указание для действия определенной команды. Забегая вперед, можно привести пример: если в результате сложения получился ноль, то разряд ZF (флаг ZF) установится в «1». Или, если флаг IF установлен в «0», то будут запрещены все аппаратные прерывания.

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

CF — устанавливается в единицу (взводится), если произошло переполнение формата. Например, складываются два байта (слова), и происходит переполнение: старший разряд суммы выпадает за пределы байта (слова). Чтобы его не потерять (как в школе учили: 8+7 — пишем 5 и один держим в уме), он автоматически попадает в СF.

PF — устанавливается, если двоичное число в младшем байте состоит из четного числа единиц. Используется для контроля ввода-вывода. Дело в том,

17

что коды обмена информации в каналах связи — КОИ-7 (7 разрядов), поэтому для надежности 8-й бит (старший) дополняют до четного или нечетного (говорят: контроль по чету или нечету) числа единиц в байте. И в случае потери одного бита нарушается четность или нечетность, и эту ситуацию — по изменению флага PF — можно сразу зафиксировать.

AF —флаг переполнения, но только младшей тетрады байта. Используется при сложении чисел, представленных в двоично-десятичной форме.

ZF —флаг нуля, или нулевого результата. Если ZF:=1 (взвелся), то это значит, что получен результат, равный нулю.

SF — флаг, а точнее бит знака. Дело в том, что если число представлено со знаком, то под его место отводится всегда старший бит. Если это байт, то D7, если слово, то — D15. Но поскольку микропроцессор не знает, что текущий результат со знаком или без знака, он («на всякий случай») автоматически запоминает старший бит байта (слова), полученного в результате арифметикологической операции. («0» - это «+», «1» - это «-»).

OF — флаг арифметического переполнения; подразумевается, что число со знаком. И если мантисса полученного результата «наезжает» на знаковый бит, то OF=1. Алгоритм контроля достаточно прозрачен: если (+) + (+) = (-), то OF=1 (так как при сложении положительных чисел сумма должна быть положительной, а иначе — произошло арифметическое переполнение: мантисса числа увеличилась настолько, что «затерла» знак числа). Или: (-)+(-) = =(+), то OF=1 (то есть, наоборот). Аналогично и для вычитания. С остальными флагами: IF, DF, TF, которые устанавливаются программно, можно будет познакомиться по мере изучения соответствующих команд.

Теперь можно перейти к центральному элементу микропроцессорного модуля — цифровому автомату (ЦА). Главная его функция заключается в том, чтобы выполнить алгоритм (определенную последовательность действий) согласно коду операции (который на все время выполнения команды хранится в регистре кода операции (РКОП)), и по окончании команды загрузить в РКОП код операции следующей команды.

Рассмотрим кратко все управляющие сигналы, с помощью которых микропроцессорный модуль «общается» с системной шиной:

MW (-MEMWR) — строб записи; используется в системной шине в качестве строба записи информации, выводимой из МП в ОЗУ.

MR (-MEMRD) —строб чтения; используется в системной шине в качестве сигнала подключения на время длительности строба выхода какоголибо элемента ОЗУ к шине данных ШД. По заднему фронту информация на ШД фиксируется в МП.

IOW (-IOWR) — то же самое, что и -MW, только в отношении интерфейсных схем.

IOR (-IORD) — то же самое, что и -MR, только в отношении интерфейсных схем.

INT (-INTR) —запрос от внешнего устройства срочно его обслужить (запрос на прерывание). Микропроцессор, выполнив до конца текущую

18

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

INTA — строб чтения вектора прерывания (начальной метки подпрограммы обработки прерываний) из регистра векторов (контроллера прерывания). Вектора заносятся программно после того, как становится известным, где в ОЗУ/ПЗУ располагаются те или иные подпрограммы обработки прерываний. Этот строб подключает выход регистра векторов (контроллера прерываний) к шине данных.

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

HLDA — сообщение внешнему устройству: «Я обнаружил HOLD и перешел в 3-е состояние; можешь забирать системную шину».

RDY — сигнал разрешения генерации тактовых импульсов. Необходимо отметить, что внутри цифрового автомата находится кварцевый генератор, вырабатывающий сигнал OSC с частотой 14,31818НГц. Этот генератор работает непрерывно. Сигнал с генератора делится на 3, образуя сигнал CLK с тактовой частотой 4,772727...МГц, который:

а) выводится наружу на системную шину и может использоваться для различных целей (для таймера, последовательного интерфейса и так далее);

б) через схему «И» подается непосредственно на тактируемые входы цифрового автомата; на второй вход схемы «И» подается RDY. Отключение этого сигнала позволяет «заморозить» на некоторое время выполнение команды

внужном месте ее выполнения (стоп-кадр). Это дает возможность сопрягать во времени «быстрый» процессор с «медленным» устройством, растянув во времени, например, строб -IOW или строб -IOR на несколько тактов, чтобы интерфейсная схема успела скоммутироваться с шиной данных.

RES — сигнал сброса МП в исходное состояние. При подаче этого сигнала на вход МП последний переходит в 3-е состояние (все выводы переходят в высокоомное состояние). В момент снятия сброса происходят следующие действия: CS:=FFFF, IP:=0000. Затем происходит ввод содержимого шины данных в РКОП и начинается первое действие. Следовательно, по адресу FFFF:0000 должна располагаться первая команда самой первой программы, приводящей всю микропроцессорную систему (МПС) в исходное состояние. Поэтому, этот адрес принадлежит ПЗУ. А программа, приводящая МПС в исходное состояние, называется программой инициализации, а сам процесс — инициализацией (INIT). С элементами инициализации будет возможность познакомиться при изучении интерфейсных схем.

Атеперь можно перейти к форматам команд микропроцессора 8086. Размер команды зависит от функции, которая закладывается в команду. Этот размер находится в пределах от 1-го байта до 6-и байт. Сама команда разделяется на код операции (набор управляющих функций для цифрового автомата) и возможных одного или двух операндов, следующих за кодом операции. Все это в ЗУ должно располагаться последовательно с

19

нарастанием адреса (рисунок 4). В чем заключается процесс выборки? Сначала МП загружает в РКОП КОП 1-й команды, и цифровой автомат начинает выполнять алгоритм этого КОПа. По нему ЦА распознает, что прежде, чем выполнять команду, для ее выполнения надо выбрать еще 1 байт данных из ЗУ по адресу i+1. После этого ЦА подготавливает выборку следующего кода операции: IP:=<IP>+1=i+2 —и выполняет выбранную команду. После выполнения 1-й команды МП загружает байт данных из ЗУ по адресу, хранящемуся в IP (там i+2) в регистр кода операции. И начинается выполнение следующей команды. И так далее.

Рисунок 4 —Расположение команд в ЗУ

Следовательно, с нашей стороны (со стороны пользователя) требуется только быть внимательным и правильно расположить команды в ОЗУ.

В заключение необходимо отметить, что при написании программ на языках высокого уровня (PL, PASCAL, FORTRAN, CИ и т.п.) программист не видит, как трансляторы этих языков превращают (транслируют) составленные программы в последовательность команд в машинных кодах (то есть, на машинном языке). Такие программы, как правило, получаются громоздкими. Дело в том, что одна команда PRINT, например, на Бейсике реализуется программой на ассемблере из 14— команд, где указываются и адреса источника выводимого массива на печать, и адреса портов, к которым подключен принтер. При этом программа реализует последовательность действий по протоколу обмена данными CENTRONCS с принтером. Программа, выполняющая то же действие и написанная на машинном языке, проще и меньше объемом.

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

20

3 Команды пересылки и загрузки. Способы адресации.

Перед тем, как приступить к изучению команд МП 8086, целесообразно определить границы состава команд МП 8086, которые не следует переходить. Дело в том, что МП 8086 имеет множество дублирующих друг друга команд. Это связано с тем, что МП 8086 «вырос» из МП 8080, и разработчики сохранили в 86-м процессоре до 70% состава команд 80-го процессора. А 80-й процессор — однобайтовый. Это решение фирмы Intel никак нельзя назвать удачным. Поэтому есть смысл изучить прежде всего команды 86-го процессора как 16-разрядного МП.

Далее необходимо отметить еще одну проблему, которая заключается в том, что этих команд набирается свыше 4000. И если их все изучать по одной, то на это может уйти много времени. Наиболее эффективный метод изучения команд —комплексный, на основе объединения однотипных по коду операции (КОП) команд и синтеза КОП и команд в целом, как в машинных кодах так и в ассемблере. При этом полезно еще раз показать обоснованность использования дублирующего машинные команды и, на первый взгляд, искусственного языка ассемблера. Чтобы выявить разницу между машинным кодом команды и ассемблером этой же команды, рассмотрим следующий пример. Как люди общаются друг с другом? Звуком, то есть акустическими волнами, которые представляют собой сигнал со сложным спектром. Это аналог машинного кода. Со временем человечество сообразило, что таким сложным физическим процессом оперировать можно только в очень ограниченных случаях. И придумало для каждого звука его «ассемблер» (assemble - собирать, монтировать), то есть букву — графический символ. Этому «ассемблеру» нас учат сразу с детских лет, чтобы мы могли общаться и развиваться, не ограничиваясь только использованием звука. Представить трудно, сколько было бы проблем, и где бы было сегодня человечество, если бы не придумали этот удобный заменитель звуковому сообщению.

Так и в ЭВМ для каждой индивидуальной и, как правило, сложной совокупности логических действий придумали простое и понятное обозначение. В чем же оно заключается? Пусть, например, необходимо из пункта А в пункт В переслать то, что хранится в пункте А. Принятое обозначение комментария в краткой форме: В:= <А>, т.е. В присвоить содержимое А. Или: <А> В, то есть содержимое А переслать в В. Итак, АиВ— это, собственно, источник (src) и приемник (dst) сообщений (не физического предмета). Вопрос: а что остается в А? А то же, что и было; потому что, если один абонент передал другому сообщение, то теперь этим сообщением владеют оба. Классически на ассемблере это обозначают:

MOV A,B

(сокращенное от move —переместить). Именно такой ассемблер у многих микропроцессоров и ОЭВМ. Но фирма Intel (вероятно, чтобы не иметь проблем с авторскими правами), решила это сделать так:

21

MOV B,A

Таким образом, у нас в команде пересылки первым будет указываться приемник, а вторым (через запятую) — источник. Но это не существенно. Главное, что таким образом гораздо удобнее и писать программу, и читать ее.

Теперь вернемся к машинным кодам МП 8086. Команда (основная) состоит из кода операции (16 разрядов) и, если того требует КОП, одного или двух операндов, стоящих вслед за КОПом в последовательности, согласно их востребованию. Отсюда следует, что главное — это знать все о самом коде операции, а их два вида:

1)для двух абонентов (mov a,b);

2)для одного абонента (mov a,data).

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

Итак, как же выглядят коды операции для этих двух случаев, но не только для команд MOV, а вообще для 16-разрядных КОП? Рассмотрим эти два типа:

1) для dst и rsc:

2) только с dst:

Из обоих форматов следует, что у них есть некая общая (универсальная) часть и совершенно индивидуальная —микрокод операции (микроКОП), который собственно и делает один тип команд отличным от других типов. Займемся пока общей частью. Видно, что она достаточно запутана.

22