Учебники

Встроенные системы — режимы адресации

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

  • Режим немедленной адресации
  • Режим прямой адресации
  • Зарегистрировать режим прямой адресации
  • Зарегистрировать режим косвенной адресации
  • Режим индексированной адресации

Режим немедленной адресации

Давайте начнем с примера.

MOV A, #6AH 

В общем, мы можем написать,

MOV A, #data

Это называется немедленным, потому что 8-битные данные немедленно передаются в аккумулятор (целевой операнд).

Следующая иллюстрация описывает вышеупомянутую инструкцию и ее выполнение. Код операции 74H сохраняется по адресу 0202. Данные 6AH сохраняются по адресу 0203 в памяти программы. После считывания кода операции 74H данные по адресу следующей памяти программ передаются в аккумулятор A (E0H — это адрес аккумулятора). Поскольку команда состоит из 2 байтов и выполняется за один цикл, счетчик программ будет увеличен на 2 и будет указывать на 0204 памяти программы.

Режим немедленной адресации

Примечание. Символ # перед 6AH означает, что операндом являются данные (8 бит). В отсутствие «#» шестнадцатеричное число будет считаться адресом.

Режим прямой адресации

Это еще один способ обращения к операнду. Здесь адрес данных (исходные данные) задается в качестве операнда. Давайте возьмем пример.

MOV A, 04H 

Банк регистров № 0 (4-й регистр) имеет адрес 04H. Когда инструкция MOV выполняется, данные, хранящиеся в регистре 04H, перемещаются в аккумулятор. Поскольку регистр 04H содержит данные 1FH, 1FH перемещается в аккумулятор.

Примечание. Мы не использовали ‘#’ в режиме прямой адресации, в отличие от непосредственного режима. Если бы мы использовали ‘#’, значение данных 04H было бы передано в аккумулятор вместо 1FH.

Теперь взгляните на следующую иллюстрацию. Он показывает, как выполняется инструкция.

Режим прямой адресации

Как показано на рисунке выше, это 2-байтовая инструкция, для выполнения которой требуется 1 цикл. ПК будет увеличен на 2 и будет указывать на 0204. Код операции для инструкции MOV A, адрес E5H. Когда инструкция в 0202 выполнена (E5H), аккумулятор становится активным и готовым к приему данных. Затем ПК переходит к следующему адресу 0203 и ищет адрес местоположения 04H, где находятся исходные данные (для передачи в аккумулятор). В 04H система управления находит данные 1F и передает их в аккумулятор, и, следовательно, выполнение завершается.

Регистрация режима прямой адресации

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

MOV A, R4 

За один раз регистры могут принимать значения от R0 до R7. Есть 32 таких регистра. Чтобы использовать 32 регистра с 8 переменными для адресации регистров, используются банки регистров. Существует 4 банка регистров с именами от 0 до 3. Каждый банк состоит из 8 регистров с именами от R0 до R7.

Одновременно может быть выбран один банк регистра. Выбор банка регистров возможен через регистр специальных функций (SFR), называемый словом состояния процессора (PSW). PSW — это 8-битный SFR, где каждый бит может быть запрограммирован как требуется. Биты обозначены от PSW.0 до PSW.7. PSW.3 и PSW.4 используются для выбора банков регистров.

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

Регистрация режима прямой адресации

Код операции EC используется для MOV A, R4. Код операции сохраняется по адресу 0202, и когда он выполняется, управление переходит непосредственно к R4 уважаемого банка регистров (который выбран в PSW). Если выбран банк регистров № 0, то данные из R4 банка регистров № 0 будут перемещены в аккумулятор. Здесь 2F хранится в 04H. 04H представляет адрес R4 банка регистра № 0.

Данные (2F) движения выделены жирным шрифтом. 2F передается в аккумулятор из ячейки памяти данных 0C H и отображается пунктирной линией. 0CH является адресом местоположения регистра 4 (R4) банка регистров # 1. Указанная выше инструкция составляет 1 байт и требует 1 цикла для полного выполнения. Это означает, что вы можете сохранить память программы, используя режим прямой адресации регистра.

Регистрация режима косвенной адресации

В этом режиме адресации адрес данных сохраняется в регистре как операнд.

MOV A, @R0 

Здесь значение внутри R0 рассматривается как адрес, который содержит данные для передачи в аккумулятор. Пример : если R0 имеет значение 20H, а данные 2FH хранятся по адресу 20H, то значение 2FH будет передано в аккумулятор после выполнения этой инструкции. Смотрите следующую иллюстрацию.

Регистрация режима косвенной адресации

Таким образом, код операции для MOV A, @ R0 — E6H. Предполагая, что банк регистров # 0 выбран, R0 банка регистров # 0 содержит данные 20H. Управление программой перемещается в 20H, где он находит данные 2FH и передает 2FH в аккумулятор. Это однобайтовая инструкция, счетчик программ увеличивается на 1 и перемещается в 0203 памяти программ.

Примечание. Только R0 и R1 могут формировать инструкцию косвенной адресации регистра. Другими словами, программист может создать инструкцию, используя @ R0 или @ R1. Все банковские регистры разрешены.

Режим индексированной адресации

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

MOVC A, @ A + DPTR

а также

MOVC A, @ A + ПК

где DPTR — указатель данных, а PC — программный счетчик (оба являются 16-разрядными регистрами). Рассмотрим первый пример.

MOVC A, @A+DPTR

Операндом-источником является @ A + DPTR. Он содержит исходные данные из этого места. Здесь мы добавляем содержимое DPTR с текущим содержимым аккумулятора. Это дополнение даст новый адрес, который является адресом исходных данных. Данные, указанные по этому адресу, затем передаются в аккумулятор.

Режим индексированной адресации

Код операции 93H. DPTR имеет значение 01FE, где 01 находится в DPH (старшие 8 бит), а FE находится в DPL (младшие 8 бит). Аккумулятор имеет значение 02H. Затем выполняется 16-разрядное сложение, и 01FE H + 02H приводит к 0200 H. Данные в местоположении 0200H будут переданы в аккумулятор. Предыдущее значение внутри аккумулятора (02H) будет заменено новыми данными с 0200H. Новые данные в аккумуляторе выделены на рисунке.

Это 1-байтовая инструкция с 2 циклами, необходимыми для выполнения, и время выполнения, требуемое для этой инструкции, является высоким по сравнению с предыдущими инструкциями (которые все были по 1 циклу каждая).

Другой пример MOVC A, @ A + PC работает так же, как и в предыдущем примере. Вместо добавления DPTR с помощью аккумулятора, данные внутри счетчика программ (ПК) добавляются вместе с аккумулятором для получения целевого адреса.