Регистры CPU08
На Рис.1 показаны пять регистров CPU08. Регистры CPU08 не входят в карту памяти CPU.
- A - Аккумулятор (Accumulator)
- H:X - Индексный регистр (Index Register)
- SP - Указатель стека (Stack Pointer)
- PC - Счетчик команд (Program Counter)
- CCR - Регистр кодов признаков (Condition Code Register)
- V - Флаг переполнения дополнения до двух (Two's Complement Overflow Flag)
- H - Флаг полупереноса (Half-Carry Flag)
- I - Маска прерывания (Interrupt Mask)
- N - Флаг отрицательного значения (Negative Flag)
- Z - Флаг нулевого значения (Zero Flag)
- C - Флаг займа/переноса (Carry/Borrow Flag)
Рис. 1. Программная модель CPU08
Аккумулятор
Аккумулятор, показанный на Рис.2, является 8-разрядным регистром общего назначения. CPU использует аккумулятор для сохранения операндов и результатов арифметических и неарифметических операций.
Рис. 2. Аккумулятор (A)
Индексный регистр
16-разрядный индексный регистр, показанный на Рис.3, позволяет пользователю индексировать или адресовать 64-килобайтовое адресное пространство. Состоящий из двух байтов 16-разрядный регистр обозначается H:X. Младший байт индексного регистра обозначается X и старший байт имеет обозначение H. При сбросе байт H очищается. При H = 0 и отсутствии команды, активирующей использование байта H, регистр H:X функционально идентичен регистру IX семейства M6805.
В режимах индексной адресации CPU использует содержимое регистра H:X для определения фактического адреса операнда. Регистр H:X может быть использован для временного сохранения данных. См. подразделы: Индексный без смещения, Индексный с 8-разрядным смещением и Индексный с 16-разрядным смещением.
Рис. 3. Индексный регистр (H:X)
Указатель стека
Указатель стека, показанный на Рис. 4, является 16-разрядным регистром, в котором содержится адрес следующей ячейки стека. В обеспечение совместимости с семейством M6805 во время сброса указатель стека устанавливается в состояние $00FF.
Примечание: Команда RSP устанавливает младший байт в состояние $FF и не воздействует на старший байт.
Адрес в указателе стека декрементируется по каждому занесению данных в стек и инкрементируется по каждому извлечению данных из стека. SP всегда указывает положение готового (пустого) байта стека.
CPU работает в режимах адресации указателя стека с 8- и 16-разрядным смещением, что позволяет использовать указатель стека в качестве индексного регистра для обращения к временным переменным в стеке. CPU использует содержимое регистра SP для определения фактического адреса операнда. См. подразделы По указателю стека с 8-разрядным смещением, и По указателю стека с 16-разрядным смещением.
Рис. 4. Указатель стека (SP)
Примечание: Хотя предустановленным значением является значение $00FF, размещение стека является произвольным и может быть изменено пользователем на любое, которое RAM занимает в карте памяти. Перемещение SP за пределы страницы 0 (от $0000 до $00FF) высвобождает адресное пространство, к которому можно обращаться используя эффективный режим прямой адресации.
Счетчик команд
Счетчик команд, показанный на Рис. 5, является 16-разрядным регистром, который содержит адрес следующей выбираемой команды или операнда.
Обычно адрес в счетчике команд, по каждой выборке команды или операнда, автоматически инкрементируется к последующей ячейке памяти. Операции переходов, ветвлений и прерываний загружают счетчик команд другими адресами, отличными от тех, которые соответствуют последующей ячейке памяти.
Во время сброса счетчик команд загружается содержимым вектора сброса, размещенным по адресам $FFFE и $FFFF, определяющим первую команду, которая будет выполняться по завершению состояния сброса.
Рис. 5. Счетчик команд (PC)
Регистр кодов признаков
8-разрядный регистр кодов признаков, представленный на Рис.6, содержит маску прерывания и пять флагов, которые указывают на результат выполненной операции. Биты пятый и шестой постоянно в состоянии логической 1. В следующем подразделе описывается функционирование регистра кодов признаков.
Рис. 6. Регистр кодов признаков (CCR)
V - Флаг переполнения
CPU устанавливает флаг переполнения в том случае, когда в результате операции возникает переполнение дополнения до двух. Флаг переполнения используется командами переходов со знаком BGT, BGE, BLE и BLT. Флаг устанавливается командами ASL, ASR, LSL, LSR, ROL и ROR, хотя его значение, в данном случае, не имеет смысла.
H - Флаг полупереноса
CPU устанавливает флаг полупереноса в том случае, когда в результате операции ADD или ADC возникает перенос между битами 3 и 4 аккумулятора. Флаг полупереноса используется в операциях двоично-десятичной арифметики. Состояния флагов H и C используются командой DAA для определения соответствующего корректирующего фактора.
I - Маска прерывания
При установленной маске прерывания все прерывания запрещаются и разрешаются только тогда, когда маска прерывания очищена. При обработке прерывания маска прерывания автоматически устанавливается после сохранения регистров CPU в стеке но прежде, чем будет выбран вектор прерывания.
Примечание: Для обеспечения совместимости с M6805 регистр H автоматически в стек не заносится. Если подпрограмма обработки прерывания использует X (и H, если он не очищен), то пользователь должен заносить в стек и извлекать из стека содержимое H, используя внутри подпрограммы команды PSHH и PULH.
Запрос на прерывание, поступивший в то время, когда маска прерывания установлена, фиксируется и обрабатывается, в соответствии с приоритетом, сразу после того, как бит I будет очищен.
Команда возврата из прерывания (RTI) извлекает из стека состояния регистров CPU, восстанавливая маску прерывания до ее очищенного состояния. После каждого сброса маска прерывания устанавливается и может быть очищена только командой программы. См. подраздел Сбросы и прерывания.
N - Флаг отрицательного значения
CPU устанавливает флаг отрицательного значения в том случае, когда результатом арифметической, логической операций или операции манипулирования данными становится отрицательный результат.
Z - Флаг нулевого значения
CPU устанавливает флаг нулевого значения в том случае, когда результатом арифметической, логической операций или операции манипулирования данными становится результат $00.
C - Флаг займа/переноса
CPU устанавливает флаг займа/переноса в том случае, когда в результате операции сложения происходит перенос бита 7 аккумулятора или когда в результате операции вычитания необходимо произвести заем. Ряд команд логических операций и манипулирования данными очищают или устанавливают флаг займа/переноса (такие команды, как тестирования бита и ветвления, сдвига и вращения).
|