Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Исследование процессов вводавывода информации и системы арифметических команд x86 микропроцессоров семейства Intel. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
949 Кб
Скачать

Они разделены на три группы в соответствии с выполняемыми ими функциями [1]: группа регистров данных, указательная группа и сегментная группа. Все регистры имеют длину 16 бит. Регистром команд служит 6-байтная очередь. В группу регистров данных входят регистры АХ, ВХ, СХ и DX. Они предназначены для хранения операндов и результатов операций и допускают адресацию не только целых регистров, но и их младшей L и старшей Н половин. Регистры ВХ, СХ и DX кроме арифметических функций имеют и специальные назначения: ВХ служит базовым регистром в вычислениях адреса, СХ в некоторых командах выступает неявным счетчиком, DX в некоторых операциях ввода-вывода содержит адрес порта ввода-вывода.

В указательную и индексную группы входят регистры IP, SP, BP, SI и DI. Указатель команды IP и регистр SP являются программным счетчиком и указателем стека. Однако полный адрес команды и адрес стека образуются суммированием содержимого этих регистров и регистров CS и SS. Регистр ВР является базовым при обращении к стеку. Регистры SI и DI предназначены для индексирования. Однако они часто используются и в комбинации с регистрами ВХ, ВР и (или) смещением. Любой из указателей, кроме IP, может хранить 16разрядный операнд.

Регистр признаков – Flag (F) – приведен на рис. 3.

Рис. 3. Формат регистра флагов

Как уже отмечалось выше, каждый разряд этого регистра представляет из себя триггер, который может установлен в “1” или “0”. В регистре признаков формируются:

а) признаки результата: переполнение OF (операции с целыми числами); знака результата SF; нуля ZF; вспомогательного переноса AF (перенос из третьего или заем из четвертого разряда); четности PF

11

(четное число единиц в младшем байте результата); переноса CF (перенос из старшего или заем в старший разряд результата;

б) признаки управления: пошагового режима TF (управление пошаговыми прерываниями); разрешения прерывания IF (разрешение или запрещение направления DF (указывает направление обработки цепочки данных, начиная с элемента с наименьшим адресом при DF=0 или с наибольшим адресом при DF=1)),

где OF – флажок переполнения;

DF – флажок направления сканирования; IF – флажок разрешения прерывания; TF – флажок пошагового режима;

SF – флажок знака;

ZF – флажок нуля;

AF – флажок вспомогательного переноса; PF – флажок четности;

CF – флажок переноса.

Адресация памяти данных

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

Схема формирования физического адреса операнда или команды приведена на рис. 4.

Адрес формируется путём суммирования содержимого сегментного регистра (СS), сдвинутого на четыре разряда влево и дополненного нулями, и так называемого эффективного адреса (смещения) ЕА, формируемого исполняемой командой на основе содержащейся в ней информации о способе формирования этого адреса.

12

Рис. 4. Схема формирования физического адреса

Если, например, (СS)=123А и (ЕА)=341В, то следующая команда программы будет выбрана по физическому адресу 157ВВ. Таким образом, при обращении к оперативной памяти данной ЭВМ исполнительные (физические) адреса имеют 20 разрядов и позволяют обращаться к ОП емкостью 1 Мбайт. Это становится возможным благодаря механизму сегментации памяти. На рис. 5 представлено распределение памяти в виде сегментов с программным кодом, данными и стеком.

Отметим, что начальный адрес каждого сегмента располагается в соответствующих сегментных регистрах. В адресуемом пространстве выделяются сегменты, содержащие по 64 Кбайта. Допускаются перекрытия сегментов. Базовые (начальные) 16-разрядные адреса сегментов хранятся в соответствующих сегментных регистрах, трактуются как 20-разрядные с нулями в четырех младших разрядах [1].

13

Рис. 5. Распределение памяти в виде сегментов программного кода и данных

Типичные режимы адресации микропроцессора ВМ86 разделяются на два класса – режимы адресации данных и режимы адресации переходов.

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

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

14

2.Прямая. Шестнадцатибитный адрес (смещение) является частью команды. В этом случае это смещение суммируется с умноженным на 16 содержимым соответствующего сегментного регистра DS или ES согласно схеме, приведённой на рис. 5. В результате получается 20-разрядный адрес ячейки ОП, к которой и производится обращение процессора.

3.Регистровая. Данные содержатся в определенном командой одном из внутренних регистров процессора. 16-битный операнд может находиться в регистрах АХ, ВХ. СХ, DX. SI, DI, SP, ВР; 8- битный операнд в регистрах AL, АН, BL, BH, CL, CH, DL, DH.

4.Регистровая косвенная. Эффективный адрес операнда находится в базовом регистре ВХ или индексном регистре SI или DI, определенном командой.

5.Регистровая относительная. Эффективный адрес равен сумме 8 или 16-битового смещения и содержимого базового или индексного регистров, т.е. к содержимому ВХ, ВР, SI, DI прибавляется 8- или 16-разрядное число. Для определения физического адреса ячейки ОП полученное значение прибавляется к содержимому сегментных регистров DS или ES, согласно схеме, изображенной на рис. 5. Только после этого происходит обращение к ОП при чтении или записи операнда.

6.Базовая индексная. Эффективный адрес равен сумме содержимого базового BX или BP и индексного SI или DI регистров, определенных командой.

7.Относительная базовая индексная. Эффективный адрес равен сумме 8 или 16-битового смещения и содержимого базового BX или BP и индексного SI или DI регистров.

Отметим, что полученное значение ЕА в пп. 4–7 для определения физического адреса ячейки ОП также суммируется с умноженным на 16 содержимым соответствующего сегментного регистра DS или ES, согласно схеме, приведенной на рис. 5.

15

Рассмотрим пример. Предположим, что (ВХ)=0158, (DI)=10A5, смещение=1В57, (DS)=2100 и что в качестве сегментного регистра применяется DS. Отметим, что когда хотят указать на содержимое регистра, то регистр обозначается в круглых скобках. Тогда рассмотренные способы адресации дают следующие эффективные и физические адреса.

Прямой:

ЕА=1В57

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

Регистровый:

ЕА нет – данное в указанном регистре.

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

ЕА=0158, физический адрес=0158+21000=21158.

Регистровый относительный (с участием регистра ВХ): EA=O158+1B57=1CAF, физический адрес равен

1CAF+21OOO=22CAF.

Базовый индексный (с участием регистров ВХ и DI): EA=O158+1OA5=11FD, физический адрес=11FD+21000=221FD.

Относительный базовый индексный (с участием регистров ВХ и

DI):

EA=0158+10A5+lB57=2D54, физический aдрес равен

2D54+21000=23D54.

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

16

 

 

 

Таблица 1

Правила формирования адреса ячейки памяти

 

 

 

 

 

Тип операции

Сегмент

Индексный

Альтернативный

 

памяти

регистр

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

 

 

 

 

 

 

 

 

Выборка

 

 

 

 

команды

CS

IP

Нет

 

 

 

 

 

 

Стековая операция

SS

SP

Нет

 

 

 

 

 

 

 

 

Обращение к переменной

DS

ЕА

CS, SS, ES

 

 

 

 

 

 

 

 

Цепочка источник

DS

SI

CS, SS, ES

 

 

 

 

 

 

 

 

Цепочка приемник

ES

DI

нет

 

 

 

 

 

 

 

 

ВР как базовый регистр

SS

ЕА

CS, SS, ES

 

 

 

 

 

 

 

 

Синтаксис операндов языка ASSEMBLER

Формат ассемблерной команды имеет следующий вид [7].

Метка: Мнемоника Операнд 1,Операнд 2; Комментарий

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

– два операнда. В случае двух операндов они разделяются запятой. Наличие метки в команде необязательно. При отсутствии метки двоеточие не ставится. При отсутствии комментария точка с запятой не нужна. Комментарием может быть целая строка и в этом случае первый символом в строке должна быть точка с запятой.

17

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

М1: ADD AX, COUNT[BX]; добавить элемент ; из COUNT в АХ

Эта команда прибавляет к регистру АХ содержимое ячейки памяти COUNT, адрес которой формируется из содержимого регистра ВХ. В этой команде используется регистровый и регистрово-относительный режим адресации. Когда операндом

является слово в

памяти, младший байт слова

имеет меньший

(младший) адрес, а старший байт – больший.

 

 

Форматы (синтаксис) операндов для различных режимов

адресации приведем в табл. 2.

 

 

 

 

Таблица 2

Синтаксис операндов для режимов адресации

 

 

 

 

Режим

Формат

Примеры

 

адресации

 

 

 

 

 

 

 

 

 

10011В

 

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

выражение – константа

529

 

 

 

0А9Н

 

 

 

’AB’

 

 

 

YY-XX+5

 

 

 

 

 

 

 

WGT

 

Прямой

переменная± выражение –

CNT-5

 

 

– константа

АRRAY+5

 

 

 

 

 

Регистровый

регистр

AH

 

 

 

DH

 

 

 

 

 

 

18

 

 

 

 

Окончание табл. 2

 

 

 

 

Режим

Формат

Примеры

 

адресации

 

 

 

 

 

 

 

Регистровый

[регистр]

[ВХ]

 

косвенный

 

 

 

 

 

 

 

 

переменная + [регистр±

 

 

Регистровый

± выражение – константа]

WARX+[BX+

 

относительный

или

MESG]

 

 

[регистр± выражение константа]

[SI+10H]

 

 

 

[ВХ-1]

 

 

 

 

 

Базовый индексный

[базовый регистр][индексный

[BP][DI]

 

 

регистр]

 

 

 

 

 

 

Относительный

переменная[базовый регистр±

 

 

базовый индексный

± выражение – константа]

VAR[BP+5]

 

 

или

[BP+2][SI-10]

 

 

[базовый регистр±

 

 

 

± выражение – константа]×

 

 

 

×[ индексный регистр±

 

 

 

± выражение – константа]

 

 

 

 

 

 

 

Режим адресации для переходов

 

 

 

 

 

 

Внутрисегментный

метка± выражение – константа

OVEL+7

 

прямой

 

 

 

 

 

 

 

Внутрисегментный

как и адресация данных, кроме

 

 

косвенный

непосредственной

 

 

 

 

 

 

Межсегментный

метка± выражение – константа

MM1-EXIT

 

прямой

 

 

 

 

 

 

 

Межсегментный

как и адресация данных, кроме

 

 

косвенный

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

 

 

 

 

 

 

Примечание: во всех режимах, кроме непосредственного, «выражение константа» не обязательно.

19

Команды передачи данных

Во всех компьютерах необходимы команды, предназначенные просто для пересылок данных, адресов и непосредственных операндов в регистры или ячейки памяти. В микропроцессоре ВМ86 имеется 4 базовые команды передачи данных. MOV, LEA, LDS и LTS. В данной работе подробно рассмотрим команду MOV. Остальные команды и их использование при разработке программ будем рассматривать по мере их использования.

Команда MOV предназначена для пересылок байта или слова внутри ЦП или между ЦП и памятью. Ее формат может занимать от двух до шести байт в зависимости от способа адресации. Мнемоника и формат этой команды на ассемблере имеет вид:

MOV dst,src

Здесь dst – операнд-получатель; src – операнд-источник.

В зависимости от режима адресации эта команда может передавать информацию:

из регистра в регистр;

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

непосредственный операнд в ячейку памяти;

из ячейки памяти в регистр;

из регистра в ячейку памяти;

из регистра (ячейки памяти) в сегментный регистр (кроме регистра CS);

из сегментного регистра в регистр или ячейку памяти.

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

20

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]