- •Введение
- •1 Основы микропроцессорной техники
- •1.1 Классификация команд и архитектура ЭВМ
- •1.2 Секционный микропроцессор.
- •1.3 Однокристальный микропроцессор.
- •1.4 Микропроцессорный модуль.
- •3.1 Тип кода операции с dst и rsc
- •3.2 Тип кода операции с dst. Группа коман MOV
- •4 Организация стековой памяти
- •5 Команды сдвигов и приращений.
- •5.1 Команды приращений
- •5.2 Команды сдвига
- •6 Арифметико-логические команды
- •6.1 Команды сложения
- •6.2 Команда сложения с учетом переноса
- •6.3 Операция вычитания
- •6.4 Команда вычитания с учетом заема
- •6.5 Команда логической функции ИЛИ
- •6.6 Команда логической функции И
- •6.7 Команда «Исключающая ИЛИ»
- •Внутриразрядная сумма = 0
- •6.8 Команда сравнения — компарации
- •7 Команды ветвления и переходов
- •7.1 Команды ветвления
- •7.2 Команды перехода
- •8.1 Внутрисегментные переходы
- •8.2 Межсегментные переходы
- •10 Цепочные команды
- •11 Другие одиночные команды
- •13.1 Процедура прерываний и команды прерываний
- •Адрес
- •13.2 Режимы работы ПКП
- •13.3 Программирование ПКП
- •14 Параллельный интерфейс
- •15 Последовательный интерфейс
- •15.1 Антология последовательного интерфейса
- •15.3 Описание регистров 8250 и программирование
- •Регистр управления линией
- •Регистр управления модемом
- •15.4 Порядок инициализации 8250
- •16 Программируемый таймер
- •16.7 Временные диаграммы таймера
- •16.8 Программирование таймера
- •Чтение счетчика канала 2
- •16.9 Чтение содержимого счетчиков
- •16.10 Таймер на системной плате IBM PC
- •17 Клавиатурный интерфейс
- •18. Заключение
- •Приложение А
- •Действие
- •Сегментный регистр
- •Действие команды
- •Действие команды
- •Действие команды
- •SAHF — сохранение <AH> в F
- •Действие команды
- •Действие команды
- •Действие команды
- •Действие команды
- •Действие команды
- •Действие команды
- •Действие команды
- •Действие команды
- •Действие команды
- •Действие команды
- •Команда – действие команды
- •Команда – действие команды
- •Команда – действие команды
- •Команда – действие команды
- •Команда – действие команды
- •Команда – действие команды
- •Команда – действие команды
было безразлично). И ассемблер префикса повторения в этих случаях, естественно, отличается от безличного обозначения: REP.
В таблице 11 приведены ассемблер и КОПы префиксов повторения, используемые совместно с цепочными командами сравнения. В скобках указаны альтернативные обозначения ассемблера префиксов повторения.
Таблица 10 — Строчные команды
Тип |
Краткий комментария |
Ассемблер |
Адрес следующего элемента |
||
команд |
действия команды |
команды |
DF=0 |
DF=1 |
|
ы |
|||||
|
|
|
|
||
|
|
MOVSB |
DI=<DI>+1 |
DI=<DI>-1 |
|
000 |
M<ES:DI> :=<M<DS:SI>> |
|
SI=<SI>+1 |
SI=<SI>-1 |
|
MOVSW |
DI=<DI>+2 |
DI=<DI>-2 |
|||
|
|
||||
|
|
SI=<SI>+2 |
SI=<SI>-2 |
||
|
|
|
|||
101 |
M<ES:DI>=<AL> |
STOSB |
DI=<DI>+1 |
DI=<DI>-1 |
|
M<ES:DI>=<AX> |
STOSW |
DI=<DI>+2 |
DI=<DI>-2 |
||
|
|||||
110 |
AL:=<M<DS:SI>> |
LODSB |
SI=<SI>+1 |
SI=<SI>-1 |
|
AX:=<M<DS:SI>> |
LODSW |
SI=<SI>+2 |
SI=<SI>-2 |
||
|
|||||
|
|
CMPSB |
DI=<DI>+1 |
DI=<DI>-1 |
|
011 |
<M<DS:SI>>-<M<ES:DI>> |
SI=<SI>+1 |
SI=<SI>-1 |
||
|
|||||
CMPSW |
DI=<DI>+2 |
DI=<DI>-2 |
|||
|
|
||||
|
|
SI=<SI>+2 |
SI=<SI>-2 |
||
|
|
|
|||
111 |
<AL>-<M<ES:DI>> |
SCASB |
DI=<DI>+1 |
DI=<DI>-1 |
|
<AX>-<M<ES:DI>> |
SCASW |
DI=<DI>+2 |
DI=<DI>-2 |
||
|
Таблица 11 —Префиксы повторения для строчных команд
Ассемблер префикса |
Код |
Комментарий к выполнению префикса |
|
повторения |
операции |
повторения с командами типа CMPS и SCAS |
|
REPZ (REPE) |
F3 |
Повторяется весь цикл, если выполняется |
|
условие: CX≠0 и Z=1 (конъюнкция). |
|||
|
|
||
REPNZ (REPNE) |
F2 |
Повторяется цикл, если выполняется условие: |
|
CX≠0 и Z=0 (конъюнкция). |
|||
|
|
11 Другие одиночные команды
Микропроцессор 8086 реализует ряд команд, каждую из которых можно назвать индивидуальной. Действия их достаточно просты и не требуют особых разъяснений. Часть их, наиболее часто используемых, приведена в таблице 12.
Таблица 12
Ассембле |
КОП |
Комментарий действия команды |
|
р |
|
|
|
NOP |
90 |
Пустая команда. Не производит действий. |
|
|
|||
|
|
|
|
HLT |
F4 |
Останов. Микропроцессор прекращает свое функционирование и |
|
переходит в 3-е состояние. |
|||
|
|
62
STI |
FB |
Флаг IF=1 — разрешение аппаратных прерываний; |
CLI |
FA |
флаг IF=0 — запрещение аппаратных прерываний. |
STC |
F9 |
Флаг CF = 1; |
CMC |
F5 |
флаг CF = -<CF> — инверсия флага CF; |
CLC |
F8 |
флаг CF = 0. |
|
|
|
Другая группа команд позволяет заменять сегмент данных DS, используемый по умолчанию в командах, оперирующих с данными в области запоминающего устройства. Имеется в виду dst при mod<>112 (см. главу 3). Замена DS распространяется только на команду, следующую за командой замены сегмента. Эти команды называют префиксом замены сегмента или просто префиксом сегмента. Команды префиксов сегмента в ассемблере и машинных кодах приведены в таблице 13.
Таблица 13 — Префиксы замещения сегментов
Ассембле |
КОП |
Наименование |
Комментарий |
|
р |
|
|
|
|
CS: |
2E |
Командный префикс |
При формировании |
|
|
|
сегмента |
физического адреса |
|
SS: |
36 |
Стековый префикс |
данных вместо сегмента |
|
сегмента |
DS используется |
|||
|
|
|||
|
|
|
заданный сегмент. |
|
ES: |
26 |
Резервный префикс |
||
|
||||
|
|
сегмента |
|
|
|
|
|
|
Рассмотрим пример использования префикса сегмента.
Пример 1 — Пусть в регистре DS=0000, в регистре CS=5FC0. Необходимо составить фрагмент программы пересылки байта данных из ячейки памяти с адресом 100 в нулевом сегменте — по 105-у адресу программы, в составе которой должен находится составленный фрагмент программы.
Ответ: Поскольку программа выполняется в командном сегменте, то у приемника (dst) необходимо заменить сегмент данных на командный сегмент. Для источника никаких изменений не требуется, так как в DS по условиям примера уже содержится нулевое значение. Составляем фрагмент программы:
XOR AX,AX |
|
; загрузить в АХ ноль и <AX> |
MOV DS,AX |
;переслать в DS; |
|
MOV AL,[0100] |
;AL:=<MDS:0100>=<M0000:0100>; |
|
CS: |
|
;в следующей команде —CS вместо DS; |
MOV [0105],AL |
;MCS:0105=M5FC0:0105 := <AL>; |
63
Если здесь не использовать однократное переназначение сегмента, то пришлось бы составить, например, следующий фрагмент:
XOR AX,AX |
; загрузить в АХ ноль и <AX> |
|
MOV DS,AX |
;переслать в DS; |
|
MOV AL,[0100] |
;AL:=<MDS:0100>=<M0000:0100>; |
|
PUSH |
CS |
; содержимое CS в стек, а оттуда |
POP |
DS |
; в DS; |
MOV [0105],AL |
; MCS:0105=M5FC0:0105 := <AL>; |
В заключение можно отметить, что в настоящем пособии была рассмотрена только часть команд микропроцессора 8086. Но устойчивое знание даже этой части команд позволяет составлять на ассемблере программы и самостоятельно освоить нерассмотренные здесь команды. Полный перечень команд приведен в приложении А.
Здесь не были представлены команды ввода-вывода и команды прерываний, которые будут рассмотрены при изучении соответствующих интерфейсных схем. Группа этих команд малочисленна, но весь механизм их действия связан со специфическим функционированием отдельных контроллеров, входящих в состав микропроцессорной системы.
12 Общие сведения об интерфейсных контроллерах. Команды ввода – вывода
В главе 1 были представлены анализ структуры микропроцессорной системы и микропроцессорного модуля и организация системной шины. Исходя из этой информации, можно сделать вывод, что совершенно излишне «видеть» постоянно, как подключается та или иная интерфейсная схема (контроллер) к микропроцессорному модулю. Достаточно «ощущать» микропроцессорный модуль только посредством коммуникаций, то есть посредством системной шины. Следовательно, любая интерфейсная схема должна иметь стандартные коммуникационные входы и выходы для подключения к системной шине. Набор функциональных интегральных схем со стандартным единым способом подключения к системной шине и называется микропроцессорным комплектом. Функции обмена интерфейсных схем с системной шиной также стандартны.
Все контроллеры специализированы. Их специализация зависит от объекта, с которым микропроцессорный модуль осуществляет обмен информацией, и посредством которого осуществляет функции управления. (CONTROL —управление, то есть управляемый, а значит программируемый интерфейс). Из всех интерфейсных контроллеров можно выделить следующие типовые контроллеры:
— контроллер ОЗУ; его функции: сопряжение байтовой структуры ОЗУ с шиной данных системной магистрали; регенерация ОЗУ, если
64
ОЗУ — динамическое; организация ОЗУ, в случае большого объема, по строкам и столбцам;
—контроллер параллельного интерфейса с протоколом обмена ИРПР или CENTRONICS; как правило используется универсальный параллельный интерфейс;
—контроллер последовательного интерфейса с протоколом обмена RS-232 и ему аналогичных;
—контроллер прерываний (в некоторых микропроцессорных комплектах встроен в интерфейсные схемы обмена данными): выставляет по инициативе внешнего устройства запрос на аппаратное прерывание
микропроцессору и на ответный запрос микропроцессора «кто?» выставляет на шину данных вектор или адрес прерывания (начальный адрес подпрограммы обработки прерываний для соответствующего запроса внешнего устройства);
—контроллер временных меток — таймер;
—контроллер прямого доступа в память (КПДП): используется только в мощных микропроцессорных системах; реализует ускоренную «перекачку» массивов данных между ОЗУ и внешним устройством (флоппи-диском, компакт-диском и тому подобное), минуя микропроцессор; последнему, правда, в это время приходится «отдыхать». Перечисленный набор — это стандартный набор для минимальной конфигурации ЭВМ. Что можно еще добавить к основным интерфейсным схемам:
—контроллер флоппи-диска;
—контроллер жесткого диска типа «Винчестер»;
—контроллер видеоизображения (черно-белого и цветного);
—контроллер компакт-диска;
Последующий материал направлен на изучение только части основного комплекта, причем будет рассмотрена только часть функций, ими реализуемых. Обусловлено это поверхностным изучением интерфейсных схем, необходимым и достаточным, чтобы сформировать устойчивое представление о функциональных возможностях микропроцессорной техники.
Интерфейсные схемы, которые будут рассматриваться далее, разработаны фирмой Intel для 8-разрядной шины данных (интерфейсная шина, как правило, всегда 8-разрядная) и имеют следующие шифры :
—8259 — контроллер прерываний;
—8253 — таймер;
—8255 — параллельный интерфейс;
—8250 — последовательный интерфейс.
Все интерфейсные схемы (ИФ) имеют стандартные входы и выходы для сигналов системной магистрали. Следовательно, со стороны подключения к системной магистрали все интерфейсные схемы являются «безликими»? Это не совсем так. Чтобы понять, как микропроцессором
65
выбирается та или иная интерфейсная схема, рассмотрим схему подключения к системной шине абстрактной (обобщенной со стороны системной шины) интерфейсной схемы. Схема подключения ИФ приведена на рисунке 9. Попробуем на этом примере произвести систематизацию и сделать кое-какие выводы.
1)Выводы ИФ D7...D0 подключаются непосредственно к шине данных системной магистрали. Эти выводы могут быть:
а) входными или выходными (указано двунаправленной стрелкой);
в) отключенными от внутренней шины данных ИФ (значок Z говорит о том, что микросхема электрически может быть отключена от шины данных (ШД).
2)Вывод -WR подключается к стробу записи -IOWR, то есть ИФ при записи данных в ИФ может обслуживаться только командами вывода.
3)Вывод -RD подключается к стробу чтения -IORD, то есть ИФ при чтении данных из ИФ может обслуживаться только командами ввода.
Примечание – Контроллер ОЗУ аналогичными выводами
подключается к -MEMWR и -MEMRD соответственно (MEMORY —
66
память).
4) Вывод RES подключается к RES — общий сброс микропроцессорной системы.
Итак, по группам сигналов, рассмотренных в пунктах 1) – 4) для всех ИФ подключение со стороны системной шины одинаково, за исключением контроллера ОЗУ. Как же все-таки микропроцессор выбирает одну ИФ из многих? Для этих целей и существует адрес.
В микропроцессорных системах на базе МП 8086 адресная шина интерфейса сужена с 20 разрядов (А19...А0) до 10 разрядов (А9...А0). Дело в том, что число адресуемых элементов интерфейса и в этом случае велико (210 = 1024), что никогда полностью не реализуется.
Рисунок 9 — Схема подключения ИФ к системной шине
Так вот, каждая интерфейсная микросхема имеет от одного до трех адресных входов (на рисунке 9 — два входа: А1, А0) для адресации внутренних элементов интерфейсных ИС.
Общее свойство — каждая интерфейсная ИС имеет вход CS (CHIP SET - чип установить).
CHIP — жаргонное слово в электронике, утвердилось для обозначения кристалла кремния, в котором выращена ИС. Иногда этот вход в других ИС обозначается ОЕ (OUT EXTENDED — выход протянуть (до шины), то есть внутреннюю шину данных интерфейсной схемы подсоединить к внешней). Следовательно, интерфейсная ИС «слепа» и «глуха» к системной шине, пока на инверсном входе «- CS» не будет
«0».
Обычно этот выбор осуществляют с помощью дешифратора (дешифратор — набор комбинационных схем И) с инверсными выходами, на вход которого подают незадействованные непосредственно интерфейсной ИФ старшие разряды адреса. В рассматриваемом примере (рисунок 9) нужна была только одна комбинация выбора CS, поэтому можно (в данном случае — произвольно) обойтись только одной схемой И-НЕ.
Запишем логическое уравнение выборки ИФ согласно рисунку 9:
-CS = A9 A8 A7 A6 A5 A4 A3 A2,
или
CS = A9 A8 A7 A6 A5 A4 A3 A2.
Но для указания адреса одного из внутренних элемента ИФ такая форма записи не может быть достаточной. Для этого надо знать, как и какие элементы ИФ выбираются. Это делается при наличии CS=1 и с помощью логической функции ИФ: f(A1, A0). Эта функция выборки внутренних элементов ИФ дается в справочных данных в виде таблицы истинности.
Пусть, например, ИФ является мультиплексором |
и имеет |
3 восьмиразрядных входа (3 порта) с именами А, В и С |
и регистр |
управления портами с именем RGC. И пусть выбор элементов ИФ соответствует таблице истинности:
67
Имя ПортаАдрес А1 А0 |
||
A |
0 |
0 |
B |
0 |
1 |
C |
1 |
0 |
RGC |
1 |
1 |
Теперь выпишем полные адреса этих элементов в двоичном и шестнадцатеричном кодах с учетом уравнения выборки чипа и адресов внутренних элементов ИФ:
Таблица 14 —Синтез адресов выборки элементов ИФ
Имя |
А9 А8 А7 А6 А5 А4 А3 А2 |
А1 |
А0 |
Адрес |
|||||||
PA |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
3FC |
PB |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
3FD |
PC |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
3FE |
3 |
|
|
|
F |
|
|
C…F |
|
|
|
|
Естественно, что в микропроцессорной системе в любой момент времени микропроцессор ведет диалог только с одной интерфейсной ИС, поэтому недопустимо, чтобы в интерфейсе были элементы с одинаковыми адресами (уравнениями выборки чипа ИФ).
Итак, теперь известно, как по схеме подсоединения интерфейсной ИС к шине адреса системной магистрали можно определить адреса элементов интерфейса. Теперь можно познакомиться с командами ввода-вывода. Для этого сначала необходимо поточнее уяснить назначение сигналов системной магистрали: -IOWR, —IORD и - MEMWR, -MEMRD.
Если микропроцессор вырабатывает строб (короткий сигнал) - MEMRD (чтение ячейки памяти) или строб -MEMWR (запись в ячейку памяти), то это может быть вызвано только командами, оперирующими пересылкой данных между запоминающим устройством (ЗУ) и микропроцессором. Например,
MOV AX,[BX] или PUSH AX.
Если микропроцессор оперирует с интерфейсом внешних устройств, то он должен вырабатывать :
а) строб -IORD — при вводе данных из порта (INPUT); б) строб -IOWR — при выводе данных в порт (OUTPUT).
МП 8086 поддерживает следующие команды ввода-вывода: 1) Ввод.
а) Ассемблер: IN AL,DX; комментарий: ввести в регистр AL данные из порта, адрес которого взять из регистра DX.
б) Машинный код команды состоит из одного КОП: КОП
= ЕС.
Следовательно, прежде. чем использовать команду IN, надо в DX загрузить адрес порта.
Пример 1 — Ввести байт данных из порта В (смотрите рисунок 9 и таблицу 14):
68