Motorola 6800/Документация

Материал из Emuverse
Перейти к: навигация, поиск
Red copyright.png Данный материал защищён авторскими правами!

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

Источник: http://solidstate.karelia.ru/~yura/pyldin/document/m6800_txt.htm

Операции управления программой можно разделить на две категории:
1)операции с индексным регистром/указателем стека,2) операции
переходов Jump и Branch.

     Операции с индексным регистром и указателем стека

  Инструкции для прямого управления индексным регистром и 
указателем стека собраны в табл.3. Операция сравнения CPX может
быть использована для сравнения значения индексного регистра с
16-битным значением и изменением содержимого регистра флагов.
TSX инструкция загружает в индексный регистр адрес последнего
байта данных, помещенных в стек. TXS инструкция загружает в
указатель стека значение на 1 меньше текущего содержимого
индексного регистра. Это приводит к тому, что следующий байт,
который должен быть вынут из стека, идет из места, указанного
индексным регистром.Использование этих двух инструкций может
быть пояснено описанием понятия стек в системе М6800. Стек может
быть представлен как последовательный список данных, хранимых
в RAM. Указатель стека содержит 16-битный адрес памяти, который
используется для доступа к отдельному данному с одного конца на
основе принципа LIFO (последний в-первый из) в противоположность
случайному режиму доступа, используемому для других режимов
адресации.
  Набор инструкций для М6800 и структура прерываний позволяют
интенсивное использование стека для эффективной обработки
перемещения данных, подпрограмм и прерываний. Инструкции могут
быть использованы для создания одного или более стеков в любом
месте RAM. Длина стека ограничена только объемом доступной
памяти. Операции push и pull с указателем стека иллюстрированы
на рис. 15 и 16
              ЦП                                ЦП
   ---------------------           -------------------------

      Акк. А= F3        --               Акк. А= F3
  ----------------------  |         -------------------------     
       m-2                |             m-2
       m-1                |     SP->    m-1
SP->   m               <--             m       F3
       m+1     7F                      m+1     7F
       m+2     63                      m+2     63
       m+3     FD                      m+3     FD
       ....                             ....   
PC->   PSHA                            PSHA
       след.инстр.                PC   след.инстр. 
                 
  а)перед выполнением psha        б)после выполнения psha
Рис. 15 Стековая операции при push инструкции

               ЦП                                ЦП
   ------------------------          ----------------------- 

     Акк. А =00          <--               Акк. А =1А
  ------------------------- |         -----------------------
       m-2                  |              m-2
       m-1                  |              m-1
SP->   m                    |              m
       m+1  1A            --      SP->     m+1  1A
       m+2  3C                             m+2  3C
       m+3  D5                             m+3  D5
       .....                               .....
PC->   PULA                                PULA
       След.инстр.                PC->     след.инстр.

  Рис. 16 Стековая операция при pull инструкции

 Инструкция push сохраняет содержимое указанного аккумулятора
(в примере -А) в памяти, определенной указателем стека.
Указатель стека автоматически уменьшается следующей операцией
сохранения и указывает на следующее пустое место в стеке.
Инструкция pull (pula или pulb) загружает последний байт, 
хранимый  в стеке, в указанный аккумулятор. Указатель стека
автоматически увеличивается как раз перед переносом данных, так
что он станет указывать на последний хранимый в стеке байт, а не
на следующее пустое место. Заметим, что инструкция pull не 
удаляет данные из памяти;в примере 1А еще находится в положении
(m+1) следующим за выполнением pula. Последующая push инструкция
записала бы в это место новые помещаемые данные.
 Ход работы программы при использовании инструкций JUMP и BRANCH
показан на рис. 17.

       PC главная программа        PC главная программа
        n     6E =JMP                  n    7E =JMP
        n+1   K=смещение             n+1    KH=след.адр.
              ....                   n+2    KL=след.адр.
        Х+К   след.инстр.                   .....
                                      K     след.инстр.    
а)Jump с индексированным режимом    б)Jump с расширенным режимом
         адресации                     адресации

                      Главная программа
                        n        20= BRA
                        n+1      K*=смещение
                                  .......
                       (n+2)+-K  след.инстр.
K*- 7-битное значение со знаком
                        в)Branch

       Рис. 17 Ход программы для инструкций JUMP и BRANCH
 
  Выполнение инструкций перехода к подпрограмме (BSR) и перехода
к подпрограмме (JSR) сохраняет адрес возврата в стеке как
показано на рис. 18-20. Содержимое указателя стека уменьшается
после того, как каждый из двух байт адреса возврата помещается в
стек. Для обоих этих инструкций адрес возврата это есть адрес
места в памяти, следующий за байтами кода, который соответствует
инструкциям BSR или JSR. Код, требуемый для BSR или JSR может
быть двух или трехбайтный, и зависимости от того применяется
индексированный адресный режим (2 байта) или расширенный адресный
режим (3 байта) в JSR.

          m-2                         SP-> m-2
          m-1                              m-1 (n+2)H
 SP->     m                                m   (n=2)L
          m+1  7E                          m+1  7E
          ....                             ....
PC->      n    BSR                         n    BSR
          n+1 +-K=смещение*                n+1 +-K смещение
          n+2 след.глав.инст.              n+2 след.глав.инстр.
  * 7-битное значение со знаком                .....
                                     PC->  (n+2)+-K 1-я инстр.п/п
     а)до выполнения                   б)после выполнения

   Рис. 18 Ход программы для инструкции BSR

          m-2                          PC-> m-2
          m-1                               m-1 (n+3)H
  SP->    m                                 m   (n+3)L
          m+1  7E                           m+1  7E
          m+2  7A                           m+2  7A
          m+3  7C                           m+3  7C
          .....                                 .....
 PC->     n    JSR=BD                       n    JSR 
          n+1  SH=адрес п/п                 n+1  SH=адрес п/п
          n+2  SL=адрес п/п                 n+2  SL=адрес п/п
          n+3  след.инстр.главн.пр.         n+3  след.инстр.гл.
          .....                             .....
                                       PC-> S   1-я инстр.п/п
          (S образуется из SH и SL)
       а)до выполнения                    б)после выполнения
 
Рис. 19 Ход программы для инструкции JSR (расширенный режим адрес.)

Прежде чем его помещать в стек, программный счетчик(PC)
автоматически инкрементируется правильное число раз, чтобы
показывать на положение следующей инструкции. Возврат из
инструкции подпрограммы (RTS) выталкивает адрес возврата из
стека и загружает его в PC, как показано на рис 21.

       m-2                       SP -> m-2
       m-1                             m-1   (n+2)H
SP->   m                               m     (n+2)L
       m+1  7E                         m+1    7E
       m+2  7A                         m+2    7A

PC->   n  JSR=AD                       n  JSR=AD
       n+1 K=offset*                   n+1 K=offset
       n+2 сл.инстр.гл.пр.             n+2 сл.инстр.гл.пр.

                                 PC->  X+K 1 инстр.п/п
     К=8 битное без знака       Х=содержимое индексного регистра
    a) до выполнения             б) после выполнения
 
   Рис. 20 Ход программы для JSR (индексированный режим)

SP-> m-2                                m-2
     m-1  (n+3)H                        m-1
     m    (n+3)L                 SP->   m   
     m+1  7E                            m+1  7E
     m+2  7A                            m+2  7A

     n    JSR=BD                        n    JSR=BD
     n+1  SH=адрес п/п                  n+1  SH=адрес п/п
     n+2  SL=адрес п/п                  n+2  SL=адрес п/п
     n+3  сл.инстр.гл.пр.         PC->  n+3  сл.инстр.гл.пр.

          послед.инстр.п/п                   послед.инстр.п/п
PC-> Sn   RTS                           Sn   RTS

  а)перед выполнением             б)после выполнения
   Рис. 21 Ход программы для команды RTS

Имеется несколько операций, которые сохраняют статус ЦП в стеке.
Прерывание программного обеспечения (SWI), ожидание прерывания
(WAI), маскируемое прерывание(IRQ) и немаскируемое прерывание
(NMI) сохраняют содержимое внутренних регистров ЦП (за
исключением самого указателя стека)в стеке как показано на рис.
23. Статус ЦП восстанавливается при возврате из прерывания (RTI),
как показано на рис.22.

SP->  m-7                                m-7
      m-6  CCR                           m-6  CCR
      m-5  ACCB                          m-5  ACCB
      m-4  ACCA                          m-4  ACCB
      m-3  XH(индекс.рег)                m-3  XH
      m-2  XL(индекс.рег)                m-2  XL
      m-1  PC(n+1)H                      m-1  PCH
      m    PC(n+1)L              SP->    m    PCL
      m+1  7E                            m+1  7E

      n+1  след.инстр.гл.пр.     PC->    n+1  след.инстр.гл.пр.

      Sn   посл.инстр.прерыв.            Sn  посл.инстр.прерыв.
PC->       RTI                               RTI

 а) до выполнения                б) после выполнения

 Рис. 22 Ход программы для прерывания

Программное  Ожидание            Аппаратное прерывание  
прерывание   прерывания           или немаскируемое 
главная пр.  главная пр.         прерывание(NMI) гл.пр.
n  3F=SWI    n  3E=WAI         n последний текущий байт программы
    |            |                |        / \
    |            |         да    /  \ нет /int\  нет
    |            |         ___ /NMI? \__ /mask \_______
    |            |         |   \     /   \set? /       |
    |            |         |     \ /       \  /(CCR4)  |
    |            |         |                | да       |
    |            |         |      продолжение гл.прог. |
    |            |         |      n+1 след.инстр.гл.пр.|
    V            V         V                           V
--------------------------------------------------------
    |                                стек
 Стек ЦП              SP-> m-7
Содержимое  --->           m-6 код условия
 регистров                 m-5 аккумулятор А
    |                      m-4 аккумулятор В
    |                      m-3 Индексный регистр (XH)
    |                      m-2 Индексный регистр (XL)
    |                      m-1 PC(n+1)H
    |                      m   PC(n+1)L  
    |
-------------------------------------------------   Restart
|SWI       |HRDWR    ------------->|WAI       NMI|     |
|          |INTR     | да          |             |     |
|          |         /\            |             |     | 
|          |       /Int\  Hrdwr.   |             |     |
|          | нет  /Mask \ Int.Reg. |          NMI|     |   
|          |<---/ set ?  \<---- цикл ожидания--->|     |
|          |    \ (CCCR) /                       |     |
|          |      \    /                         |     |
|FFFA      |FFF8    \/                     FFFC  |FFFE | 
|FFFB      |FFF9                           FFFD  |FFFF |
--------------------------------------------------------
Назначение памяти прерывания               |
FFF8       IRQ  MS             Установить маску прерывания
FFF9       IRQ  LS                        CCR4
FFFA       SWI  MS                         |
FFFB       SWI  LS             Загрузить вектор прерывания
FFFC       NMI  MS             в программный счетчик
FFFD       NMI  LS--->                     |
FFFE       Reset MS             Программа обработки  
FFFF       Reset LS                  прерывания
                                1 инстр. прерывания
Адрес первой инструкции образуется вытаскиванием двух байт из
Per.Mem.Assign.
    MS-старший адресный байт,LS-младший адресный байт
Рис. 23 Ход программы для прерывания

                 Операции  JUMP и BRANCH
Инструкции jump и branch собраны в табл.4. Эти инструкции
используются для управления переходом из одной точки программы
в другую. Инструкция NOP (нет операции) хотя и включена сюда,
но является операцией типа jump в ограниченной смысле. Ее
действием является просто увеличение PC на 1. Она полезна при
 изменении программы для вставки некоторой другой инструкции,
которая возникла в течение отладки. Она также используется для
выравнивания (equalizing) времени выполнения через изменение
траектории в управляющей программе. Выполнение инструкций
jump,branch. Всегда BRA влияет на ход программы так как
показано на рис. 17. Когда ЦП встречает инструкцию jump
(индексированную), он добавляет смещение к значению индексного
регистра и использует результат как адрес следующей инструкции,
которая должна быть выполнена. В режиме расширенной адресации
адрес следующей инструкции, которая должна быть выполнена,
извлекается из двух ячеек непосредственно следующих за JMP
инструкцией. Инструкция BRANCH (BRA) всегда подобна инструкции
JMP(расширенной) за исключением того, что применяется режим
относительной адресации и переход ограничен областью -125 и
 +127  байт от самой инструкции перехода. Код операции для
инструкции BRA требует на 1 байт меньше чем JMP (расширенный)
,но требует на один цикл больше для выполнения.
 Действие операторов перехода на п/п (JSR) и (BSR) на ход 
программы показано на рис. 18-20. Заметим, что PC соответственно
инкрементируется прежде чем он помещается в стек так, чтобы
указывать на правильный адрес возврата. Операция BSR и инструкция
JSR (расширенная) подобны за исключением диапазона. BSR требует
более короткий код операции чем JSR-2 байта, а не 3-и также
выполняется на один цикл быстрее чем JSR. Возврат из п/п (RTS)
используется как конец п/п, чтобы вернуться в главную программу,
 как показано на рис. 21. Эффект от выполнения SWI и WAI и их
связь с аппаратными прерываниями показан на рис. 22. SWI заставляет
ЦП помещать содержимое своих регистров в стек,а затем вытаскивает
стартовый адрес процедуры прерывания из ячеек памяти, относящимся
к адресам FFFA  и FFFB. Заметим, что как в случае инструкции
подпрограммы PC инкрементируется, чтобы указывать на точку с
правильным адресом возврата, прежде чем помещается в стек.
Инструкция RTI (возврат из прерывания)(фиг.22) используется в
конце процедуры прерывания, чтобы вернуть управление главной
программе. Инструкция SWI полезна для вставки точек прерывания
(break points) в управляющую программу, т.е. она может быть
использована чтобы остановить действие и поместить содержимое
регистров ЦП в память, где их можно исследовать. Инструкция WAI 
используется для уменьшения времени необходимого для обслуживания
аппаратного прерывания ;она помещает в стек содержимое ЦП и затем
ожидает прерывания,эффективно удаляя из последовательности 
аппаратного прерывания время помещения в стек. 
 Инструкции условного перехода, рис. 24, состоят из 7 пар
дополняющих друг друга инструкций.
 
  Рис. 24  Инструкции условных переходов

           BMI : N=1  BEQ: Z=1
           BPL:  N=0  BNE: Z=0
           BVC:  V=0  BCC: C=0
           BVS:  V=1  BCS: C=1
           BHI: C+Z=0 BLT: NandV=1
           BLS: C+Z=1 BGE: NandV=0
           BLE: Z+(NandV)=1 BGT: Z+(NandV)=0
 
                                    Они используются, чтобы
тестировать результаты предыдущей операции и каждая приводит
либо к продолжению выполнения следующей в последовательности
инструкции,. если фиксировано несовпадение условия, или ведет к
переходу в другую точку программы, если тестирование успешно.
4 из этих пар просто тестируют статусные биты N,Z,V и C:
1. Переход по минусу (BMI) и переход по плюсу (BPL) тестируют
знаковый бит N, чтобы определить отрицателен или положителен
предыдущий результат.
2. Переход при равенстве (BEQ) и переход при неравенстве (BNE)
используется, чтобы тестировать статусный бит нуля Z, чтобы
определить равен или неравен нулю результат предыдущей операции.
Эти две операции полезны, когда следуют за инструкциями
сравнения (CMP), чтобы тестировать равенство между аккумулятором
и операндом. Они также используются следом за тестом битов (BIT),
чтобы определить находятся или нет в одинаковом состоянии биты в
 аккумуляторе и операнде.
3. Переход по флаг переполнения снят (BVC) и флаг переполнения
установлен (BVS) тестируют состояние бита V, для выяснения не
вызвала ли предыдущая операция арифметического переполнения.
4. Переход по флаг переноса снят (BCC) и по флаг переноса
установлен (BCS) тестируют состояние бита C, чтобы определить
не вызвала ли предыдущая операция перенос бита. BCC и BCS
используются для тестирования относительную величину, когда
тестируемые значения рассматриваются как беззнаковые двоичные
числа,т.е. в области 00(низшее) и FF(высшее).BCC, следуя за
операцией сравнения CMP будет вызывать переход, если беззнаковое
значение в аккумуляторе больше или равно значению операнда.
Наоборот, BCS будет вызывать переход, если значение в
аккумуляторе меньше чем операнд.
Пятая дополнительная пара, переход по выше чем (BHI) и переход
по ниже чем или одинаково (BLS) является в сущности дополнением
к BCC и BCS. BHI тестирует оба C и Z =0; если она следует за CMP
то будет вызывать переход если значение в аккумуляторе больше
(выше) чем операнд. Наоборот, BLS будет вызывать переход, если
беззнаковое бинарное значение в аккумуляторе меньше (ниже) чем
или равно операнду.
Оставшиеся две пары полезны при тестировании результатов операций   
в которых значения рассматриваются как знаковые числа дополняющие
2. Это отличается от беззнакового бинарного случая в следующем
смысле: в беззнаковом ориентация является выше или ниже, а в
знаковом дополнении до 2, сравнение производится между большим и
 меньшим в области значений -128 и +127.
Переход при меньше чем нуль (BLT) и больше или равно нулю (BGE)
тестирует статусные биты на N and V=1 и N and V =0, соответственно.
BLT будет всегда вызывать переход, следуя за оператором, в котором
складываются два отрицательных числа. В дополнение он будет
вызывать переход, следуя за CMP, котором значение аккумулятора
было отрицательным, а операнда-положительным. BLT никогда не
вызывает перехода, следуя за командой CMP, в которой значение 
аккумулятора положительно, а значение операнда отрицательно.
BGE-дополнение к BLT, будет вызывать переход, следуя за операциями
в которых два положительных значения складываются или в которых
результат -нуль.
Последняя пара,переход при меньше чем или равном нулю (BLE)
и при больше чем нуль (BGT) тестирует статусные биты на
Z and(N+V)=1 и Z and (N+V)=0, соответственно. Действие BLE
идентично действию BLT за исключением, что переход будет также
случаться, если результат предыдущей операции равен нулю. Обратно,
BGT подобно BGE, за исключением, что нет перехода при нулевом
результате.
            Операции регистра кодов условий (флагов)
Регистр кодовых условий (CCR) является 6-битным регистром внутри
ЦП, который полезен в управляющей программе во время системной
операции. Значение битов показано на рис. 25
   Рис. 25 Определение битов регистра условных кодов
            b5   b4  b3  b2  b1  b0
            H    I   N   Z   V   C
H=полуперенос,устанавливается всегда,когда происходит перенос
разряда из b3 в b4, порождается операциями ADD,ABA,ADC; очищается
если нет переноса, не изменяется другими операциями. I= маска
прерывания,устанавливается через аппаратное или программное
прерывание или командой SET; очищается операцией CLI.( Обычно не
используется в арифметических операциях). Восстанавливается в 0
как результат операции RTI, если I, сохраненное в стеке, низкое.
N=отрицательный,устанавливается,если старший бит(b7) результата
равен 1, иначе очищается (сбрасывается в 0).
Z=нуль, устанавливается в 1, если результат нуль,иначе очищается.
V=переполнение,устанавливается в 1, если результат арифметической
операции-арифметическое переполнение, иначе очищается.
C=перенос, устанавливается,если был перенос из наиболее значимого
бита (b7) результата, иначе очищается. 
Инструкции, показанные в табл. 5 доступны пользователю для прямого
управления регистром CCR. Последовательность CLI-WAI инструкций
работает правильно только, если предыдущая инструкция была нечетной
(наименее значимый бит=1). Подобно рекомендовалось предшествовать
любой SEI инструкции с нечетным кодом операции- таким как NOP. Эти
предостережения не обязательны для MC6800, произведенных позднее
ноября 1977 года. Системы, которые требуют чтобы окно прерываний
было открыто под управлением программы должны использовать 
последовательность CLI-NOP-SEI, а не CLI-SEI.
 Табл. 5 Инструкции регистра кода условий
                                                   содержимое CCR
Операции                 Мнемоника ОП -  = буль.оп. H I N Z V C 
---------------------------------------------------------------------
Очистка переноса            CLC    0C 2  1  0->C    . . . . . R
Очистка маски прерывания    CLI    0E 2  1  0->I    . R . . . .
Очистка переполнения        CLV    0A 2  1  0->V    . . . . R .
Установка переноса          SEC    0D 2  1  1->C    . . . . . S
Установка маски прерывания  SEI    0F 2  1  1->I    . S . . . .
Установка переполнения      SEV    08 2  1  1->V    . . . . S .
Аккумулятор А->CCR          TAP    06 2  1  A->CCP  *
CCR -->аккумулятор А        TPA    07 2  1  CCP->A  . . . . . .
R=сброс(reset),S=установка(set), .=не изменяется, * -все биты
устанавливаются в соответствии с содержимым аккумулятора А.  
 
                Режимы адресации

ЦП оперирует 8-битовыми двоичными числами, представляемыми ему по
шине данных. Данное число (байт) может представлять или данное
или команду, которая должна быть выполнена, в зависимости от того
где она находится в управляющей программе. М6800 имеет 72
уникальные операции, однако он распознает и выполняет действия по
197 из 256 возможностей, которые могут случаться, используя 8-
битную длину слова. Это большое число инструкций является следствием
того, что многие из выполняемых инструкций имеют более чем один
режим адресации.
 Эти режимы адресации относятся к способу, которым программа
заставляет ЦП получать ее инструкции и данные. Программист должен
иметь метод для адресации внутренних регистров ЦП и всех ячеек
внешней памяти. Выбор желаемого способа адресации делается
пользователем, когда записываются установки источника и приемника
данных в команде. Трансляция в соответствующий код операции тогда
зависит от использованного метода. Если используется ручное
программирование, режим адресации явно указывается кодом операции.
Например,непосредственный,прямой,индексированный и расширенный
режимы могут все быть использованы в инструкции ADD. Соответствующий
режим определяется выбором (в 16-чном обозначении) кодов операций
8B,9B,AB,BB, соответственно.
Формат определения источника включает адекватную информацию для
выбора, если ассемблеровская программа используется, чтобы породить
код операции.Например, непосредственный режим выбирается 
ассемблером всякий раз, когда он встречает символ "#" в поле
операнда. Подобно, "X" в поле операнда вызывает выбор режима 
индексирования. Только относительный режим применяется к branch
инструкциям, следовательно, мнемоника инструкции сама достаточна
для ассемблера, чтобы определить режим адресации. Для инструкций
которые используют оба, прямой и расширенный режимы, ассемблер
выбирает прямой режим, если значение операнда находится а
диапазоне 0-255, иначе выбирается расширенный режим. Имеется
ряд инструкций, для которых расширенный режим годен, а прямой -
нет. Для этих инструкций ассемблер автоматически выбирает режим
расширенной адресации, даже если операнд находится в диапазоне
0-255. Режимы адресации собраны на рис. 26.
 
          Рис. 26 Обзор режимов адресации

Прямой:                 n   D0 инструкция
------- 
Пример: SUBB Z          n+1 Z=адрес операнда 
Область адресации       n+2 след.инстр.  
=0-255   *                      .         
(К=однобайтный          Z   K=операнд    
операнд)                    или       
(К=двухбайтный          Z   KH=операнд   
операнд)                Z+1 KL=операнд   

*    если Z<=255 ассемблер выбирает прямую адресацию, иначе 
выбирается расширенный режим адресации
 
Непосредственный:       n   инструкция
-----------------
Пример: LDAA #K         n+1 К=операнд
(К=однобайтный          n+2 след.инстр      
операнд)                     или
(К=двухбайтный          n   инструкция
операнд)                n+1 KH=операнд
(CPX,LDX,LDS)           n+2 KL=операнд
                        n+3 след.инстр.

Расширенный:            n   F0 инструкция
------------
Пример:CMPA Z           n+1 ZH=адрес операнда
область адресации       n+2 ZL=адрес операнда
256-65535 *             n+3 след.инстр.
(К=однобайтный               ...
операнд)                Z   К=операнд
                             или
(К=двухбайтный          Z   KH=операнд
операнд)                Z+1 KL=операнд
         
Относительная:          n        инструкция
--------------
Пример: BNE K           n+1      +-K=смещение перехода
(К=7 битное значение    n+2      след.инстр (2)
со знаком)                       .   
область адресации                .
 -125,+129                        .
относительно n          (n+2)+-K след.инстр. (3)
(2) если тест ветвления неправильный
(3) если тест ветвления правильный

Индексированная :        n    инструкция
----------------- 
Пример: ADDA Z,X         n+1  Z=смещение
Область адресации        n+2  след.инстр.
0-255 относительно             .
индексного регистра,Х          .
(Z=8 битное беззнаковое  X+Z  K=операнд
значение)

Внутренний режим (включает режим аккумуляторного адресования)
-----------  
Последовательные поля в инструкции обычно отделяются одним или
двумя пробелами. исключение к этому правилу случается для
инструкций, которые используют двойную адресацию в поле
операнда и для инструкций, которые должны различать между
двумя аккумуляторами. В этих случаях А и В являются "операндами"
но пробел между ними и оператор могут быть опущены. Это обычно
проявляется в появлении их символьных мнемоник для этих
инструкций.
Инструкция сложения ADD представляет пример двойной адресации
в поле операнда:
Оператор   операнд         комментарий
 ADDA      MEM12      добавить содержимое ячейки MEM12 к 
                      аккумулятору А
или 
 ADDB      MEM12    добавить содержимое ячейки MEM12 к
                      аккумулятору В
Пример, использованный ранее для инструкции тестирования TST
также применим к аккумуляторам и использует режим адресации
аккумулятора, чтобы обозначить какой из двух аккумуляторов
тестируется:
 Оператор                  содержание
 TSTB            тест содержимого аккумулятора В
 TSTA            тест содержимого аккумулятора А
Код инструкций или один или вместе с операндом аккумулятора
содержит всю необходимую информацию об адресе,т.е. внутреннюю
в самой инструкции. Например, инструкция ABA заставляет ЦП
сложить содержимое А и В вместе и поместить результат в
аккумулятор А. Инструкция INCB-другой пример "аккумуляторной
адресации", заставляет содержимое аккумулятора увеличится на 1.
Подобно INX, инкремент индексного регистра, увеличивает
содержимое индексного регистра на 1. Ход программы для 
инструкций такого типа иллюстрирован на рис. 27 и 28. На этих
рисунках общий случай показан слева,а частный пример- справа.
Числовые примеры дана в 10-чном обозначении. Инструкции такого
типа требуют только один байт для кода операции. Ход операции
внутреннего режима цикл за циклом показан в табл. 6.
Рис. 27 Внутренняя адресация
          ЦП                                ЦП  
   ----------------                  -----------------
   |              |                  |индексный рег Х | 
   |              | <--              |  199->200      |<-- 
   |              |   |              |                |  |
   ----------------   |              ------------------  |
         RAM          |                     RAM          |
   ----------------   |              ------------------  |
   |               |  |              |                |  |
   |               |<-|              |                |<-|
   |               |  |              |                |  |
   -----------------  |              ------------------  |
   память программы   |              память программы    |
   -----------------  |              ------------------  |
   |               |  |              |                |  | 
PC | инструкция    |<--      PC=5000 |   INX          |<--
   |               |                 |                |  
   -----------------                 -----------------
Рис. 28 Аккумуляторная адресация

          ЦП                                ЦП  
   ----------------                  -----------------
   |              |                  | аккумулятор В  | 
   |              | <--              |  15 ->16       |<-- 
   |              |   |              |                |  |
   ----------------   |              ------------------  |
         RAM          |                     RAM          |
   ----------------   |              ------------------  |
   |               |  |              |                |  |
   |               |<-|              |                |<-|
   |               |  |              |                |  |
   -----------------  |              ------------------  |
   память программы   |              память программы    |
   -----------------  |              ------------------  |
   |               |  |              |                |  | 
PC | инструкция    |<--      PC=5001 |   INCB         |<--
   |               |                 |                |  
   -----------------                 -----------------
Непосредственный режим адресации
--------------------------------
Операнд является значением, с которым должна быть произведена
операция. Например, инструкция
   Оператор  операнд      комментарий
    LDAA     #25       загрузить число 25 в аккумулятор А
заставляет ЦП непосредственно грузить в аккумулятор значение 25,
другой адресации или ссылки не требуется. Непосредственный
режим выбирается указанием перед значением символа #. Ход
программы для этого режима показан на рис. 29.

Рис. 29 Режим непосредственной адресации
          ЦП                                ЦП  
   ----------------                  -----------------
   |              |                  | аккумулятор А  | 
   |              | <--              |      25        |<-- 
   |              |   |              |                |  |
   ----------------   |              ------------------  |
         RAM          |                     RAM          |
   ----------------   |              ------------------  |
   |               |  |              |                |  |
   |               |<-|              |                |<-|
   |               |  |              |                |  |
   -----------------  |              ------------------  |
   память программы   |              память программы    |
   -----------------  |              ------------------  |
   |               |  |              |                |  | 
PC | данные        |<--      PC=5002 |     LDAA       |<--
   |               |                 |      25        |  
   -----------------                 -----------------
Формат операнда позволяет или соответственно определенные
символы или числовые значения. За исключением инструкций
CPX,LDX,LDS операнд может быть любым значением в интервале
от 0 до 255. Так как CPX,LDX,LDS требуют 16-битного значения,
непосредственный режим адресации для этих трех инструкций
требует двухбайтных операндов. При непосредственном режиме
адресации адрес операнда является фактически адресом ячейки
памяти, следующей непосредственно за самой инструкцией.
Таблица 7 показывает ход операции цикл за циклом для
непосредственного режима адресации.

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

Поле операнда инструкции источника является адресом значения,
с которым производится операция. Режимы прямой и расширенной 
адресации отличаются только областью памяти, к которой они
могут направлять ЦП. Прямая адресация порождает один 8-битный
операнд и следовательно может адресовать ячейки памяти только
в диапазоне 0-255, двухбайтный операнд порождается расширенным
адресованием, позволяя ЦП достигать остальные ячейки памяти
от 256 до 65535. Пример прямой адресации и его действие на ход
программы показан на рис. 30.

Рис. 30 Режим прямой адресации
          
          ЦП                                ЦП  
   ----------------                  -----------------
   |              |                  | аккумулятор А  | 
   |              | <--              |      35        |<-- 
   |              |   |              |                |  |
   ----------------   |              ------------------  |
         RAM          |                     RAM          |
   ----------------   |              ------------------  |
   |               |  |              |                |  |
 ADDR   DATA       |<-|   ADDR=100   |      35        |<-|
   |               |  |              |                |  |
   -----------------  |              ------------------  |
   память программы   |              память программы    |
   -----------------  |              ------------------  |
   |               |  |              |                |  | 
PC | инструкция    |<--      PC=5004 |     LDAA       |<--
   |   ADDR        |            5005 |      100       |  
   -----------------                 ------------------
ADDR=0<255
ЦП после встречи с кодом операции для инструкции LDAA (прямая)
в ячейке памяти 5004 (PC=5004) смотрит следующую ячейку 5005 в
качестве адреса операнда. Затем он устанавливает PC равным
значению, найденному здесь (100 в примере) и вытаскивает
операнд, в этом случае значение, которое должно быть загружено
в аккумулятор А, из этой ячейки. Для инструкций требующих
двухбайтного операнда, таких как LDX, байты операнда были бы
взяты из ячеек 100 и 101. Таблица 8 показывает ход операции
цикл за циклом для прямого режима адресования.
 Расширенная адресация ,пример 31, подобна, за исключением того,
что двухбайтный адрес получается из ячеек 5007 и 5008 после кода
операции LDAB (расширенной), показанного в ячейке 5006.

Рис. 31 Расширенный режим адресации
          ЦП                                ЦП  
   ----------------                  -----------------
   |              |                  | аккумулятор А  | 
   |              | <--              |      45        |<-- 
   |              |   |              |                |  |
   ----------------   |              ------------------  |
         RAM          |                     RAM          |
   ----------------   |              ------------------  |
   |               |  |              |                |  |
 ADDR   DATA       |<-|   ADDR=300   |      45        |<-|
   |               |  |              |                |  |
   -----------------  |              ------------------  |
   память программы   |              память программы    |
   -----------------  |              ------------------  |
PC | инструкция    |  |              |                |  | 
   |   ADDR        |<--      PC=5006 |     LDAB       |<--
   |   ADDR        |            5007 |      300       |  
   -----------------                 ------------------
Расширенная адресация может мыслится как стандартный режим
адресации, т.е. она является методом достижения любого места в
памяти. Прямая адресация, так как требует только одного байта,
дает более быстрый метод обработки данных и порождает управляющий
код с меньшим числом байт. В большинстве приложений область
прямой адресации ячеек памяти 0-2565 сохраняется для RAM. Они
используются для буферизации данных и временного хранения
системных переменных, области, в которой быстрое адресование
имеет важное значение. Ход операции по циклам показан в табл.7
для режима расширенной адресации.

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

В обоих прямом и расширенном режиме адреса, получаемые ЦП 
являются абсолютными числовыми адресами. Режим относительной 
адресации, дополняющий конструкции branch, определяет место
в памяти относительно текущего значения PC. Инструкции перехода
порождают двухбайтный машинный код, один байт для операционного
кода инструкции и один для относительной адресации. (см. фиг.32)

 Фиг. 32 Относительный режим адресации

           ЦП                                ЦП  
   ----------------                  -----------------
   |              |                  |                | 
   |              | <--              |                |<-- 
   |              |   |              |                |  |
   ----------------   |              ------------------  |
         RAM          |                     RAM          |
   ----------------   |              ------------------  |
   |               |  |              |                |  |
   |               |<-|              |                |<-|
   |               |  |              |                |  |
   -----------------  |              ------------------  |
   память программы   |              память программы    |
   -----------------  |              ------------------  |
PC | инструкция    |<--      PC 5008 |     BEQ        |<-- 
   | смещение      |                 |     15         |
(PC+2) след.инстр. |         PC 5010 |  след.инстр.   |  
   -----------------                 ------------------
Так как желательно уметь уметь переходить в любом направлении
8-битный адресный байт интерпретируется как 7-битное число со
знаком,8-й бит операнда трактуется как знаковый бит,0-плюс,1-
минус. Оставшиеся 7 бит представляют числовое значение. Это
приводит к относительной области адресации +-127 относительно
положения самой команды перехода. Однако область перехода
вычисляется относительно следующей инструкции, которая ожидалась
бы, если бы условия перехода не удовлетворялись. Так как два
байта порождаются, то следующая инструкция располагается по
адресу PC+2. Если D определяется как адрес назначения перехода,
тогда область является
         (PC+2)-127 <=D<=(PC+2)+127
     или PC-125<=D<=PC+129
т.е. цель инструкции перехода должна быть в диапазоне -125 и 
 +129 относительно самой инструкции перехода. Для переноса
управления вне этой области используются безусловный переход
(JMP), переход на подпрограмму (JSR)  и возврат и подпрограммы
(RTS). На фиг. 32, когда ЦП встречает код операции для BEQ
(переход если результат последней инструкции равен 0) он 
тестирует бит Z в регистре кода условий. Если этот бит равен 0,
указывая на ненулевой результат, то ЦП продолжит выполнение
следующей инструкции ( в месте 5010 на рис. 32). Если предыдущий
результат был нуль, условие перехода удовлетворяется и ЦП
добавляет смещение (offset) 15 в этом случае к PC+2 и делает
переход на ячейку 5025 за следующей инструкцией. Инструкции
перехода позволяют программисту эффективно направлять ЦП с
одной точки программы на другую в зависимости от результата
теста. Так как управляющая программа обычно находится в ROM и
не может быть изменена, относительный адрес, использованный при
выполнении инструкций перехода является постоянным числовым
значением. Ход операции по циклам для ней показан в табл. 10.

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

Числовые адреса в этом случае переменны и зависят от текущего
содержимого индексного регистра. Операнд источника такой как
         Оператор        операнд     комментарий
         STAA             X        поместить А в положение по Х
заставляет ЦП сохранить содержимое аккумулятора А в месте памяти
определяемом содержимым индексного регистра (вспомним, что имя
"Х" сохраняется, чтобы обозначить индексный регистр). Так как
имеются инструкции для управления Х во время выполнения программы
(LDX,INX,DEC), то режим индексного адресования дает динамику "на
ходе" пути, чтобы изменить действие программы. Поле операнда
может также содержать числовое значением, которое будет 
автоматически добавляться к Х в течение выполнения. Этот формат 
иллюстрирован на рис. 33.

Рис. 33 Индексный режим адресации

           ЦП                                ЦП  
     ----------------                  -----------------
     |              |                  |ACCB =59        | 
     |              | <--              |X=400           |<-- 
     |              |   |              |                |  |
     ----------------   |              ------------------  |
           RAM          |                     RAM          |
     ----------------   |              ------------------  |
ADDR|               |   |              |                |  |
= X+| DATA          |< -|   ADDR=405   |      59        |<-|
offs|               |   |              |                |  |
     -----------------  |              ------------------  |
     память программы   |              память программы    |
     -----------------  |              ------------------  |
 PC  | инструкция    |<--      PC 5006 |     LDAВ X     |<-- 
     | смещение      |                 |      5         |
     |               |                 |                |  
     -----------------                 ------------------
    смещение<=255

Когда ЦП встречает LDAB (индекс)- код операции в месте 5006, он
смотрит в следующей ячейке значение, которое должно быть
добавлено к Х( 5 в примере), вычисляет требуемый адрес, добавляя
5 к содержимому индексного регистра (значение 400). В формате
операнда смещение может быть представлено именем или числовым
значением в диапазоне 0-255, как в примере. В предыдущих примерах
STA X операнд эквивалентен 0,Х, т.е. 0 может быть опущен, когда
желаемый адрес равен (Х). Таблица 11 показывает ход операции по
циклам для расширенного режима адресации.