Лекции по дисциплине Микропроцессоры
Оценка 4.7

Лекции по дисциплине Микропроцессоры

Оценка 4.7
docx
06.05.2020
Лекции по дисциплине Микропроцессоры
Работа микропроцессора.docx

    

    

 

Работа микропроцессора 8086 с памятью  и регистрами

устройств ввода-вывода

1. Организация памяти

 

     Микропроцессор  8086  обеспечивает адресацию памяти емкостью 1 Мбайт. Адресное пространство памяти представляет собой одномерный массив байт,  каждый  из  которых  имеет 20-битный физический адрес.

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

     Четыре смежных байта памяти образуют 32-битное слово  (двойное слово), именуемое указателем  и  представляющее  собой полный адрес памяти "сегмент:смещение".  Старшее слово  при  этом задает базовый адрес (начало сегмента), а младшее - смещение. Такие указатели применяются для адресации данных и команд, находящихся вне текущих сегментов.

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

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

 

Сегментация

 

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

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

Зарезервированные области памяти

     Две области  адресного  пространства  памяти зарезервированы для выполнения особых функций,  связанных с обработкой прерываний и системным  сбросом.  Этими  областями  являются первые 128 байт (физические адреса 00000-0007F) и последние 16  байт  (физические адреса FFFF0-FFFFF). Данные области использовать для других целей нельзя.

 

2. Ввод-вывод

 

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

     Адресное пространство ввода-вывода содержит до 64К 8-битовых портов или до 32К 16-битовых  портов.  Команды  IN (ввод)  и  OUT (вывод) передают  данные  между  аккумуляторами AL (байты) или AX (слова) и адресуемыми портами.

     Восемь ячеек  F8-FF в пространстве ввода-вывода зарезервированы для системных целей, и использовать их в прикладных программах не рекомендуется.

3. Организация памяти ЭВМ типа IBM PC

 

     Память ЭВМ IBM PC организована следующим образом: Первые 640 Кбайт адресного пространства с адресами  от  00000  до 9FFFF выделены под  оперативную память, а  остальные  384 Кбайт c адресами от A0000 до FFFFF  используются  для  размещения  ПЗУ  и отображаемого на память ввода-вывода.

     В начале области ОЗУ размещена область векторов  прерываний: 256 векторов, занимающих по 4 байта памяти. После них расположены области данных и программ операционной системы.  Оставшуюся часть ОЗУ занимают программы пользователя.

     Адреса в области ПЗУ и отображаемого ввода-вывода  распределены следующим образом:

     A0000-AFFFF  -  отображенная на память область  ввода вывода дисплея в графическом режиме;

     B0000-B7FFF  -  отображенная на память область  ввода вывода дисплея в текстовом монохромном режиме;

     B8000-BFFFF  -  отображенная на память область  ввода вывода дисплея в цветном текстовом режиме;

     C0000-EFFFF  -  область  ПЗУ жесткого диска, видеоадаптера и других устройств;

     F0000-FFFFF  -  область  ПЗУ  программ  тестирования ЭВМ при запуске, начальной загрузки операционной системы и базовой системы ввода-вывода.

     В ЭВМ IBM PC используются порты с адресами 0000-03FF, причем адреса  0000-00FF  используются  системной  платой,  а  остальная область выделена для устройств пользователей.

    

4. Режимы адресации микропроцессора Intel 8086

 

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

обрабатываемым командой данным.

     Общий формат команды:

Код операции 

Операнд  

  . . .   

Операнд

 

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

     Способ определения  операнда  называется  режимом адресации. Рассмотрим наиболее  типичные  режимы  адресации  микропроцессора 8086. Они  разделяются  на два класса - режимы адресации данных и режимы адресации переходов.

1.     Режимы адресации даных

 

          Различают следующие режимы адресации данных:

  1) Непосредственный  -  данное длиной  8  или  16  бит является частью команды.

  2) Прямой - 16-битный эффективный адрес данного является частью команды.

  3) Регистровый  -  данное  содержится  в  определяемом командой регистре.  16-битный операнд может находиться в регистрах AX, BX, CX, DX, SI, DI, SP или BP,  а  8-битный - в регистрах AL, AH, BL, BH, CL, CH, DL или DH.

  4) Регистровый косвенный - эффективный адрес данного  находится в базовом регистре BX или одном из индексных регистров.

  5) Регистровый относительный  -  эффективный  адрес равен сумме 8- или 16-битного смещения и содержимого  базового или индексного регистров.

  6) Базовый индексный - эффективный адрес равен сумме содержимого базового и индексного регистров.    

  7) Относительный базовый индексный  -  эффективный адрес  равен сумме 8- или 16-битного смещения и базово-индексного адреса.

     Допустим, что регистр BX содержит  число  0158  в  16-ричном коде, регистр  DI - число 10A5,  смещение равно 1B57,  сегментный регистр данных DS содержит число 21000.

     Тогда, если  в качестве сегментного регистра применяется DS, различные режимы адресации дают следующие  эффективные и физические адреса:

  1) Прямой:

Эффективный адрес EA = 1B57,

Физический адрес = 1B57 + 21000 = 22B57.

  2) Регистровый косвенный (с участием регистра BX):

Эффективный адрес EA = 0158,

Физический адрес = 0158 + 21000 = 21158.

  3) Регистровый относительный (с участием регистра BX):

Эффективный адрес EA = 0158 + 1B57 = 1CAF,

Физический адрес = 01CAF + 21000 = 22CAF.

  4) Базовый индексный (с участием регистров BX и DI):

Эффективный адрес EA = 0158 + 10A5 = 11FD,

Физический адрес = 011FD + 21000 = 221FD.

  5) Относительный базовый  индексный  (с участием  регистров  BX и DI):

Эффективный адрес EA = 0158 + 10A5 + 1B57 = 2D54,

Физический адрес = 02D54 + 21000 = 23D54.

2.     Режимы адресации переходов

 

         Различают следующие режимы адресации переходов:

  1) Внутрисегментный прямой  -  эффективный адрес перехода равен сумме 8- или 16-битного смещения и текущего содержимого IP. Когда смещение имеет длину 8 бит,  этот режим называется коротким переходом. Этот режим допустим в условных и безусловных переходах, но в команде  условного перехода смещение может иметь  длину  только 8 бит.

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

  3) Межсегментный прямой - заменяет содержимое IP первым операндом команды,  а  содержимое  CS  -  вторым операндом.  Назначение данного режима адресации - обеспечить переход из одного  сегмента кода в другой.

  4) Межсегментный косвенный  -  заменяет содержимое регистров IP и CS содержимым двух смежных слов из памяти, которые определяются в любом режиме адресации данных, кроме непосредственного и регистрового.

     Межсегментный переход может быть только безусловным.

     Допустим, что регистр BX содержит  число 1256  в 16-ричном коде, регистр  SI - число 528F,  смещение равно 20A1.

     Тогда при  прямой адресации эффективный адрес перехода равен 20A1 + (DS)*0010.

     При регистровой косвенной адресации (с участием регистра BX) эффективный адрес перехода 1256 + 20A1 + (DS)*0010.

     При базовой  индексной  адресации (с участием регистров BX и SI) эффективный адрес перехода 1256 + 528F + (DS)*0010.

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

 

     Рассмотрим типичные  форматы  команд  микропроцессора  8086. Длина  команд  варьируется  от  1  до  6  байт.  Длина смещений и непосредственных данных может быть 8 или 16 бит в зависимости  от кода команды.

     Один или два байта в начале кода команды занимают код операции и указание режима адресации.

     После них могут находиться:

 - ни одного дополнительного байта;

 - двухбайтный эффективный адрес EA (только  для  прямой  адресации);

 - одно- или двухбайтное смещение;

 - одно- или двухбайтный непосредственный операнд;

 - одно- или двухбайтное смещение с последующим одно-  или  двухбайтным непосредственным операндом;

 - двухбайтное смещение и двухбайтный  сегментный  адрес  (только для прямой межсегментной адресации).

     Применение одной из перечисленных возможностей  определяется кодом операции  и  режимом адресации.  Если  длина  смещения  или непосредственного операнда составляет 2 байта, первым всегда следует младший байт.

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

     Далее используются следующие условные обозначения:

REG  - регистр,

MOD  - режим,

R/M  - регистр или память,

DISP - смещение,

DATA - непосредственные данные,

LO   - младший байт,

HI   - старший байт.

 

     Пример однобайтной команды с неявными операндами:  КОП   

     Пример однобайтной команды с регистровым режимом адресации: КОП   REG

     Операция регистр-регистр:  КОП   1 1 REG  R/M

     Операция регистр-память без смещения:    КОП   MOD REG R/M

     Операция регистр-память со смещением:   КОП   MOD REG  R/M  DISP-LO  DISP-HI

     Непосредственный операнд в регистр:  КОП   MOD КОП R/M  DATA-LO  DATA-HI

     Непосредственный операнд в память с 16-битным смещением:

  КОП  MOD КОП  R/M DISP-LO DISP-HI DATA-LO DATA-HI

 

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

     Бит W. Если команда может оперировать и байтом, и словом, то в коде операции имеется бит W.

     Бит D.  Содержится в двухоперандных командах (за исключением команд с непосредственным операндом и цепочечных  команд).  Одним из операндов должен быть регистр, определяемый полем REG. В таких командах бит D показывает, чем является регистр: операндом-источником (D=0) или операндом-получателем (D=1).

     Бит S.  8-битное число в дополнительном коде можно расширить до 16-битного в дополнительном коде,  если сделать все биты старшего байта равными старшему биту младшего байта.  Такая  операция называется расширением знака. Бит S появляется вместе с битом W в командах сложения,  вычитания и сравнения с непосредственным операндом и расшифровывается следующим образом:

  -  8-битная операция - S=0 и W=0;

  -  16-битная операция  с 16-битным непосредственным операндом - S=0, а W=1;

  -  16-битная операция  с  8-битным  непосредственным операндом, который расширяется со знаком до 16 бит - S=1 и W=1.

     При работе  с небольшими числами последний вариант допускает использование однобайтного непосредственного операнда.

     Бит V.  Применяется в командах сдвигов для определения числа сдвигов.

     Бит Z. Используется в команде REP.

     Сегментный регистр определяется двумя битами, а любой другой регистр - тремя.

 

Таблица адресов регистров:

Адрес регистра

Регистры

Адрес регистра

Сегментный регистр

000

AX

AL

00

ES

001

CX

CL

01

CS

010

DX

DL

10

SS

011

BX

BL

11

DS

100

SP

AH

 

 

101

BP

CH

 

 

110

SI

DH

 

 

111

DI

BH

 

 

 

     Если на код операции и режим адресации отводится два  байта, то второй байт имеет одну из следующих форм:

MOD

КОП

R/M

или

MOD

REG

R/M

 

     Первая из них предназначена для  однооперандных  команд  или для двухоперандных команд с неявным заданием одного из операндов. Вторая форма характерна для двухоперандных  команд,  причем  поле REG определяет регистр,  который в зависимости от значения бита D является операндом-источником или операндом-получателем.

     Операнд, указываемый полями MOD и R/M,  определяется в соответствии со следующей таблицей:

R/M

MOD

00

01

10

11

 

W=0

W=1

 

000

(BX)+(SI)

(BX)+(SI)+D8

(BX)+(SI)+D16

AL

AX

 

Сегментный регистр

DS

DS

DS

 

 

 

001

(BX)+(DI)

(BX)+(DI)+D8

(BX)+(DI)+D16

CL

CX

 

Сегментный регистр

DS

DS

DS

 

 

 

010

(BP)+(SI)

(BP)+(SI)+D8

(BP)+(SI)+D16

DL

DX

 

Сегментный регистр

SS

SS

SS

 

 

 

011

(BP)+(DI)

(BP)+(DI)+D8

(BP)+(DI)+D16

BL

BX

 

Сегментный регистр

SS

SS

SS

 

 

 

100

(SI)

(SI)+D8

(SI)+D16

AH

SP

 

Сегментный регистр

DS

DS

DS

 

 

 

101

(DI)

(DI)+D8

(DI)+D16

CH

BP

 

Сегментный регистр

DS

DS

DS

 

 

 

110

D16

(BP)+D8

(BP)+D16

DH

SI

 

Сегментный регистр

DS

SS

SS

 

 

 

111

(BX)

(BX)+D8

(BX)+D16

BH

DI

 

Сегментный регистр

DS

DS

DS

 

 

 

 

  D8 - восьмибитное смещение, D16 - шестнадцатибитное смещение.

 

          Если MOD не равно 11, эффективный адрес вычисляется согласно таблице. Отметим,  что MOD = 00 означает отсутствие смещения,  за исключением случая R/M = 110,  который  обозначает прямую адресацию. Комбинация MOD = 01 означает, что третий байт команды содержит 8-битное смещение,  которое до вычисления эффективного адреса автоматически расширяется со знаком до 16 бит.  Если MOD = 10, то третий и четвертый  байты  команды содержат 16-битное смещение. Наконец,  в  случае  MOD = 11 операндом является регистр,  адрес которого определяется полем R/M.

     В таблице также показаны сегментные регистры, используемые в каждой из комбинаций полей MOD и R/M.  Эффективный адрес операнда в памяти определяется полями MOD и R/M,  но 20-битный  физический адрес равен сумме эффективного адреса и содержимого сегментного регистра, умноженного на 16.  В режимах адресации с привлечением регистра BP с эффективным адресом суммируется содержимое сегментного регистра  SS, а в остальных  режимах  адресации  участвует регистр DS.

     Чтобы изменить используемые в соответствии с таблицей сегментные регистры,  предусмотрена специальная однобайтная команда, называемая префиксом переопределения (замены) сегмента.  Она имеет следующий формат:

                   

0 0 1

REG

1 1 0

   

     Если команде  предшествует префикс переопределения сегмента, при обращении к данным в процессе  ее  выполнения участвует  сегментный регистр REG.  Регистр DS можно заменить на CS, SS или ES, а регистр SS при участии регистра BP - на DS, CS или ES.

     Замену нельзя производить в следующих специальных случаях:

 - при вычислении адреса следующей выполняемой команды в качестве сегментного регистра всегда применяется CS;

 - при участии в адресации регистра SP сегментным регистром всегда служит SS;

 - в цепочечных командах в качестве сегментного регистра  операнда-получателя всегда используется ES.

8. Время выполнения команд

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

     Базовое время выполнения некоторых типичных команд микропроцессора 8086/8088:

 

            КОМАНДА             

ЧИСЛО ТАКТОВ

ЧИСЛО ПЕРЕДАЧ

ADD или SUB (сложить или вычесть)              

 

 

регистр - регистр               

3

0

память - регистр                

9 + EA

1

регистр - память                

16 + EA

2

непосредственный - регистр      

4

0

непосредственный - память       

17 + EA

2

 

 

 

             MOV (передать)                             

 

 

аккумулятор - память            

10

1

память - аккумулятор            

10

1

регистр - регистр               

2

0

память - регистр                

8 + EA

1

регистр - память                

9 + EA

1

непосредственный - регистр      

4

0

непосредственный - память       

10 + EA

1

регистр - сегментный регистр    

2

0

память - сегментный регистр     

8 + EA

1

сегментный регистр - регистр    

2

0

сегментный регистр - память     

9 + EA

1

 

 

 

 MUL      (умножить без знака)                 

 

 

множитель -  8 бит, регистр     

70 - 77

0

множитель - 16 бит, регистр     

118 - 133

0

множитель -  8 бит, память      

(76 - 83) + EA

1

множитель - 16 бит, память      

(124 - 139) + EA

1

 

 

 

IMUL    (умножить со знаком)       

 

 

множитель -  8 бит, регистр     

80 - 98

0

множитель - 16 бит, регистр     

128 - 154

0

множитель -  8 бит, память      

(86 - 104) + EA

1

множитель - 16 бит, память      

(134 - 160) + EA

1

 

 

 

DIV         (разделить без знака)              

 

 

делитель -  8 бит, регистр      

80 - 90

0

делитель - 16 бит, регистр      

144 - 162

0

делитель -  8 бит, память       

(86 - 96) + EA

1

делитель - 16 бит, память       

(150 - 168) + EA

1

 

 

 

  IDIV      (разделить со знаком)                

 

 

делитель -  8 бит, регистр      

101 - 112

0

делитель - 16 бит, регистр      

165 - 184

0

делитель -  8 бит, память       

(107 - 118) + EA

1

делитель - 16 бит, память       

(171 - 190) + EA

1

Команды сдвигов и циклических сдвигов            

 

 

регистр, на 1 бит               

2

0

регистр, на переменное число бит

2 + 4/бит

0

память, на 1 бит                

15 + EA

2

память, на переменное число бит 

20 + EA + 4/бит

2

 

 

 

  JMP      (безусловный переход)                      

 

 

короткий

15

0

внутрисегментный прямой         

15

0

межсегментный прямой            

15

0

внутрисегментный косвенный в регистровом режиме                

11

0

внутрисегментный косвенный      

18 + EA

1

межсегментный косвенный         

24 + EA

2

 

 

 

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

 

 

JCXZ                            

6 (нет перехода)

18 (переход)

0

Другие команды условного перехода

4(нет перехода)

16 (переход)

0

   

          Третий столбец таблицы показывает число обращений  к памяти, необходимых для выполнения команд.  Чтобы определить время выполнения команды, в которой осуществляется обращение к полному слову памяти, следует учесть выравнивание операнда.  Если  слово  имеет нечетный адрес,  микропроцессор  8086  считывает его за два цикла шины, длящихся по 4 такта синхронизации.  В микропроцессоре  8088 на передачу  каждого слова необходимо прибавить 4 такта синхронизации, так как в цикле шины он может передать только один байт

 

 

 

 


 

Скачано с www.znanio.ru

Работа микропроцессора 8086 с памятью и регистрами устройств ввода-вывода 1

Работа микропроцессора 8086 с памятью и регистрами устройств ввода-вывода 1

Сегментация Программы используют пространство памяти в 1

Сегментация Программы используют пространство памяти в 1

Для быстрых передач блоков данных применяются контроллеры прямого доступа к памяти и специализированные процессоры ввода-вывода

Для быстрых передач блоков данных применяются контроллеры прямого доступа к памяти и специализированные процессоры ввода-вывода

C0000-EFFFF - область

C0000-EFFFF - область

Режимы адресации даных

Режимы адресации даных

Эффективный адрес EA = 0158 + 1B57 = 1CAF,

Эффективный адрес EA = 0158 + 1B57 = 1CAF,

Тогда при прямой адресации эффективный адрес перехода равен 20A1 + (DS)*0010

Тогда при прямой адресации эффективный адрес перехода равен 20A1 + (DS)*0010

REG - регистр, MOD - режим,

REG - регистр, MOD - режим,

Бит S . 8-битное число в дополнительном коде можно расширить до 16-битного в дополнительном коде, если сделать все биты старшего байта равными старшему биту младшего…

Бит S . 8-битное число в дополнительном коде можно расширить до 16-битного в дополнительном коде, если сделать все биты старшего байта равными старшему биту младшего…

MOD КОП R/M или

MOD КОП R/M или

D16 (BP)+D8 (BP)+D16

D16 (BP)+D8 (BP)+D16

Если команде предшествует префикс переопределения сегмента, при обращении к данным в процессе ее выполнения участвует сегментный регистр

Если команде предшествует префикс переопределения сегмента, при обращении к данным в процессе ее выполнения участвует сегментный регистр

EA 1 регистр - память 16 +

EA 1 регистр - память 16 +

EA 1

EA 1

Работа микропроцессора 8086 с памятью и регистрами устройств ввода-вывода 1

Работа микропроцессора 8086 с памятью и регистрами устройств ввода-вывода 1
Материалы на данной страницы взяты из открытых истончиков либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.
06.05.2020