Azotirovanie.ru

Инженерные системы и решения
2 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Программирование микроконтроллеров

Программирование микроконтроллеров

В зависимости от количества используемых операндов возможны три типа команд AVR -микроконтроллера: безадресные, одноадресные и двухадресные. В первом типе команд присутствует только код операции (КОП), определяющий выполняемую командой функцию. В командах второго и третьего типов помимо кода операции содержится адресная часть, устанавливающая способ доступа соответственно к одному или двум участвующим в команде операндам (аргументам команды). Способ формирования адреса операнда, указание на который содержится в команде, называется адресацией (addressing). С помощью того или иного способа адресации вычисляется физический адрес, подающийся на шину адреса процессора для выбора ячейки памяти или регистра, используемых в команде [6].

В соответствии с типом адресуемой памяти способы адресации в AVR -микроконтроллерах можно разделить на способы адресации РОН и регистров ввода-вывода, способы адресации оперативной памяти данных (ОЗУ) и способы адресации памяти программ [22]. Возможность использования различных способов адресации позволяет сократить размер и время выполнения программ.

Для адресации РОН и регистров ввода-вывода предусмотрен всего один режим – прямая регистровая адресация.

При прямой регистровой адресации РОН операндом является содержимое регистра общего назначения, указанного в команде. Команды с прямой регистровой адресацией могут адресовать один ( Rd ) или два ( Rr и Rd ) РОН (рис. 10; взаимное расположение КОП и адресной части в разрядах команды здесь и далее показано условно). Во втором случае результат выполнения команды сохраняется в регистре Rd . Прямая регистровая адресация РОН применяется во всех арифметических и логических командах, а также в некоторых командах работы с битами, так как эти команды выполняются в АЛУ только над содержимым РОН. Команды, вторым операндом которых является константа, могут использовать в качестве первого операнда только регистры из старшей половины РОН ( R16 … R31 ).

При прямой регистровой адресации регистра ввода-вывода операнд содержится в регистре ввода-вывода, указанном в команде. Адрес регистра ввода-вывода хранится в шести разрядах слова команды (рис. 11, где n определяет адрес регистра-источника или регистра-приёмника в РОН). Прямая регистровая адресация регистров ввода-вывода используется в командах чтения IN и записи OUT регистра ввода-вывода, а также в ряде других команд работы с регистрами ввода-вывода.

Примеры использования прямой регистровой адресации:

; прямая регистровая адресация одного РОН

clr R1 ; очистка всех разрядов регистра R1

; прямая регистровая адресация двух РОН

add R11, R12 ; сложение содержимого регистров R11 и R12

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

1. При непосредственной адресации оперативной памяти данных операндом является содержимое ячейки ОЗУ, адрес которой указан в команде. Адрес операнда содержится в 16 младших разрядах 32-разрядной команды (рис. 12, где Rr / Rd определяет адрес регистра-источника или регистра-приёмника в РОН). Непосредственная адресация используется в команде LDS (Load Direct from Data Space) загрузки из ОЗУ и в команде STS (Store Direct to Data Space) загрузки в ОЗУ. Зарезервировать байты в ОЗУ позволяет директива . byte . Для того чтобы на выделенную область памяти можно было ссылаться, директиве . byte должна предшествовать метка. Директива . byte имеет один параметр – количество выделяемых байт – и может использоваться только в сегменте данных, определяемом с помощью директивы . dseg (data segment). Задать требуемое размещение выделяемой области памяти позволяет директива . org (ori-
gin – смещение). Начало программного сегмента указывается с помощью директивы . cseg (code segment). Директивы . dseg и . cseg не имеют параметров. Выделенные в оперативной памяти данных байты не инициализируются.

Пример использования непосредственной адресации:

. dseg ; сегмент данных (оперативная память данных)

.org $0065 ; по адресу $0065

cnt 1: . byte 1 ; резервирование 1 байта для cnt 1

.cseg ; программный сегмент (память программ)

lds R10, cnt1 ; загрузка cnt1 в R10

2. При косвенной адресации оперативной памяти данных операндом является содержимое ячейки ОЗУ, адрес которой находится в регистре X , Y или Z (рис. 13). Косвенная адресация используется в команде LD (Load Indirect) косвенной загрузки из ОЗУ и команде ST (Store Indirect) косвенной загрузки в ОЗУ. Например:

. dseg ; сегмент данных (оперативная память да нных)

cnt 1: . byte 1 ; резервирование 1 байта для cnt 1

.cseg ; программный сегмент (память программ)

ldi R 30, low( cnt 1) ; загрузка в R 30 младшего байта адреса cnt 1

ldi R 31, high( cnt 1) ; загрузка в R 31 старшего байта адреса cnt 1

ld R 1, Z ; загрузка cnt 1 в R 1, т. е. R 1 <- ( R 31: R 30)

В приведённом примере использованы функции low и high , возвращающие соответственно младший и старший байты выражения (в данном случае – адреса ячейки памяти с символическим именем cnt 1 ).

3. При косвенной адресации оперативной памяти данных со смещением адрес операнда в оперативной памяти данных вычисляется путём прибавления к содержимому регистра Y или Z смещения, указанного в команде. Смещение содержится в шести разрядах слова команды (рис. 14). Косвенная адресация со смещением используется в команде LDD (Load Indirect with Displacement) косвенной загрузки из ОЗУ со смещением и в команде STD (Store Indirect with Displacement) косвенной загрузки в ОЗУ со смещением. Например:

; косвенная адресация со смещением

. dseg ; сегмент данных (оперативная память данных)

arr : . byte 5 ; резервирование 5 байт для массива arr

.cseg ; программный сегмент (память программ)

ldi R 30, low ( arr ) ; загрузка в R 30 младшего байта адреса arr

ldi R 31, high( arr ) ; загрузка в R 31 старшего байта адреса arr

ldd R10, Z + 0 ; загрузка первого элемента массива arr в R10

ldd R11, Z + 1 ; загрузка второго элемента массива arr в R11

Читайте так же:
Проведение собраний при установке общедомового счетчика

4. При косвенной адресации оперативной памяти данных с предекрементом (лат. decrementum – уменьшение, убыль) перед выполнением команды содержимое указанного в команде регистра X , Y или Z декрементируется (уменьшается на единицу); декрементированное содержимое регистра X , Y или Z является адресом операнда в оперативной памяти данных (рис. 15). Косвенная адресация с предекрементом используется в команде LD косвенной загрузки из ОЗУ и команде ST косвенной загрузки в ОЗУ. Например:

; косвенная адресация с предекрементом

ld R10, -Z ; Z <- Z – 1, R10 <- (Z)

5. При косвенной адресации оперативной памяти данных с постинкрементом (лат. incrementum – увеличение, рост) адресом операнда в оперативной памяти данных является содержимое регистра X , Y или Z , указанного в команде; после выполнения команды содержимое регистра X , Y или Z инкрементируется, т. е. увеличивается на единицу (рис. 16). Косвенная адресация с постинкрементом используется в команде LD косвенной загрузки из ОЗУ и команде ST косвенной загрузки в ОЗУ. Например:

; косвенная адресация с постинкрементом

ld R10, Z+ ; R10 <- (Z), Z <- Z + 1

Для адресации памяти программ используется непосредственная адресация, косвенная адресация, относительная адресация, адресация константы и адресация константы с постинкрементом * .

При непосредственной адресации памяти программ выполнение программы продолжается с адреса, указанного в команде (рис. 17; FLASHEND – символическое имя адреса последней ячейки памяти программ). Непосредственная адресация памяти программ используется в командах JMP и CALL .

При косвенной адресации памяти программ выполнение программы продолжается с адреса, содержащегося в регистре Z , т. е. в программный счётчик загружается содержимое регистра Z (рис. 18). Косвенная адресация памяти программ используется в командах IJMP и ICALL .

При относительной адресации памяти программ выполнение программы продолжается с адреса ( PC + k + 1), где PC – содержимое программного счётчика; k – указанный в команде относительный адрес, который может принимать значения от –2048 до 2047 (рис. 19). Относительная адресация памяти программ используется в командах RJMP и RCALL .

При адресации константы адрес байта константы содержится в регистре Z (рис. 20): старшие 15 разрядов занимает адрес ячейки памяти программ (от 0 до 32 К); состояние младшего разряда (LSB) определяет выбор младшего
(LSB = 0) или старшего (LSB = 1) байта адресуемой ячейки памяти. Адресация константы в памяти программ используется в командах LPM (Load Program Memory), которая загружает адресованный регистром Z байт в указанный в команде регистр. Если регистр-приёмник не указан (команда используется без операндов), байт загружается в регистр R 0 . Команда ELPM (Extended Load Program Memory) служит для загрузки константы из памяти программ объёмом более 64 Кслов. При этом для расширения регистра-указателя Z используется регистр RAMPZ , связанный с регистром Z .

Задать данные в память программ позволяет директива . db (define bytes). Для того чтобы на заданные ячейки памяти можно было ссылаться, директиве должна предшествовать метка. Параметры директивы – последовательность выражений, разделённых запятыми; каждое выражение должно быть числом в диапазоне –128…255 или в результате вычисления давать результат в этом же диапазоне, в противном случае число усекается до байта. Директива . db размещается в программном сегменте и может использоваться совместно с директивой . org . Задавать положение данных в памяти программ следует таким образом, чтобы была исключена возможность непреднамеренного перехода к выполнению их как команд микроконтроллера.

Пример использования адресации константы в памяти программ:

ldi R31, high(var<<1) ; старший байт регистра Z

ldi R30, low(var<<1) ; младший байт регистра Z

LPM R16, Z ; загрузка числа $50 в R16

.org $0025 ; по адресу $0025

var: .db $50, 137 ; константы $50 и 137

В приведённом примере использован оператор << , выполняющий сдвиг операнда влево на указанное число разрядов.

При адресации константы в памяти программ с постинкрементом адрес байта константы содержится в регистре Z и формируется так же, как и при адресации константы (рис. 21). Адресованный регистром Z байт загружается в указанный регистр; после выполнения команды содержимое регистра Z инкрементируется. Адресация константы в памяти программ с постинкрементом используется в командах LPM и ELPM . Например:

ldi R31, high(var<<1) ; старший байт регистра Z

ldi R30, low(var<<1) ; младший байт регистра Z

lpm R16, Z+ ; загрузка числа $50 в R16, инкремент Z

lpm R17, Z ; загрузка числа 137 в R17

var: .db $50, 137 ; константы $50 и 137

ЗАДАНИЕ

Составить программу сложения двух целых 8-разрядных чисел:

1) с использованием прямой регистровой адресации РОН . Результат сложения в этом и последующих пунктах задания сохранить в РОН. Значения операндов взять из задания лабораторной работы № 1 (числа А и В );

2) с использованием непосредственной адресации оперативной памяти данных . Для этого зарезервировать в ОЗУ байты под слагаемые с помощью директив . byte . Занести слагаемые в зарезервированные ячейки ОЗУ командой STS с непосредственной адресацией. Сложить операнды, предварительно загрузив их в РОН командой LDS с непосредственной адресацией;

3) с использованием косвенной адресации оперативной памяти данных . Адреса слагаемых в ОЗУ загрузить в регистры X и Y с помощью команды LDI и функций low и high . Занести слагаемые в зарезервированные ячейки ОЗУ командой ST с косвенной адресацией. Сложить операнды, предварительно загрузив их в РОН командой LD с косвенной адресацией;

4) с использованием косвенной адресации оперативной памяти данных со смещением . Для этого зарезервировать в ОЗУ байты под слагаемые в одной директиве . byte . Адрес начала блока данных загрузить в регистр Z с помощью команды LDI и функций low и high . Занести слагаемые в зарезервированные ячейки ОЗУ командой STD с косвенной адресацией со смещением. Сложить операнды, предварительно загрузив их в РОН командой LDD с косвенной адресацией со смещением;

Читайте так же:
Счетчик жизней для magic the gathering

5) с использованием косвенной адресации оперативной памяти данных с предекрементом . Для этого зарезервировать в ОЗУ байты под слагаемые в одной директиве . byte . В регистр Z загрузить адрес ячейки ОЗУ, следующей за блоком зарезервированных байтов. Занести слагаемые в зарезервированные ячейки ОЗУ командой ST с косвенной адресацией с предекрементом. Сложить операнды, предварительно загрузив их в РОН командой ld c косвенной адресацией ячеек ОЗУ с предекрементом;

6) с использованием косвенной адресации оперативной памяти данных с постинкрементом . Для этого зарезервировать в ОЗУ байты под слагаемые в одной директиве . byte . В регистр Z загрузить адрес начала блока зарезервированных байтов. Занести слагаемые в зарезервированные ячейки ОЗУ командой ST с косвенной адресацией с постинкрементом. Сложить операнды, предварительно загрузив их в РОН командой LD с косвенной адресацией с постинкрементом;

7) с использованием адресации константы в памяти программ . Для этого задать слагаемые в памяти программ в одной директиве . db . Сложить операнды, предварительно загрузив их в РОН с помощью команды LPM . Для пересылки слагаемых между РОН использовать команду MOV ;

8) с использованием адресации константы в памяти программ с постинкрементом . Для загрузки слагаемых в РОН использовать команду LPM с постинкрементом.

В диалоговом окне AVR Simulator Options в разделе Device Selection установить тактовую частоту моделирования работы микроконтроллера, равную 8,0 МГц (поле Frequency ).

Выполнить трансляцию и отладку созданных программ. По данным, выводимым после трансляции на закладке Build окна Output , проанализировать использование памяти программ ( Program memory usage ) под код программы ( Code ) и константы ( Constants ), оценить объём неиспользованной ( Unused ) и общей занятой ( Total ) памяти. Занести эти сведения в отчёт (табл. 3).

При отладке программ использовать средства наблюдения за содержимым регистров и ячеек памяти. По полю Cycle Counter объекта Processor закладки I / O окна Workspace определить число тактов выполнения программы, по полю Stop Watch – время выполнения программы (до выполнения команды, организующей бесконечный цикл). Зафиксировать эти сведения в отчёте (табл. 3). По результатам выполнения программ сделать выводы.

Косвенная регистровая адресация

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

Рис. 5. Косвенная регистровая адресация

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

где RРОН — разрядность регистров общего назначения, Ni количество адресуемых операндов

Адресация со смещением

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

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

Рис. 6. Адресация со смещением

Использование таких регистров предполагается по умолчанию, поэтому адресная часть команды содержит только поле Ак. Если же составляющая адреса может располагаться в произвольном регистре общего назначения, то для указания конкретного регистра в команду включается дополнительное поле R (при составлении адреса более чем из двух составляющих в команде будет несколько таких полей). Еще одно поле R может появиться в командах, где смещение перед вычислением исполнительного адреса умножается на масштабный коэффициент. Такой коэффициент заносится в один из РОН, на который и указывает это дополнительное поле. В наиболее общем случае адресация со смещением подразумевает наличие двух адресных полей: Ак и R.

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

Ниже рассматриваются основные способы адресации со смещением, каждый из которых имеет собственное название.

Относительная адресация

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

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

Рис. 7. Относительная адресация

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

Читайте так же:
3 расчетных периода счетчика

Система кодирования команд. Способы адресации.

Машинная команда – это двоичный код, определяющий выполняемую операцию, адреса используемых операндов и адрес ячейки ЗУ, по которому должен быть записан результат выполненной операции.

Формат команды – это структура команды, позволяющая распознать назначение её полей.

Для каких целей в ЭВМ используются различные способы адресации?

Для сокращения длины поля адреса команды

Для удобства программирования

ii. Какая адресация обеспечивает наименьшее время выборки операнда?

Какая из систем кодирования команд обеспечивает наибольшую гибкость программирования?

Каковы основные преимущества двухадресной системы команд перед трехадресной?

От каких параметров ЭВМ зависит длина команды?

от длины поля кода операции и суммы длин адресных полей, от объема запоминающего устройства и объема регистровой памяти

Каким образом определяется положение второго операнда в одноадресной системе команд?

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

Какова минимальная длина поля кода операции, если система команд ЭВМ включает 100 команд?

Какова минимальная длина адресного поля, если объем адресуемой памяти составляет 100 Мбайт (адресация – прямая)?

Какова минимальная длина команды двухадресной ЭВМ, если ее система команд включает 200 команд, а объем адресуемой памяти составляет 130 Кбайт (адресация – прямая)?

Какое максимальное количество команд может входить в систему команд ЭВМ, у которой в команде поле кода операции имеет длину 9 бит?

Какой максимальный объем памяти (в килобайтах) можно адресовать с помощью адресного поля длиной 11 разрядов при прямой адресации?

Цикл выполнения команды.

1. Сколько этапов содержит цикл выполнения линейной команды?6

2. На каком этапе происходит считывание первого операнда?2

3. На каком этапе выполнения команды происходит считывание второго операнда?3

4. На каком этапе происходит выполнение операции в АЛУ?4

5. На каком этапе происходит запись результата операции по адресу приемника результата?5

Сколько этапов содержит цикл выполнения команды условного перехода?

В зависимости от условия. (отрицательный результат или результат, равный нулю)

Для чего используется регистр команд?

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

Для чего используется счетчик команд?

Счетчик команд — регистр процессора, содержащий адрес текущей выполняемой команды.

Для чего используются признаки результата?

Для хранения признаков результата выполненной в АЛУ операции

На какую величину изменяется значение счетчика команд при выполнении команды?

На величину выполненной команды. Д ячеек

11. С каким из этапов выполнения команды может быть совмещен этап формирования адреса следующей команды?Первый этап – выборка исполняемой команды из ОЗУ.

Для чего в ЭВМ используется блок управления операциями?

формирует управляющие сигналы, необходимые для выполнения данной операции в АЛУ.

xiii. Чем команды условного перехода отличаются от команд безусловного перехода?

В команде условного перехода нарушение естественного порядка выполнения программы происходит только при выполнении определенного условия

Архитектура персонального компьютера.

1. Какую разрядность имел первый серийный микропроцессор? 4

2. Какова максимальная разрядность современных универсальных микропроцессоров?64

3. Какую разрядность имеет микропроцессор Intel-8086 (К1810ВМ80)? 16

4. По какому принципу строится персональный компьютер?Магистрально-модульному

Какое максимальное количество устройств ввода-вывода может входить в состав персональной ЭВМ?

Определяется разрядностью шины

Каким образом изменяются признаки результата, фиксируемые в регистре флагов?

Процессором в зависимости от результата операции

7. Сколько 16-разрядных регистров общего назначения входит в состав микропроцессора Intel-8086 (К1810ВМ80)?8

8. Сколько 16-разрядных регистров общего назначения в микропроцессоре Intel-8086 (К1810ВМ80) допускают побайтовое обращение?4

В каком коде представляются в персональной ЭВМ числа с фиксированной точкой?

10. Какова длина сегмента в микропроцессоре Intel-8086 (К1810ВМ80)? 64 Кбайт

11. Чему равен физический адрес, если значение сегментного регистра равно AAAAh, а смещение в сегменте равно 2222h? ACCC2h (=AAAA*16+2222=AAAA0+2222=ACCC2)

Каково назначение сегментных регистров микропроцессора Intel-8086 (К1810ВМ80)?

Хранение старших 16 разрядов физического адреса сегмента

Хранение базовых адресов сегментов в оперативной памяти.

13. К памяти какого объема возможно обращение в микропроцессоре Intel-8086?1 Мбайт

14. Какая информация будет считана из памяти, если считывается слово по адресу ABC45h, а в памяти хранятся следующие данные: (ABC44h)=77h, (ABC45h)=88h, (ABC46h)=99h ?

9988h (т.к. сначала считается младший байт (по адресу ABC45h), затем – старший)

Форматы команд и режимы адресации IBM PC.

1. Какую длину может иметь непосредственный операнд в 16‑разрядном микропроцессоре?

8 или 16 бит

Значения каких регистров изменяются при выполнении команд межсегментных переходов?

3. Какое сочетание режимов адресации двухоперандной команды невозможно в системе команд 16‑разрядного микропроцессора?II

Какой из сегментных регистров используется по умолчанию при формировании физического адреса операндов, находящихся в оперативной памяти, при режимах адресации, использующих для формирования эффективного адреса регистр BP?

SS (не использующих — ответ DS)

5. Какие из режимов адресации не используются в системе команд 16‑разрядного микропроцессора?Автодекрементный, Автоинкрементный

7. Какова разрядность физического адреса 16‑разрядного микропроцессора?20 бит

8. Какую длину имеет непосредственный операнд в 16‑разрядном микропроцессоре при значении признака w=1?2 байта

9. Какие регистры можно использовать при косвенной адресации в 16‑разрядном микропроцессоре?BX, DI

10. Какие регистры можно использовать при относительной базово-индексной адресации в 16‑разрядном микропроцессоре?SI, BX,DI,BP

11. Какова максимальная длина команды 16‑разрядного микропроцессора?6 байт

12. Какова разрядность эффективного адреса 16‑разрядного микропроцессора?16 бит

Каково назначение признака s в командах, использующих непосредственный операнд?

Для возможности сокращения длины команды в случае короткого непосредственного операнда

Читайте так же:
Принтер brother сбросить счетчик барабана

14. Значения каких регистров изменяются при выполнении команд внутрисегментных безусловных переходов?IP

xv. Значения каких регистров изменяются при выполнении команд условных переходов?IP

xvi. Какую длину имеет команда прямого межсегментного перехода?5 байт

Основы схемотехнической реализации ЭВМ.

i. Что входит в понятие система логических элементов?

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

Какие типы триггеров можно использовать для построения регистра хранения?

АЛУ.

Устройство управления.

Система кодирования команд. Способы адресации.

Машинная команда – это двоичный код, определяющий выполняемую операцию, адреса используемых операндов и адрес ячейки ЗУ, по которому должен быть записан результат выполненной операции.

Формат команды – это структура команды, позволяющая распознать назначение её полей.

Прокрутить вверх

Живите по правилу: МАЛО ЛИ ЧТО НА СВЕТЕ СУЩЕСТВУЕТ? Я неслучайно подчеркиваю, что место в голове ограничено, а информации вокруг много, и что ваше право.

ЧТО И КАК ПИСАЛИ О МОДЕ В ЖУРНАЛАХ НАЧАЛА XX ВЕКА Первый номер журнала «Аполлон» за 1909 г. начинался, по сути, с программного заявления редакции журнала.

Что способствует осуществлению желаний? Стопроцентная, непоколебимая уверенность в своем.

Программа для ЭВМ это упорядоченная последовательность команд, подлежащая обработке

39. Адресация данных в микропроцессорах: представление адресной информации, способы адресации.

Представление адресной информации

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

Адресныйкодкоманды – это двоичный код в адресном поле команды, из которого необходимо сформировать исполнительный адрес операнда.

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

Чтобы МП мог определить, какой именно способ адресации задан в данной команде, используются различные подходы. При первом подходе разным способам адресации соответствуют разные коды операции. Другой подход – это добавление в состав команды специального поля способа адресации, содержимое которого определяет, какой из способов адресации должен быть применен. Возможен также вариант, когда в команде вообще отсутствует адресная информация, т.е. имеет место неявнаяадресация. При неявной адресации адресного поля либо просто нет, либо оно содержит не все необходимые адреса – отсутствующий адрес подразумевается кодом операции. Так, при исключении из команды адреса результата подразумевается, что результат помещается на место одного из операндов. Неявная адресация применяется достаточно широко, поскольку позволяет сократить длину команды.

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

g:госы и экзаменымпс_эумкд_0.2_29-05-11теорияimagesris060-neposr_adr.png

Рисунок 60 – Непосредственная адресация

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

g:госы и экзаменымпс_эумкд_0.2_29-05-11теорияimagesris061-pramaja_adr.png

Рисунок 61 – Прямая адресация

Регистроваяадресация. Регистровая адресация напоминает прямую адресацию. Различие состоит в том, что адресное поле инструкции указывает не на ячейку памяти, а на регистр процессора (рис. 62). Обычно размер адресного поля в данном случае составляет три или четыре бита, что позволяет указать соответственно на один из 8 или 16 регистров общего назначения (РОН).

g:госы и экзаменымпс_эумкд_0.2_29-05-11теорияimagesris062-reg_adr.png

Рисунок 62 – Регистровая адресация

Двумя основными преимуществами регистровой адресации являются: короткое адресное поле в команде и исключение обращений к памяти. Малое число РОН позволяет сократить длину адресного поля команды. К сожалению, возможности по использованию регистровой адресации ограничены малым числом РОН в составе процессора.

Косвеннаярегистроваяадресация. Косвенная адресация – это такой прием, когда адресное поля команды указывает на местоположение эффективного адреса операнда. При косвенной адресации содержимое адресного поля команды остается

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

Читайте так же:
Joomla обрезает код счетчика

Косвенная регистровая адресация представляет собой вариант косвенной адресации, в котором исполнительный адрес операнда задается в регистре процессора. При этом адресное поле команды указывает на этот регистр (рис. 63).

g:госы и экзаменымпс_эумкд_0.2_29-05-11теорияimagesris063-kosv_reg_adr.png

Рисунок 63 – Косвенная регистровая адресация

Адресациясосмещением. При адресации со смещением исполнительный адрес формируется в результате суммирования содержимого адресного поля команды с содержимым одного или нескольких регистров процессора.

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

Ниже рассматриваются основные способы адресации со смещением, каждый из которых имеет собственное название.

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

g:госы и экзаменымпс_эумкд_0.2_29-05-11теорияimagesris064-otnos_adr.png

Рисунок 64 – Относительная адресация

Адресация относительно счетчика команд базируется на свойстве локальности. Это позволяет сэкономить на длине адресной части команды, поскольку разрядность поля АК может быть небольшой. Главное достоинство данного способа адресации состоит в том, что он делает программу перемещаемой в памяти: независимо от текущего расположения программы в адресном пространстве взаимное положение команды и операнда остается неизменным, поэтому адресация операнда остается корректной. Базоваяадресация. В случае базовой адресации регистр, называемый базовым, содержит полноразрядный адрес, а поле АК – смещение относительно этого адреса (рис. 65). Ссылка на базовый регистр может быть явной или неявной. В некоторых МП имеется специальный базовый регистр и его использование является неявным, т.е. адресное поле R в команде отсутствует. Более типичен случай, когда в роли базового регистра выступает один из регистров общего назначения (РОН), тогда его номер явно указывается в поле R команды.

g:госы и экзаменымпс_эумкд_0.2_29-05-11теорияimagesris065a-base_adr.png

g:госы и экзаменымпс_эумкд_0.2_29-05-11теорияimagesris065b-base_adr.png

а – с базовым регистром

б с использованием РОН Рисунок 65 Базовая адресация

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

Индекснаяадресация. При индексной адресации поле АК содержит адрес памяти, а регистр, называемый индексным(указанный явно или неявно), – смещение относительно этого адреса (рис. 66).

g:госы и экзаменымпс_эумкд_0.2_29-05-11теорияimagesris066a-index_adr.png

а – с индексным регистром

g:госы и экзаменымпс_эумкд_0.2_29-05-11теорияimagesris066b-index_adr.png

б с использованием РОН Рисунок 66 Индексная адресация

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

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

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

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

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

Интересным и весьма полезным является еще один вариант индексной адресации – индекснаяадресациясмасштабированиемисмещением: содержимое индексного регистра умножается на масштабный коэффициент и суммируется с АК. Масштабный коэффициент может принимать значения 1, 2, 4 или 8, для чего в адресной части команды выделяется дополнительное поле.

Описанный способ адресации реализован, например, в микропроцессорах фирмы Intel.

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

голоса
Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector