Поиск по сайту:

 


По базе:  

микроэлектроника, микросхема, микроконтроллер, память, msp430, MSP430, Atmel, Maxim, LCD, hd44780, t6963, sed1335, SED1335, mega128, avr, mega128  
  Главная страница > Обзоры по типам > Микроконтроллеры > HC08 > Архитектура

реклама

 




Мероприятия:




Прямая адресация

Большинство команд прямой адресации всего двумя байтами способны обращаться к любым первым 256 адресам памяти. Первый байт является операционным кодом и второй байт является младшим байтом адреса операнда. Значение старшего байта действительного адреса принимается равным $00 и не включается в байты команды, что сокращает пространство памяти программ и время выполнения команды. Таким образом прямая адресация ограничивается использованием области памяти с адресами $0000 - $00FF, называемой прямой страницей, или страницей 0.

Команды прямой адресации занимают в пространстве памяти программ на один байт меньше, чем эквивалентные команды расширенной адресации. За счет исключения дополнительного обращения к памяти время выполнения команды сокращается на один цикл - что дает существенную экономию в случае длинных программ. Большинство микроконтроллеров занимают под RAM не всю область $0000 - $00FF, что позволяет разработчикам использовать свободные ячейки этой области для размещения наиболее часто используемых переменных, что также сокращает время выполнения команд.

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

Команды CPHX, STHX и LDHX являются двухбайтовыми командами, выбирающими 16-разрядные операнды. Старшие байты выбираются прямой адресацией; младшие байты выбираются прямой адресацией + 1 В таблице 5 перечислены команды использующие прямую адресацию.

Нижеследующий пример кодов содержит две команды прямой адресации: STHX (сохранить H:X в памяти) и CPHX (сравнить H:X с памятью). Первая команда (STHX) инициализирует установку TEMP ячейки RAM в нулевое состояние и вторая команда (STHX) загружает в ячейку TEMP состояние $5555. Команда CPHX сравнивает содержимое H:X с значением RAM:(RAM + 1). В данном примере RAM:(RAM + 1) = TEMP = $50:$51 = $5555.

Машинный код    Метка    Операция     Операнд     Комментарий

                 RAM       EQU          $50         ; Соответствие RAM
                 ROM       EQU          $6E00       ; Соответствие ROM
                           ORG          $RAM        ; Начало RAM
                 TEMP      RMB          2           ; Резервированные 2 байта
                           ORG          $ROM        ; Начало ROM
5F               START     CLRX                     ; X = 0
8C                         CLRH                     ; H = 0
3550                       STHX         TEMP        ; H:X=0 > temp
455555                     LDHX         #$5555      ;Загрузка H:X содержимым $5555
3550                       STHX         TEMP        ; Temp= $5555
7550             BAD_PART  CPHX         RAM         ; RAM=temp
26FC                       BNE          BAD_PART    ; RAM=temp будет оставаться 
                                                    ; неизменным пока не произойдет 
                                                    ; ошибка!
20F1                       BRA          START       ; Снова выполнить то же


Таблица 5. Команды прямой адресации

Мнемоника Команда
ADC Сложить память и перенос с аккумулятором (Add Memory and Carry to Accumulator)
ADD Сложить память с аккумулятором (Add Memory and Accumulator)
AND Выполнить логическое AND памяти с аккумулятором (Logical AND of Memory and Accumulator)
ASL* Арифметически сдвинуть память влево (Arithmetic Shift Left Memory)
ASR Арифметически сдвинуть память вправо (Arithmetic Shift Right Memory)
BCLR Очистить бит в памяти (Clear Bit in Memory)
BIT Поразрядно сравнить память с аккумулятором (Bit Test Memory with Accumulator)
BRCLR Перейти, если бит n памяти очищен (Branch if Bit n in Memory Clear)
BRSET Перейти, если бит n памяти установлен (Branch if Bit n in Memory Set)
BSET Установить бит в памяти (Set Bit in Memory)
CBEQ Сравнить содержимое прямого адреса с аккумулятором и перейти, если равно (Compare Direct with Accumulator and Branch if Equal)
CLR Очистить память (Clear Memory)
CMP Сравнить аккумулятор с памятью (Compare Accumulator with Memory)
COM Выполнить дополнение до двух содержимого памяти (Complement Memory)
CPHX Сравнить индексный регистр с памятью (Compare Index Register (H:X) with Memory)
CPX Сравнить младший байт индексного регистра с памятью (Compare X (Index Register Low) with Memory)
DBNZ Декрементировать память и перейти, если не равно ($00) (Decrement Memory and Branch if Not Equal ($00))
DEC Декрементировать память (Decrement Memory)
EOR Выполнить исключающее OR памяти и аккумулятора (Exclusive OR Memory with Accumulator)
INC Инкрементировать память (Increment Memory)
JMP Выполнить переход (Jump)
JSR Выполнить переход в подпрограмму (Jump to Subroutine)
LDA Загрузить аккумулятор содержимым памяти (Load Accumulator from Memory)
LDHX Загрузить индексный регистр содержимым памяти (Load Index Register (H:X) from Memory)
LDX Загрузить младший байт индексного регистра содержимым памяти (Load X (Index Register Low) from Memory)
LSL* Выполнить логический сдвиг памяти влево (Logical Shift Left Memory)
LSR Выполнить логический сдвиг памяти вправо (Logical Shift Right Memory)
NEG Выполнить дополнение до двух содержимого памяти (Negate Memory)
ORA Выполнить включающее OR содержимого аккумулятора и памяти (Inclusive OR Accumulator and Memory)
ROL Выполнить вращение памяти влево через перенос (Rotate Memory Left through Carry)
ROR Выполнить вращение памяти вправо через перенос (Rotate Memory Right through Carry)
SBC Вычесть память и перенос из аккумулятора (Subtract Memory and Carry from Accumulator)
STA Сохранить аккумулятор в памяти (Store Accumulator in Memory)
STHX Сохранить индексный регистр в памяти (Store Index Register (H:X) in Memory)
STX Сохранить младший байт индексного регистра в памяти (Store X (Index Register Low) in Memory)
SUB Вычесть память из аккумулятора (Subtract Memory from Accumulator)
TST Проверить память на отрицательное значение или ноль (Test Memory for Negative or Zero)

*) - ASL = LSL

<-- Предыдущая страница Оглавление Следующая страница -->





 
Впервые? | Реклама на сайте | О проекте | Карта портала
тел. редакции: +7 (995) 900 6254. e-mail:info@eust.ru
©1998-2023 Рынок Микроэлектроники