Внутреннее ОЗУ (IRAM) имеет 8-битное адресное пространство с адресами от 0 до 0xFF. Доступ к IRAM от 0x00 до 0x7F можно получить напрямую, используя 8-битный абсолютный адрес, который является частью инструкции. В качестве альтернативы, доступ к IRAM можно получить косвенно: адрес загружается в R0 или R1, а доступ к памяти осуществляется с использованием синтаксиса @ R0 или @ R1.
Исходный 8051 имеет только 128 байтов IRAM. 8052 добавил IRAM от 0x80 до 0xFF, доступ к которому возможен только косвенно; прямой доступ к этому диапазону адресов идет к регистрам специальных функций. Большинство клонов 8051 также имеют полные 256 байтов IRAM.
32 байта из памяти 0x00–0x1F отображают 8 регистров R0 – R7. Одновременно используются восемь байтов; два бита слова состояния программы позволяют выбрать один из четырех возможных банков.
16 байтов (128 бит) в ячейках IRAM 0x20–0x2F имеют битовую адресацию.
Регистры специальных функций
Регистры специальных функций (SFR) расположены в том же адресном пространстве, что и IRAM, по адресам от 0x80 до 0xFF, и доступ к ним осуществляется напрямую с использованием тех же инструкций, что и для нижней половины IRAM. К ним нельзя получить доступ косвенно через @ R0 или @ R1; косвенный доступ к этим адресам будет иметь доступ ко второй половине IRAM.
Шестнадцать SFR (тех, адреса которых кратны 8) также являются битовыми.
Программная память
Программная память (PMEM, хотя и реже используется, чем IRAM и XRAM) составляет до 64 КБ постоянной памяти, начиная с адреса 0 в отдельном адресном пространстве. Он может быть встроенным или внешним, в зависимости от конкретной модели используемого чипа. Программная память предназначена только для чтения, хотя некоторые варианты 8051 используют встроенную флеш-память и предоставляют метод перепрограммирования памяти в системе или в приложении.
В дополнение к коду можно хранить данные только для чтения, такие как таблицы поиска, в программной памяти, полученные с помощью MOVC A, @ A + DPTRили инструкции MOVC A, @ A + PC. Адрес вычисляется как сумма 8-битного аккумулятора и 16-битного регистра (PC или DPTR).
Специальные инструкции перехода и вызова (AJMPи ACALL) немного уменьшают размер кода, который обращается к локальной (в пределах тех же 2 КБ) программной памяти.
Внешняя память данных
Внешняя память данных (XRAM) - это третье адресное пространство, также начинающееся с адреса 0 и позволяющее использовать 16 бит адресного пространства. Он также может быть встроенным или внешним; что делает его "внешним", так это то, что к нему нужно обращаться с помощью инструкции MOVX(перемещение внешнего). Многие варианты 8051 включают стандартные 256 байтов IRAM плюс несколько килобайт XRAM на чипе.
К первым 256 байтам XRAM можно получить доступ с помощью MOVX A, @ R0, MOVX A, @ R1, MOVX @ R0, Aи MOVX @ R1, Aинструкции. Доступ ко всем 64 КБ можно получить с помощью MOVX A, @ DPTRи MOVX @ DPTR, A.
Регистры
Единственный регистр на 8051, который не отображается в память, - это 16-битный счетчик программ (ПК). Это указывает адрес следующей инструкции для выполнения. Инструкции относительного перехода предоставляют 8-битное смещение со знаком, которое добавляется к ПК.
Доступ к восьми регистрам общего назначения R0 – R7 может осуществляться с помощью инструкций на один байт короче других. Они отображаются в IRAM между 0x00 и 0x1F. В любой момент времени используются только восемь байтов из этого диапазона, что определяется двумя битами выбора банка в PSW.
Ниже приведен частичный список регистров 8051, которые отображены в памяти в пространство регистров специальной функции:
Указатель стека, SP (0x81)
Это 8- битовый регистр, используемый командами вызова и возврата подпрограммы. Стек растет вверх; SP увеличивается до нажатия и уменьшается после выталкивания значения.
Указатель данных, DP (0x82–83)
Это 16-битный регистр, который используется для доступа к PMEM и XRAM.
Слово состояния программы, PSW (0xD0)
Оно содержит важные флаги состояния, по номеру бита:
Четность, P. Дает четность (XOR из биты) аккумулятора, A.
Определяется пользователем, UD. Может быть прочитан и записан программным обеспечением; аппаратное обеспечение не влияет иным образом.
Флаг переполнения, OV. Устанавливается, когда добавление вызывает подписанное переполнение.
Выбор регистра 0, RS0. Младший бит банка регистров. Устанавливается, когда используются банки 0x08 или 0x18.
Выбор регистра 1, RS1. Старший бит банка регистров. Устанавливается, когда используются банки 0x10 или 0x18.
Флаг 0, F0. Может быть прочитан и записан программным обеспечением; аппаратное обеспечение не влияет иным образом.
Вспомогательный перенос, AC. Устанавливается, когда сложение производит перенос из бита 3 в бит 4.
Бит переноса, C. Часто используется как общий регистр для битовых вычислений или «логический аккумулятор».
Accumulator, A (0xE0)
Этот регистр используется большинством инструкций.
Регистр B (0xF0)
Он используется как расширение аккумулятора для команд умножения и деления.
256 одиночные биты имеют прямую адресацию. Это 16 ячеек IRAM из 0x20–0x2F и 16 регистров специальных функций 0x80, 0x88, 0x90,..., 0xF8. К любому биту этих байтов можно получить прямой доступ с помощью множества логических операций и условных переходов.
Обратите внимание, что PSW не содержит общих отрицательных (N) или нулевых (Z) флагов. Для первого наиболее значимый бит аккумулятора может быть адресован напрямую, поскольку это SFR с побитовой адресацией. Для последнего есть явные инструкции для перехода к тому, равен ли аккумулятор нулю. Также существует операция сравнения двух операндов и перехода.
Набор команд