NFLic

STM8 с нуля.

Адресация в STM8 (Статья 6)

Адресация - способ доступа команд к данным, регистрам . Команды могут не иметь и не оперировать никакими данными. Команды могут оперировать битами, полубайтами, байтами, словами напрямую, через ячейки памяти, через индексные регистры, через указатели. Кроме того бывает короткая адресация (short $00...$FF), длинная адресация (long $0000...$FFFF), расширенная адресация (extended $000000...$FFFFFF). Бывает адресация со смещением как знаковым так и беззнаковым. Существуют также сочетания косвенная со смещением, по указателю со смещением и пр.

Про адрессацию в STM8 можно также прочитать в документе [PM0044 Programming manual].

 
No Addressing - нет адресации

Команды не обращаются к данным, не выполняют над данными никаких действий.

9D      NOP             ; No operation                           (PC <= PC + 1)
21 XX   JRF    ssoff    ; Relative jump if False     always skip (PC <= PC + 2)
   8B   BREAK           ; Software break
 
Register Bit  - регистровая битовая адресация

Команды оперируют напрямую битами регистров ядра STM8.

   8C      CCF       ; Complement Carry Flag                             CC.C <= /CC.C
   98      RCF       ; Reset Carry Flag                                  CC.C <= 0
   99      SCF       ; Set Carry Flag                                    CC.C <= 1
   9A      RIM       ; Reset Interrupt Mask / Enable Interrupt           CC.I1 <= 1 CC.I0 <= 0
   9B      SIM       ; Set Interrupt Mask / Disable Interrupt            CC.I1 <= 1 CC.I0 <= 1
   9C      RVF       ; Reset Overflow Flag                               CC.V <= 0
   8E      HALT      ; Halt Oscillator (CPU + Peripherals)               CC.I1 <= 1 CC.I0 <= 0
   8F      WFI       ; Wait For Interrupt (CPU stopped, low power mode)  CC.I1 <= 1 CC.I0 <= 0
 
Register Nibble - регистровая полубайтовая адресация

Команды оперируют напрямую полубайтами регистров ядра STM8.

   4E      SWAP   A  ; Swap Nibbles       A.{#7,#6,#5,#4} <-> A.{#3,#2,#1,#0} 
 
Register Byte - регистровая байтовая адресация

Команды оперируют напрямую 8-разрядными регистрами и/или байтами 16-разрядных регистров ядра STM8.

   02     RLWA   X         ; Rotate Word Left through A                 A <- XH <- XL <- A
90 02     RLWA   Y         ; Rotate Word Left through A                 A <- YH <- YL <- A
   40     NEG    A         ; Negate (Logical 2's complement)            A         <= -A
   41     EXG    A, XL     ; Exchange                                   A <-> XL
   42     MUL    X, A      ; Multiply(unsigned)                         X <= XL * A
90 42     MUL    Y, A      ; Multiply(unsigned)                         Y <= YL * A
   43     CPL    A         ; Logical 1's complement                     A         <= /A
   44     SRL    A         ; Shift Right Logical                        A.{0->#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
   46     RRC    A         ; Rotate Right Logical through Carry         A.{CC.C->#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
   47     SRA    A         ; Shift Right Arithmetic                     A.{#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
   48     SLA    A         ; Shift Left Arithmetic                      A.{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-0}
   48     SLL    A         ; Shift Left Logical                         A.{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-0}
   49     RLC    A         ; Rotate Left Logical through Carry          A.{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-CC.C}
   4A     DEC    A         ; Decrement                                  A         <= A - 1
   4C     INC    A         ; Increment                                  A         <= A + 1
   4D     TNZ    A         ; Test for Negative or Zero                  {CC.N, CC.Z} <= Test{ A }
   4F     CLR    A         ; Clear                                      A         <= 0
   5E     SWAPW  X         ; Swap Bytes of Word                         XH <-> XL 
90 5E     SWAPW  Y         ; Swap Bytes of Word                         YH <-> YL 
   61     EXG    A, YL     ; Exchange                                   A <-> YL
   62     DIV    X, A      ; Divide (unsigned)                          X <= X % A, remainder in A
90 62     DIV    Y, A      ; Divide (unsigned)                          Y <= Y % A, remainder in A
   65     DIV    X, Y      ; Divide word (unsigned)                     X <= X % Y, remainder in Y
   84     POP    A         ; Pop from stack                             A  <= M(++SP)  preincremrnt
   86     POP    CC        ; Pop from stack                             CC <= M(++SP)  preincremrnt
   88     PUSH   A         ; Push into the Stack                        M(SP--) <= A   postdecremrnt
   8A     PUSH   CC        ; Push into the Stack                        M(SP--) <= CC  postdecremrnt
   95     LD     XH, A     ; Load                                       XH <= A
90 95     LD     YH, A     ; Load                                       YH <= A
   97     LD     XL, A     ; Load                                       XL <= A
90 97     LD     YL, A     ; Load                                       YL <= A
   9E     LD     A, XH     ; Load                                       A <= XH
90 9E     LD     A, YH     ; Load                                       A <= YH
   9F     LD     A, XL     ; Load                                       A <= XL
90 9F     LD     A, YL     ; Load                                       A <= YL 
 
Register Word - регистровая двубайтовая адресация

Команды оперируют напрямую 16-разрядными регистрами ядра STM8.

   01     RRWA   X         ; Rotate Word Right through A                A -> XH -> XL - > A
90 01     RRWA   Y         ; Rotate Word Right through A                A -> YH -> YL - > A
   50     NEGW   X         ; Negate Word (Logical 2s Complement)        X <= -X
90 50     NEGW   Y         ; Negate Word (Logical 2s Complement)        Y <= -Y
   51     EXGW   X, Y      ; Exchange Word                              X <-> Y
   53     CPLW   X         ; Logical 1's complement                     X <= /X
90 53     CPLW   Y         ; Logical 1's complement                     Y <= /Y
   54     SRLW   X         ; Shift Right Logical Word                   X.{0->#15->#14->#13->...->#2->#1->#0->CC.C}
90 54     SRLW   Y         ; Shift Right Logical Word                   Y.{0->#15->#14->#13->...->#2->#1->#0->CC.C}
   56     RRCW   X         ; Rotate Word Right Logical through Carry    X.{CC.C->#15->#14->#13->...->#2->#1->#0->CC.C}
90 56     RRCW   Y         ; Rotate Word Right Logical through Carry    Y.{CC.C->#15->#14->#13->...->#2->#1->#0->CC.C}
   57     SRAW   X         ; Shift Right Arithmetic Word                X.{#15->#14->#13->...->#2->#1->#0->CC.C}
90 57     SRAW   Y         ; Shift Right Arithmetic Word                Y.{#15->#14->#13->...->#2->#1->#0->CC.C}
   58     SLAW   X         ; Shift Left Arithmetic Word                 X.{CC.C<-#15<-#14<-#13<-...<-#2<-#1<-#0<-0}
   58     SLLW   X         ; Shift Left Logical Word                    X.{CC.C<-#15<-#14<-#13<-...<-#2<-#1<-#0<-0}
90 58     SLAW   Y         ; Shift Left Arithmetic Word                 Y.{CC.C<-#15<-#14<-#13<-...<-#2<-#1<-#0<-0}
90 58     SLLW   Y         ; Shift Left Logical Word                    Y.{CC.C<-#15<-#14<-#13<-...<-#2<-#1<-#0<-0}
   59     RLCW   X         ; Rotate Word Left Logical through Carry     X.{CC.C<-#15<-#14<-#13<-...<-#2<-#1<-#0<-CC.C}
90 59     RLCW   Y         ; Rotate Word Left Logical through Carry     Y.{CC.C<-#15<-#14<-#13<-...<-#2<-#1<-#0<-CC.C}
   5A     DECW   X         ; Decrement                                  X <= X - 1
90 5A     DECW   Y         ; Decrement                                  Y <= Y - 1
   5C     INCW   X         ; Increment                                  X <= X + 1
90 5C     INCW   Y         ; Increment                                  Y <= Y + 1
   5D     TNZW   X         ; Test Word for Negative or Zero             {CC.N, CC.Z} <= Test{ X }
90 5D     TNZW   Y         ; Test Word for Negative or Zero             {CC.N, CC.Z} <= Test{ Y }
   5F     CLRW   X         ; Clear                                      X       <= 0
90 5F     CLRW   Y         ; Clear                                      Y       <= 0
   62     DIV    X, A      ; Divide (unsigned)                          X <= X % A, remainder in A
90 62     DIV    Y, A      ; Divide (unsigned)                          Y <= Y % A, remainder in A
   65     DIV    X, Y      ; Divide word (unsigned)                     X <= X % Y, remainder in Y
   85     POPW   X         ; Pop Word from stack                        XH <= M(++SP)  XL <= M(++SP)
90 85     POPW   Y         ; Pop Word from stack                        YH <= M(++SP)  YL <= M(++SP)
   89     PUSHW  X         ; Push Word onto the Stack                   M(SP--) <= XL  M(SP--) <= XH
90 89     PUSHW  Y         ; Push Word onto the Stack                   M(SP--) <= YL  M(SP--) <= YH
   93     LDW    X, Y      ; Load Word                                  X  <= Y
90 93     LDW    Y, X      ; Load Word                                  Y  <= X
   94     LDW    SP, X     ; Load Word                                  SP <= X
90 94     LDW    SP, Y     ; Load Word                                  SP <= Y
   96     LDW    X, SP     ; Load Word                                  X  <= SP
90 96     LDW    Y, SP     ; Load Word                                  Y  <= SP

Следующие три команды фактически тоже регистровые.

   80     IRET             ; Interrupt Return                           CC<=M(++SP) A<=M(++SP) XH<=M(++SP)
                           ;                                            XL<=M(++SP) YH<=M(++SP) YL<=M(++SP) 
                           ;                                            PCE<=M(++SP) PCH<=M(++SP) PCL<=M(++SP) 
   81     RET              ; Return from subroutine                     PCE unch. PCH <= M(++SP)  PCL <= M(++SP)
   87     RETF             ; Far Return from subroutine                 PCE<=M(++SP) PCH<=M(++SP) PCL<=M(++SP)
 
Immediate Byte - 8-разрядная константа (число) в коде команды

Команды оперируют напрямую 8-разрядным числом. Код команды содержит 8-разрядное число byte. Перед числом должен быть префикс # (решетка) иначе число будет воспринято как адрес и команда будет оперировать содержимым ячейки памяти.

   35 XX MS LS     MOV    lmem, #byte   ; Move                          M(lmem) <= #byte
   4B XX           PUSH   #byte         ; Push onto the Stack           M(SP--) <= #byte
   52 XX           SUBW   SP, #byte     ; Subtraction                   SP <= SP - #byte
   5B XX           ADDW   SP, #byte     ; Addition                      SP <= SP + #byte
   A0 XX           SUB    A, #byte      ; Subtraction                   A <= A  -  #byte
   A1 XX           CP     A, #byte      ; Compare                       {CC.N, CC.Z, CC.C}<= Test{A - #byte}
   A2 XX           SBC    A, #byte      ; Subtraction with Carry/Borrow A <= A  -  #byte - CC.C
   A4 XX           AND    A, #byte      ; Logical AND                   A <= A AND #byte
   A5 XX           BCP    A, #byte      ; Logical Bit Compare           {CC.N, CC.Z}<= Test{A AND #byte}
   A6 XX           LD     A, #byte      ; Load                          A              <= #byte
   A8 XX           XOR    A, #byte      ; Logical Exclusive OR          A <= A XOR #byte
   A9 XX           ADC    A, #byte      ; Addition with Carry           A <= A  +  #byte + CC.C
   AA XX           OR     A, #byte      ; Logical OR                    A <= A  OR #byte
   AB XX           ADD    A, #byte      ; Addition                      A <= A  +  #byte
 
Immediate Word - 16-разрядная константа (число) в коде команды

Команды оперируют напрямую 16-разрядным числом. Код команды содержит 16-разрядное число word. Перед числом должен быть префикс # (решетка) иначе число будет воспринято как адрес и команда будет оперировать содержимым ячейки памяти.

   1C MS LS        ADDW   X, #word      ; Addition Word                 X <= X + #word
   1D MS LS        SUBW   X, #word      ; Subtraction Word              X <= X - #word 
72 A2 MS LS        SUBW   Y, #word      ; Subtraction Word              Y <= Y - #word
   A3 MS LS        CPW    X, #word      ; Compare Word                  {CC.N, CC.Z, CC.C}<= Test{X - #word}
90 A3 MS LS        CPW    Y, #word      ; Compare Word                  {CC.N, CC.Z, CC.C}<= Test{Y - #word}
72 A9 MS LS        ADDW   Y, #word      ; Addition Word                 Y <= Y  +  #word
   AE MS LS        LDW    X, #word      ; Load Word                     X <= #word
90 AE MS LS        LDW    Y, #word      ; Load Word                     Y <= #word

Здесь особняком я бы выделил команду "jp lmem". Хоть эта команда и представляет собой безусловный переход по длинному адресу (long memory $0000...$FFFF), фактически происходит загрузка 16-разрядного слова в старший и младший байты регистра счетчика команд PC. Расширенный байт PCE не изменяется, так как команда дествует только в пределах своей секции памяти. В данном случае префикс # (решетка) не должен использоваться.

   CC MS LS        JP     lmem          ; Jump (Absolute)               PCE unch. PCH:PCL <= #lmem

Аналогично команда "jpf emem" представляет собой безусловный переход по расширенному адресу (extended memory $000000...$FFFFFF). Фактически происходит загрузка 24-разрядного числа в регистр счетчика команд PC. Команда дествует в пределах всего адресного пространства STM8. В данном случае префикс # (решетка) также не должен использоваться.

   AC ExtB MS LS   JPF    emem          ; Jump Far                      PC <- #emem
 
Relative Direct - адресация с коротким смещением со знаком относительно текущего положения счетчика команд PC

Команды безусловных переходов и вызова подпрограмм с коротким смещением со знаком ssoff (-128...+127) относительно текущего положения счетчика команд PC. Код команды содержит короткое смещением со знаком ssoff (-128...+127). Перед смещением ssoff не должно быть префикса # (решетка).

   20 XX          JRA    ssoff      ; Jump Relative Always             PC <= PC + ssoff
   20 XX          JRT    ssoff      ; Relative jump if True            PC <= PC + ssoff
   21 XX          JRF    ssoff      ; Relative jump if False           always skip (PC <= PC + 2)
   AD XX          CALLR  ssoff      ; CALL Subroutine Relative         M(SP--)<=PCL M(SP--)<-PCH PC<=PC+ssoff
 
Relative Direct Condition - условная адресация с коротким смещением со знаком относительно текущего положения счетчика команд PC

Команды условных переходов с коротким смещением со знаком ssoff (-128...+127) относительно текущего положения счетчика команд PC. Код команды содержит короткое смещением со знаком ssoff (-128...+127). Перед смещением ssoff не должно быть префикса # (решетка).

72 00 MS LS XX         BTJT   lmem, #0, ssoff    ; BitTest and Jump if True                   PC<=PC+ssoff if M(lmem).#0==1 СС.C<=M(lmem).#0
72 01 MS LS XX         BTJF   lmem, #0, ssoff    ; BitTest and Jump if False                  PC<=PC+ssoff if M(lmem).#0==0 СС.C<=M(lmem).#0
72 02 MS LS XX         BTJT   lmem, #1, ssoff    ; BitTest and Jump if True                   PC<=PC+ssoff if M(lmem).#1==1 СС.C<=M(lmem).#1
72 03 MS LS XX         BTJF   lmem, #1, ssoff    ; BitTest and Jump if False                  PC<=PC+ssoff if M(lmem).#1==0 СС.C<=M(lmem).#1
72 04 MS LS XX         BTJT   lmem, #2, ssoff    ; BitTest and Jump if True                   PC<=PC+ssoff if M(lmem).#2==1 СС.C<=M(lmem).#2     
72 05 MS LS XX         BTJF   lmem, #2, ssoff    ; BitTest and Jump if False                  PC<=PC+ssoff if M(lmem).#2==0 СС.C<=M(lmem).#2
72 06 MS LS XX         BTJT   lmem, #3, ssoff    ; BitTest and Jump if True                   PC<=PC+ssoff if M(lmem).#3==1 СС.C<=M(lmem).#3
72 07 MS LS XX         BTJF   lmem, #3, ssoff    ; BitTest and Jump if False                  PC<=PC+ssoff if M(lmem).#3==0 СС.C<=M(lmem).#3
72 08 MS LS XX         BTJT   lmem, #4, ssoff    ; BitTest and Jump if True                   PC<=PC+ssoff if M(lmem).#4==1 СС.C<=M(lmem).#4
72 09 MS LS XX         BTJF   lmem, #4, ssoff    ; BitTest and Jump if False                  PC<=PC+ssoff if M(lmem).#4==0 СС.C<=M(lmem).#4
72 0A MS LS XX         BTJT   lmem, #5, ssoff    ; BitTest and Jump if True                   PC<=PC+ssoff if M(lmem).#5==1 СС.C<=M(lmem).#5
72 0B MS LS XX         BTJF   lmem, #5, ssoff    ; BitTest and Jump if False                  PC<=PC+ssoff if M(lmem).#5==0 СС.C<=M(lmem).#5
72 0C MS LS XX         BTJT   lmem, #6, ssoff    ; BitTest and Jump if True                   PC<=PC+ssoff if M(lmem).#6==1 СС.C<=M(lmem).#6
72 0D MS LS XX         BTJF   lmem, #6, ssoff    ; BitTest and Jump if False                  PC<=PC+ssoff if M(lmem).#6==0 СС.C<=M(lmem).#6      
72 0E MS LS XX         BTJT   lmem, #7, ssoff    ; BitTest and Jump if True                   PC<=PC+ssoff if M(lmem).#7==1 СС.C<=M(lmem).#7
72 0F MS LS XX         BTJF   lmem, #7, ssoff    ; BitTest and Jump if False                  PC<=PC+ssoff if M(lmem).#7==0 СС.C<=M(lmem).#7
   22 XX               JRUGT  ssoff              ; Relative jump if Unsigned Greater Than     PC<=PC+ssoff if CC.C==0 AND CC.Z==0
   23 XX               JRULE  ssoff              ; Relative jump if Unsigned Lower or Equal   PC<=PC+ssoff if CC.C==1 AND CC.Z==1
   24 XX               JRNC   ssoff              ; Relative jump if Not Carry                 PC<=PC+ssoff if CC.C==0
   24 XX               JRUGE  ssoff              ; Relative jump if Unsigned Greater or Equal PC<=PC+ssoff if CC.C==0
   25 XX               JRC    ssoff              ; Relative jump if Carry                     PC<=PC+ssoff if CC.C==1
   25 XX               JRULT  ssoff              ; Relative jump if Unsigned Lower Than       PC<=PC+ssoff if CC.C==1
   26 XX               JRNE   ssoff              ; Relative jump if Not equal                 PC<=PC+ssoff if CC.Z==0
   27 XX               JREQ   ssoff              ; Relative jump if Equal                     PC<=PC+ssoff if CC.Z==1
   28 XX               JRNV   ssoff              ; Relative jump if Not overflow              PC<=PC+ssoff if CC.V==0
90 28 XX               JRNH   ssoff              ; Relative jump if Not Half-Carry            PC<=PC+ssoff if CC.H==0
   29 XX               JRV    ssoff              ; Relative jump if Overflow                  PC<=PC+ssoff if CC.V==1
90 29 XX               JRH    ssoff              ; Relative jump if Half-Carry                PC<=PC+ssoff if CC.H==1
   2A XX               JRPL   ssoff              ; Relative jump if Plus                      PC<=PC+ssoff if CC.N==0
   2B XX               JRMI   ssoff              ; Relative jump if Minus                     PC<=PC+ssoff if CC.N==1
   2C XX               JRSGT  ssoff              ; Relative jump if Signed Greater Than       PC<=PC+ssoff if {CC.Z OR {CC.N XOR CC.V}}==0
90 2C XX               JRNM   ssoff              ; Relative jump if Not Interrupt Mask        PC<=PC+ssoff if {CC.I0 AND CC.I1}==0
   2D XX               JRSLE  ssoff              ; Relative jump if Signed Lower or Equal     PC<=PC+ssoff if {CC.Z OR {CC.N XOR CC.V}}==1
90 2D XX               JRM    ssoff              ; Relative jump if Interrupt Mask            PC<=PC+ssoff if {CC.I0 AND CC.I1}==1
   2E XX               JRSGE  ssoff              ; Relative jump if Signed Greater or Equal   PC<=PC+ssoff if {CC.N  XOR CC.V} ==0
90 2E XX               JRIL   ssoff              ; Relative jump if Interrupt Line is Low     PC<=PC+ssoff if Port INT pin==0
   2F XX               JRSLT  ssoff              ; Relative jump if Signed Lower Than         PC<=PC+ssoff if {CC.N  XOR CC.V} ==1
90 2F XX               JRIH   ssoff              ; Relative jump if Interrupt Line is High    PC<=PC+ssoff f Port INT pin==1
 
Short Byte Direct - прямая адресация к содержимому ячейки с коротким адресом

Команды оперируют 8-разрядным содержимым ячейки памяти с 8-разрядным адресом. Код команды содержит короткий адрес (short memory $00...$FF). Все доступные этим командам ячейки находятся в первой странице памяти в диапазоне адресов $00...$FF. Перед числом или меткой не должно быть префикса # (решетка) иначе команды будут оперировать числами, а не содержимым ячеек памяти.

   30 XX         NEG    smem            ; Negate (Logical 2's complement)    M(smem) <= -M(smem)
   33 XX         CPL    smem            ; Logical 1's complement             M(smem) <= /M(smem)
   34 XX         SRL    smem            ; Shift Right Logical                M(smem).{0->#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
   36 XX         RRC    smem            ; Rotate Right Logical through Carry M(smem).{CC.C->#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
   37 XX         SRA    smem            ; Shift Right Arithmetic             M(smem).{#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
   38 XX         SLA    smem            ; Shift Left Arithmetic              M(smem).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-0}
   38 XX         SLL    smem            ; Shift Left Logical                 M(smem).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-0}
   39 XX         RLC    smem            ; Rotate Left Logical through Carry  M(smem).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-CC.C}
   3A XX         DEC    smem            ; Decrement                          M(smem)      <= M(smem)      - 1
   3C XX         INC    smem            ; Increment                          M(smem)      <= M(smem)      + 1
   3D XX         TNZ    smem            ; Test for Negative or Zero          {N, Z} <= Test{ M(smem) }
   3E XX         SWAP   smem            ; Swap Nibbles                       M(smem).low      <-> M(smem).high 
   3F XX         CLR    smem            ; Clear                              M(smem)      <= 0
   45 XX2 XX1    MOV    smem1, smem2    ; Move                               M(smem1) <= M(smem2)
   B0 XX         SUB    A, smem         ; Subtraction                        A <= A  -  M(smem)
   B1 XX         CP     A, smem         ; Compare                            {CC.N, CC.Z, CC.C}<= Test{ A - M(smem) }
   B2 XX         SBC    A, smem         ; Subtraction with Carry/Borrow      A <= A  -  M(smem) - CC.C
   B4 XX         AND    A, smem         ; Logical AND                        A <= A  AND  M(smem) 
   B5 XX         BCP    A, smem         ; Logical Bit Compare                {CC.N, CC.Z}<= Test{A AND M(smem)}
   B6 XX         LD     A, smem         ; Load                               A       <= M(smem)
   B7 XX         LD     smem, A         ; Load                               M(smem) <= A      
   B8 XX         XOR    A, smem         ; Logical Exclusive OR               A <= A XOR M(smem)
   B9 XX         ADC    A, smem         ; Addition with Carry                A <= A  +  M(smem) + CC.C
   BA XX         OR     A, smem         ; Logical OR                         A <= A  OR M(smem)
   BB XX         ADD    A, smem         ; Addition                           A <= A  +  M(smem)
 
Short Word Direct - прямая адресация к содержимому двух ячеек с коротким адресом старшей ячейки

Команды оперируют 16-разрядным содержимым (две ячейки памяти) с 8-разрядным адресом. Код команды содержит короткий адрес первой ячейки памяти с содержимым старшего байта операнда (short memory $00...$FF). Младший байта операнда располагается в ячейке памяти по адресу на единицу больше, чем в коде команды. В содержимом первой ячейки памяти хранится старший байт операнда, в содержимом второй ячейки памяти хранится младший байт операнда. Все доступные этим командам ячейки находятся в первой странице памяти в диапазоне адресов $00...$FF. Если в коде команды будет адрес $FF, то младший байт операнда окажется по адресу $100, то есть выйдет за пределы диапазона short memory? Перед числом или меткой не должно быть префикса # (решетка) иначе команды будут оперировать числами, а не содержимым ячеек памяти.

   B3 XX        CPW    X, smem.w       ; Compare Word      {CC.N, CC.Z, CC.C}<= Test{ X - M(smem).w }
90 B3 XX        CPW    Y, smem.w       ; Compare Word      {CC.N, CC.Z, CC.C}<= Test{ Y - M(smem).w }
   BE XX        LDW    X, smem.w       ; Load              X         <= M(smem).w
90 BE XX        LDW    Y, smem.w       ; Load              Y         <= M(smem).w
   BF XX        LDW    smem.w, X       ; Load              M(smem).w <= X
90 BF XX        LDW    smem.w, Y       ; Load              M(smem).w <= Y
 
Long Direct - прямая адресация по длинному адресу

Команды оперируют 16-разрядным адресом, но не обращаются к содержимому ячеек памяти. Код команды содержит длинный адрес (long memory $0000...$FFFF). Команды действуют в пределах своей секции памяти в диапазоне адресов $000000...$00FFFF. Перед адресом lmem не должно быть префикса # (решетка).

   CC MS LS    JP     lmem             ; Jump (Absolute)             PCE unch. PCH:PCL <= #lmem
   CD MS LS    CALL   lmem             ; Call Subroutine (Absolute)  M(SP--)<=PCL M(SP--)<-PCH PCE unch. PCH:PCL <= lmem
   81          RET                     ; Return from subroutine      PCE unch. PCH <= M(++SP)   PCL <= M(++SP)
 
Long Bit Direct - прямая адресация к биту (установка, инверсия, сброс) ячейки с длинным адресом

Команды изменяют состояние бита (устанавливают в "1", инвертируют, сбрасывают в "0") в содержимом ячейки памяти с 16-разрядным адресом. Код команды содержит длинный адрес lmem (long memory $0000...$FFFF) и номер бита (#0...#7). Команды действуют в пределах своей секции памяти в диапазоне адресов $XX0000...$XXFFFF. Перед адресом lmem не должно быть префикса # (решетка), перед номером бита должен быть префикс # (решетка).

72 10 MS LS    BSET   lmem, #0   ; Bit Set         M(lmem).#0 <= 1 
90 10 MS LS    BCPL   lmem, #0   ; Bit Complement  M(lmem).#0 <= /M(lmem).#0
72 11 MS LS    BRES   lmem, #0   ; Bit Reset       M(lmem).#0 <= 0
90 11 MS LS    BCCM   lmem, #0   ; Copy Carry Bit  M(lmem).#0 <= CC.C
72 12 MS LS    BSET   lmem, #1   ; Bit Set         M(lmem).#1 <= 1  
90 12 MS LS    BCPL   lmem, #1   ; Bit Complement  M(lmem).#1 <= /M(lmem).#1 
72 13 MS LS    BRES   lmem, #1   ; Bit Reset       M(lmem).#1 <= 0
90 13 MS LS    BCCM   lmem, #1   ; Copy Carry Bit  M(lmem).#1 <= CC.C
72 14 MS LS    BSET   lmem, #2   ; Bit Set         M(lmem).#2 <= 1 
90 14 MS LS    BCPL   lmem, #2   ; Bit Complement  M(lmem).#2 <= /M(lmem).#2 
72 15 MS LS    BRES   lmem, #2   ; Bit Reset       M(lmem).#2 <= 0
90 15 MS LS    BCCM   lmem, #2   ; Copy Carry Bit  M(lmem).#2 <= CC.C      
72 16 MS LS    BSET   lmem, #3   ; Bit Set         M(lmem).#3 <= 1
90 16 MS LS    BCPL   lmem, #3   ; Bit Complement  M(lmem).#3 <= /M(lmem).#3
72 17 MS LS    BRES   lmem, #3   ; Bit Reset       M(lmem).#3 <= 0
90 17 MS LS    BCCM   lmem, #3   ; Copy Carry Bit  M(lmem).#3 <= CC.C
72 18 MS LS    BSET   lmem, #4   ; Bit Set         M(lmem).#4 <= 1 
90 18 MS LS    BCPL   lmem, #4   ; Bit Complement  M(lmem).#4 <= /M(lmem).#4
72 19 MS LS    BRES   lmem, #4   ; Bit Reset       M(lmem).#4 <= 0
90 19 MS LS    BCCM   lmem, #4   ; Copy Carry Bit  M(lmem).#4 <= CC.C
72 1A MS LS    BSET   lmem, #5   ; Bit Set         M(lmem).#5 <= 1 
90 1A MS LS    BCPL   lmem, #5   ; Bit Complement  M(lmem).#5 <= /M(lmem).#5
72 1B MS LS    BRES   lmem, #5   ; Bit Reset       M(lmem).#5 <= 0
90 1B MS LS    BCCM   lmem, #5   ; Copy Carry Bit  M(lmem).#5 <= CC.C 
72 1C MS LS    BSET   lmem, #6   ; Bit Set         M(lmem).#6 <= 1
90 1C MS LS    BCPL   lmem, #6   ; Bit Complement  M(lmem).#6 <= /M(lmem).#6
72 1D MS LS    BRES   lmem, #6   ; Bit Reset       M(lmem).#6 <= 0
90 1D MS LS    BCCM   lmem, #6   ; Copy Carry Bit  M(lmem).#6 <= CC.C
72 1E MS LS    BSET   lmem, #7   ; Bit Set         M(lmem).#7 <= 1 
90 1E MS LS    BCPL   lmem, #7   ; Bit Complement  M(lmem).#7 <= /M(lmem).#7
72 1F MS LS    BRES   lmem, #7   ; Bit Reset       M(lmem).#7 <= 0
90 1F MS LS    BCCM   lmem, #7   ; Copy Carry Bit  M(lmem).#7 <= CC.C
 
Long Bit Direct Relative Сondition - прямая условная адресация с коротким смещением со знаком по результатам состояния бита ячейки с длинным адресом

Команды условных переходов со смещением ssoff (-128...127). Условие - состояние бита в содержимом ячейки памяти с 16-разрядным адресом. Код команды содержит длинный адрес lmem (long memory $0000...$FFFF), смещение ssoff (-128...127) и номер бита (#0...#7). Команды действуют в пределах своей секции памяти в диапазоне адресов $XX0000...$XXFFFF. Перед адресами lmem и ssof не должно быть префикса # (решетка), перед номером бита должен быть префикс # (решетка).

72 00 MS LS XX    BTJT   lmem, #0, ssoff    ; BitTest and Jump if True    PC<=PC+ssoff if M(lmem).#0==1 СС.C<=M(lmem).#0
72 01 MS LS XX    BTJF   lmem, #0, ssoff    ; BitTest and Jump if False   PC<=PC+ssoff if M(lmem).#0==0 СС.C<=M(lmem).#0
72 02 MS LS XX    BTJT   lmem, #1, ssoff    ; BitTest and Jump if True    PC<=PC+ssoff if M(lmem).#1==1 СС.C<=M(lmem).#1
72 03 MS LS XX    BTJF   lmem, #1, ssoff    ; BitTest and Jump if False   PC<=PC+ssoff if M(lmem).#1==0 СС.C<=M(lmem).#1
72 04 MS LS XX    BTJT   lmem, #2, ssoff    ; BitTest and Jump if True    PC<=PC+ssoff if M(lmem).#2==1 СС.C<=M(lmem).#2     
72 05 MS LS XX    BTJF   lmem, #2, ssoff    ; BitTest and Jump if False   PC<=PC+ssoff if M(lmem).#2==0 СС.C<=M(lmem).#2
72 06 MS LS XX    BTJT   lmem, #3, ssoff    ; BitTest and Jump if True    PC<=PC+ssoff if M(lmem).#3==1 СС.C<=M(lmem).#3
72 07 MS LS XX    BTJF   lmem, #3, ssoff    ; BitTest and Jump if False   PC<=PC+ssoff if M(lmem).#3==0 СС.C<=M(lmem).#3
72 08 MS LS XX    BTJT   lmem, #4, ssoff    ; BitTest and Jump if True    PC<=PC+ssoff if M(lmem).#4==1 СС.C<=M(lmem).#4
72 09 MS LS XX    BTJF   lmem, #4, ssoff    ; BitTest and Jump if False   PC<=PC+ssoff if M(lmem).#4==0 СС.C<=M(lmem).#4
72 0A MS LS XX    BTJT   lmem, #5, ssoff    ; BitTest and Jump if True    PC<=PC+ssoff if M(lmem).#5==1 СС.C<=M(lmem).#5
72 0B MS LS XX    BTJF   lmem, #5, ssoff    ; BitTest and Jump if False   PC<=PC+ssoff if M(lmem).#5==0 СС.C<=M(lmem).#5
72 0C MS LS XX    BTJT   lmem, #6, ssoff    ; BitTest and Jump if True    PC<=PC+ssoff if M(lmem).#6==1 СС.C<=M(lmem).#6
72 0D MS LS XX    BTJF   lmem, #6, ssoff    ; BitTest and Jump if False   PC<=PC+ssoff if M(lmem).#6==0 СС.C<=M(lmem).#6      
72 0E MS LS XX    BTJT   lmem, #7, ssoff    ; BitTest and Jump if True    PC<=PC+ssoff if M(lmem).#7==1 СС.C<=M(lmem).#7
72 0F MS LS XX    BTJF   lmem, #7, ssoff    ; BitTest and Jump if False   PC<=PC+ssoff if M(lmem).#7==0 СС.C<=M(lmem).#7
 
Long Byte Direct- прямая адресация к ячейке с длинным адресом

Команды оперируют 8-разрядным содержимым ячейки памяти с 16-разрядным адресом. Код команды содержит длинный адрес ячейки памяти (long memory $0000...$FFFF). Все доступные этим командам ячейки находятся в пределах своей секции памяти в диапазоне адресов $000000...$00FFFF. Перед числом или меткой не должно быть префикса # (решетка) иначе команды будут оперировать числами, а не содержимым ячеек памяти.

   31 MS LS            EXG    A, lmem       ; Exchange                            A <-> M(lmem)
   32 MS LS            POP    lmem          ; Pop from stack                      SP++  M(lmem) <= M(SP)
   35 XX MS LS         MOV    lmem, #byte   ; Move                                M(lmem) <= #byte
   3B MS LS            PUSH   lmem          ; Push onto the Stack                 M(SP--) <= M(lmem)  postincrement
72 50 MS LS            NEG    lmem          ; Negate (Logical 2's complement)     M(lmem) <= -M(lmem)
72 53 MS LS            CPL    lmem          ; Logical 1's complement              M(lmem) <= /M(lmem)
72 54 MS LS            SRL    lmem          ; Shift Right Logical                 M(lmem).{0->#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
   55 MS2 LS2 MS1 LS1  MOV    lmem1, lmem2  ; Move                                M(lmem1) <= M(lmem2)
72 56 MS LS            RRC    lmem          ; Rotate Right Logical through Carry  M(lmem).{CC.C->#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
72 57 MS LS            SRA    lmem          ; Shift Right Arithmetic              M(lmem).{#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
72 58 MS LS            SLA    lmem          ; Shift Left Arithmetic               M(lmem).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-0}
72 58 MS LS            SLL    lmem          ; Shift Left Logical                  M(lmem).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-0}
72 59 MS LS            RLC    lmem          ; Rotate Left Logical through Carry   M(lmem).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-CC.C}
72 5A MS LS            DEC    lmem          ; Decrement                           M(lmem) <= M(lmem) - 1
72 5C MS LS            INC    lmem          ; Increment                           M(lmem) <= M(lmem) + 1
72 5D MS LS            TNZ    lmem          ; Test for Negative or Zero           {CC.N, CC.Z} <= Test{ M(lmem) }
72 5E MS LS            SWAP   lmem          ; Swap Nibbles                        M(lmem).low <-> (lmem).high
72 5F MS LS            CLR    lmem          ; Clear                               M(lmem) <= 0
   C0 MS LS            SUB    A, lmem       ; Subtraction                         A <= A  -  M(Lmem)
   C1 MS LS            CP     A, lmem       ; Compare                             {CC.N, CC.Z, CC.C} <= Test{ A - M(lmem) }
   C2 MS LS            SBC    A, lmem       ; Subtraction with Carry/Borrow       A <= A  -  M(lmem)      - CC.C
   C4 MS LS            AND    A, lmem       ; Logical AND                         A <= A  AND  M(lmem) 
   C5 MS LS            BCP    A, lmem       ; Logical Bit Compare                 {CC.N, CC.Z} <= Test{ A AND M(lmem) }
   C6 MS LS            LD     A, lmem       ; Load                                A            <= M(lmem)
   C7 MS LS            LD     lmem, A       ; Load                                M(lmem)      <= A
   C8 MS LS            XOR    A, lmem       ; Logical Exclusive OR                A <= A XOR M(lmem)
   C9 MS LS            ADC    A, lmem       ; Addition with Carry                 A <= A  +  M(lmem) + CC.C
   CA MS LS            OR     A, lmem       ; Logical OR                          A <= A  OR M(lmem)
   CB MS LS            ADD    A, lmem       ; Addition                            A <= A  +  M(lmem)
 
Long Word Direct - прямая адресация к двум ячейкам с длинным адресом старшей яейки

Команды оперируют 16-разрядным содержимым (две ячейки памяти) с 16-разрядным адресом. Код команды содержит длинный адрес первой ячейки памяти с содержимым старшего байта операнда (long memory $0000...$FFFF). Младший байта операнда располагается в ячейке памяти по адресу на единицу больше, чем в коде команды. Все доступные этим командам ячейки находятся в своей секции памяти в диапазоне адресов $XX0000...$XXFFFF. Если в коде команды будет адрес $FFFF, то младший байт операнда окажется в соседней секции памяти по адресу $10000, то есть выйдет за пределы диапазона long memory ? Перед числом или меткой не должно быть префикса # (решетка) иначе команды будут оперировать числами, а не содержимым ячеек памяти.

72 B0 MS LS    SUBW   X, lmem.w   ; Subtraction Word    X <= X  -  M(lmem).w
72 B2 MS LS    SUBW   Y, lmem.w   ; Subtraction word    Y <= Y  -  M(lmem).w
72 B9 MS LS    ADDW   Y, lmem.w   ; Addition  Word      Y <= Y  +  M(lmem).w
72 BB MS LS    ADDW   X, lmem.w   ; Addition Word       X <= X  +  M(lmem).w
   C3 MS LS    CPW    X, lmem.w   ; Compare Word        {CC.N, CC.Z, CC.C} <= Test{ X - M(lmem).w }
90 C3 MS LS    CPW    Y, lmem.w   ; Compare Word        {CC.N, CC.Z, CC.C} <= Test{ Y - M(lmem).w }
   CE MS LS    LDW    X, lmem.w   ; Load Word           X              <= M(lmem).w
90 CE MS LS    LDW    Y, lmem.w   ; Load Word           Y              <= M(lmem).w
   CF MS LS    LDW    lmem.w, X   ; Load Word           M(lmem).w      <= X
90 CF MS LS    LDW    lmem.w, Y   ; Load Word           M(lmem).w      <= Y 
 
Extended Direct - прямая адресация по расширенному адресу

Команды переходов и вызова подпрограмм по расширенному адресу emem в пределах всего адресного пространства STM8 (extended memory $000000...$FFFFFF). Перед числом или меткой не должно быть префикса # (решетка). Командам доступно все адресное пространство STM8.

   82 ExtB MS LS    INT    emem   ; Interrupt            PC <= emem
   8D ExtB MS LS    CALLF  emem   ; Call Far Subroutine  M(SP--)<=PCL M(SP--)<-PCH M(SP--)<-PCE PC<=emem
   AC ExtB MS LS    JPF    emem   ; Jump Far             PC <= emem
 
Extended Byte Direct - прямая адресация к ячейкам памяти с расширенным адресом

Команды оперируют 8-разрядным содержимым с 24-разрядным адресом. Код команды содержит расширенный адрес emem в пределах всего адресного пространства STM8 (extended memory $000000...$FFFFFF). Перед числом или меткой не должно быть префикса # (решетка).

   BC ExtB MS LS   LDF    A, emem   ; Load Far   A <= M(emem)
   BD ExtB MS LS   LDF    emem, A   ; Store Far  M(emem) <= A
 
No Offset Direct Indexed - адрессация через индексный регистр X(Y) без смещения

Команды оперируют через индексный регистр X или Y в котором находится 16-разрядный адрес. Код команды не содержит адресов. Все доступные этим командам ячейки находятся в пределах своей секции памяти в диапазоне адресов $XX0000...$XXFFFF. Название индексного регистра должно быть в круглых скобках.

   FC              JP     (X)       ; Jump (Absolute)            PCE unch. PCH:PCL <= M(X).w
90 FC              JP     (Y)       ; Jump (Absolute)            PCE unch. PCH:PCL <= M(Y).w
   FD              CALL   (X)       ; CALL Subroutine (Absolute) M(SP--)<=PCL M(SP--)<-PCH PCE unch. PCH:PCL<=M(X).w
90 FD              CALL   (Y)       ; CALL Subroutine (Absolute) M(SP--)<=PCL M(SP--)<-PCH PCE unch. PCH:PCL<=M(Y).w
 
No Offset Byte Direct Indexed - адрессация к ячейке через индексный регистр X(Y) без смещения

Команды оперируют 8-разрядным содержимым ячейки памяти 16-разрядный адрес которой находится в индексном регистре X или Y. Код команды не содержит адресов. Все доступные этим командам ячейки находятся в пределах своей секции памяти в диапазоне адресов $XX0000...$XXFFFF. Название индексного регистра должно быть в круглых скобках.

   70    NEG    (X)       ; Negate (Logical 2's complement)    M(X) <= -M(X)
90 70    NEG    (Y)       ; Negate (Logical 2's complement)    M(Y) <= -M(Y)
   73    CPL    (X)       ; Logical 1's complement             M(X) <= /M(X)
90 73    CPL    (Y)       ; Logical 1's complement             M(Y) <= /M(Y)
   74    SRL    (X)       ; Shift Right Logical                M(X).{0->#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
90 74    SRL    (Y)       ; Shift Right Logical                M(Y).{0->#7->#6->#5->#4->#3->#2->#1->#0->CC.C}      
   76    RRC    (X)       ; Rotate Right Logical through Carry M(X).{CC.C->#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
90 76    RRC    (Y)       ; Rotate Right Logical through Carry M(Y).{CC.C->#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
   77    SRA    (X)       ; Shift Right Arithmetic             M(X).{#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
90 77    SRA    (Y)       ; Shift Right Arithmetic             M(Y).{#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
   78    SLA    (X)       ; Shift Left Arithmetic              M(X).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-0}
   78    SLL    (X)       ; Shift Left Logical                 M(X).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-0}
90 78    SLA    (Y)       ; Shift Left Arithmetic              M(Y).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-0}
90 78    SLL    (Y)       ; Shift Left Logical                 M(Y).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-0}
   79    RLC    (X)       ; Rotate Left Logical through Carry  M(X).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-CC.C}
90 79    RLC    (Y)       ; Rotate Left Logical through Carry  M(Y).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-CC.C}
   7A    DEC    (X)       ; Decrement                          M(X) <= M(X) - 1
90 7A    DEC    (Y)       ; Decrement                          M(Y) <= M(Y) - 1
   7C    INC    (X)       ; Increment                          M(X) <= M(X) - 1
90 7C    INC    (Y)       ; Increment                          M(Y) <= M(Y) - 1
   7D    TNZ    (X)       ; Test for Negative or Zero          {CC.N, CC.Z}<= Test{M(X)}
90 7D    TNZ    (Y)       ; Test for Negative or Zero          {CC.N, CC.Z}<= Test{M(Y)}
   7E    SWAP   (X)       ; Swap Nibbles                       M(X).low <-> M(X).high
90 7E    SWAP   (Y)       ; Swap Nibbles                       M(Y).low <-> M(Y).high
   7F    CLR    (X)       ; Clear                              M(X) <= 0
90 7F    CLR    (Y)       ; Clear                              M(Y) <= 0
   F0    SUB    A, (X)    ; Subtraction                        A <= A - M(X)
90 F0    SUB    A, (Y)    ; Subtraction                        A <= A - M(Y)
   F1    CP     A, (X)    ; Compare                            {CC.N, CC.Z, CC.C} = Test{A - M(X)}
90 F1    CP     A, (Y)    ; Compare                            {CC.N, CC.Z, CC.C} = Test{A - M(Y)}
   F2    SBC    A, (X)    ; Subtraction                        A <= A - M(X) - CC.C
90 F2    SBC    A, (Y)    ; Subtraction                        A <= A - M(Y) - CC.C
   F4    AND    A, (X)    ; Logical AND                        A <= A AND M(X)
90 F4    AND    A, (Y)    ; Logical AND                        A <= A AND M(Y)
   F5    BCP    A, (X)    ; Logical Bit Compare                {CC.N, CC.Z} <= Test{A AND M(X)
90 F5    BCP    A, (Y)    ; Logical Bit Compare                {CC.N, CC.Z} <= Test{A AND M(Y)
   F6    LD     A, (X)    ; Load                               A <= M(X)
90 F6    LD     A, (Y)    ; Load                               A <= M(Y)
   F7    LD     (X), A    ; Load                               M(X) <= A
90 F7    LD     (Y), A    ; Load                               M(Y) <= A
   F8    XOR    A, (X)    ; Logical Exclusive OR               A <= A XOR M(X)
90 F8    XOR    A, (Y)    ; Logical Exclusive OR               A <= A XOR M(Y)
   F9    ADC    A, (X)    ; Addition with Carry                A <= A  +  M(X) + CC.C
90 F9    ADC    A, (Y)    ; Addition with Carry                A <= A  +  M(Y) + CC.C
   FA    OR     A, (X)    ; Logical OR                         A <= A  OR M(X)
90 FA    OR     A, (Y)    ; Logical OR                         A <= A  OR M(Y)
   FB    ADD    A, (X)    ; Addition                           A <= A  +  M(X)
90 FB    ADD    A, (Y)    ; Addition                           A <= A  +  M(Y)
 
No Offset Word Direct Indexed - адрессация к двум ячейкам через индексный регистр X(Y) без смещения

Команды оперируют 16-разрядным содержимым двух ячеек памяти, 16-разрядный адрес первой ячейки находится в индексном регистре X или Y. В первой ячейке памяти содержится старший байт операнда. Младший байта операнда располагается в ячейке памяти по адресу на единицу больше, чем в индексном регистре X или Y. Код команды не содержит адресов. Все доступные этим командам ячейки находятся в пределах своей секции памяти в диапазоне адресов $XX0000...$XXFFFF. Название индексного регистра должно быть в круглых скобках.

   F3     CPW    Y, (X)    ; Compare       {CC.N, CC.Z, CC.C} = Test{Y - M(X)}      word ?
90 F3     CPW    X, (Y)    ; Compare       {CC.N, CC.Z, CC.C} = Test{Y - M(X)}      word ?
   FE     LDW    X, (X)    ; Load Word     X <= M(X).w
90 FE     LDW    Y, (Y)    ; Load Word     Y <= M(Y).w
   FF     LDW    (X), Y    ; Load Word     M(Y).w <= Y
90 FF     LDW    (Y), X    ; Load Word     M(Y).w <= X
 
Short Byte Direct SP Indexed - адрессация к ячейке через указатель стека SP в сумме с коротким беззнаковым смещением

Команды оперируют 8-разрядным содержимым ячейки памяти, адрес которой состоит из содержимого указателя стека SP и короткого беззнакового смещения soff ($00...$FF). В коде команды участвует указатель SP и короткое беззнаковое смещение soff ($00...$FF, 0...255). Все доступные этим командам ячейки находятся в диапазоне адресов Stacktop + $00...$FF. Смещение soff должно быть без префикса # (решетка).

   00 XX    NEG    (soff,SP)     ; Negate (Logical 2's complement)     M(soff+SP) <= -M(soff+SP)
   03 XX    CPL    (soff,SP)     ; Logical 1's complement              M(soff+SP) <= /M(soff+SP)
   04 XX    SRL    (soff,SP)     ; Shift Right Logical                 M(soff+SP).{0->#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
   06 XX    RRC    (soff,SP)     ; Rotate Right Logical through Carry  M(soff+SP).{CC.C->#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
   07 XX    SRA    (soff,SP)     ; Shift Right Arithmetic              M(soff+SP).{#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
   08 XX    SLA    (soff,SP)     ; Shift Left Arithmetic               M(soff+SP).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-0}
   08 XX    SLL    (soff,SP)     ; Shift Left Logical                  M(soff+SP).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-0}
   09 XX    RLC    (soff,SP)     ; Rotate Left Logical through Carry   M(soff+SP).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-CC.C}
   0A XX    DEC    (soff,SP)     ; Decrement                           M(soff+SP) <= M(soff+SP) - 1
   0C XX    INC    (soff,SP)     ; Increment                           M(soff+SP) <= M(soff+SP) + 1
   0D XX    TNZ    (soff,SP)     ; Test for Negative or Zero           {CC.N, CC.Z} <= Test{ M(soff+SP }
   0E XX    SWAP   (soff,SP)     ; Swap Nibbles                        M(soff+SP).low <-> M(soff+SP).high
   0F XX    CLR    (soff,SP)     ; Clear                               M(soff+SP) <= 0
   10 XX    SUB    A, (soff,SP)  ; Subtraction                         A <= A - M(soff+SP)
   11 XX    CP     A, (soff,SP)  ; Compare                             {CC.N, CC.Z, CC.C} <= Test{ A - M(soff+SP) }
   12 XX    SBC    A, (soff,SP)  ; Subtraction                         A <= A - M(soff+SP)
   14 XX    AND    A, (soff,SP)  ; Logical AND                         A <= A AND M(soff+SP) 
   15 XX    BCP    A, (soff,SP)  ; Logical Bit Compare                 {CC.N, CC.Z} <= Test{ A AND M(soff,SP) }
   18 XX    XOR    A, (soff,SP)  ; Logical Exclusive OR                A <= A XOR M(soff+SP)
   19 XX    ADC    A, (soff,SP)  ; Addition with Carry                 A <= A + M(soff+SP) + CC.C
   1A XX    OR     A, (soff,SP)  ; Logical OR                          A <= A OR M(soff+SP)
   1B XX    ADD    A, (soff,SP)  ; Addition                            A <= A + M(soff+SP)
   6B XX    LD     (soff,SP), A  ; Load                                A <= M(soff+SP)
   7B XX    LD     A, (soff,SP)  ; Load                                A <= M(soff+SP)
 
Short Word Direct SP Indexed - адрессация к двум ячейкам через указатель стека SP в сумме с коротким беззнаковым смещением

Команды оперируют 16-разрядным содержимым двух ячеек памяти. Адрес первой ячейки памяти, хранящей старший байт операнда, состоит из содержимого указателя стека SP и короткого беззнакового смещения soff ($00...$FF). Адрес второй ячейки памяти, хранящей младший байт операнда, состоит из содержимого указателя стека SP и короткого беззнакового смещения soff ($00...$FF) плюс один. В коде команды участвует указатель SP и короткое беззнаковое смещение soff ($00...$FF, 0...255). Все доступные этим командам ячейки находятся в диапазоне адресов Stacktop + $00...$FF. Смещение soff должно быть без префикса # (решетка).

   13 XX   CPW    X, (soff,SP).w     ; Compare Word         {CC.N, CC.Z, CC.C} <= Test{ X - M(soff+SP).w }
   17 XX   LDW    (soff,SP).w, Y     ; Load Word            M(soff+SP) <= Y
   1E XX   LDW    X, (soff,SP)       ; Load Word            X <= M(soff+SP)
72 F2 XX   SUBW   Y, (soff,SP).w     ; Subtraction          Y <= Y - M(soff.w+SP).w
72 F0 XX   SUBW   X, (soff,SP).w     ; Subtraction Word     X <= X - M(soff+SP).w
72 F9 XX   ADDW   Y, (soff,SP).w     ; Addition Word        Y <= Y  +  M(soff+SP).w
72 FB XX   ADDW   X, (soff,SP).w     ; Addition Word        X <= X  +  M(soff+SP).w
 
Short Byte Direct Indexed - адрессация к ячейке через индексный регистр X(Y) в сумме с коротким смещением

Команды оперируют 8-разрядным содержимым ячейки памяти, адрес которой состоит из содержимого индесного регистра X или Y и короткого беззнакового смещения soff ($00...$FF). В коде команды участвует индексный регистр X или Y и короткое беззнаковое смещение soff ($00...$FF, 0...255). Все доступные этим командам ячейки находятся в диапазоне адресов $000000...$0100FE. Смещение soff должно быть без префикса # (решетка).

   60 XX    NEG    (soff,X)     ; Negate (Logical 2's complement)     M(soff+X)      <= -M(soff+X)
90 60 XX    NEG    (soff,Y)     ; Negate (Logical 2's complement)     M(soff+Y)      <= -M(soff+Y)
90 63 XX    CPL    (soff,Y)     ; Logical 1's complement              M(soff+Y)      <= /M(soff+Y)
   64 XX    SRL    (soff,X)     ; Shift Right Logical                 M(soff+X).{0->#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
90 64 XX    SRL    (soff,Y)     ; Shift Right Logical                 M(soff+Y).{0->#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
   66 XX    RRC    (soff,X)     ; Rotate Right Logical through Carry  M(soff+X).{CC.C->#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
90 66 XX    RRC    (soff,Y)     ; Rotate Right Logical through Carry  M(soff+Y).{CC.C->#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
   67 XX    SRA    (soff,X)     ; Shift Right Arithmetic              M(soff+X).{#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
90 67 XX    SRA    (soff,Y)     ; Shift Right Arithmetic              M(soff+Y).{#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
   68 XX    SLA    (soff,X)     ; Shift Left Arithmetic               M(soff+X).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-0}
   68 XX    SLL    (soff,X)     ; Shift Left Logical                  M(soff+X).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-0}
90 68 XX    SLA    (soff,Y)     ; Shift Left Arithmetic               M(soff+Y).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-0}
90 68 XX    SLL    (soff,Y)     ; Shift Left Logical                  M(soff+Y).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-0}
   69 XX    RLC    (soff,X)     ; Rotate Left Logical through Carry   M(soff+X).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-CC.C}
90 69 XX    RLC    (soff,Y)     ; Rotate Left Logical through Carry   M(soff+Y).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-CC.C}
   6A XX    DEC    (soff,X)     ; Decrement                           M(soff+X)      <= M(soff+X) - 1
90 6A XX    DEC    (soff,Y)     ; Decrement                           M(soff+Y)      <= M(soff+Y) - 1
   6C XX    INC    (soff,X)     ; Increment                           M(soff+X)      <= M(soff+X) + 1
90 6C XX    INC    (soff,Y)     ; Increment                           M(soff+Y)      <= M(soff+Y) + 1
   6D XX    TNZ    (soff,X)     ; Test for Negative or Zero           {CC.N, CC.Z} <= Test {M(soff+X)} 
90 6D XX    TNZ    (soff,Y)     ; Test for Negative or Zero           {CC.N, CC.Z} <= Test {M(soff+Y)}
   6E XX    SWAP   (soff,X)     ; Swap Nibbles                        M(soff+X).low      <=> M(soff+X).high     
90 6F XX    CLR    (soff,Y)     ; Clear                               M(soff+Y)      <= 0
   E0 XX    SUB    A, (soff,X)  ; Subtraction                         A <= A - M(soff+X)
90 E0 XX    SUB    A, (soff,Y)  ; Subtraction                         A <= A - M(soff+Y)
   E1 XX    CP     A, (soff,X)  ; Compare                             {CC.N, CC.Z, CC.C} = Test{A - M(soff+X)}
90 E1 XX    CP     A, (soff,Y)  ; Compare                             {CC.N, CC.Z, CC.C} = Test{A - M(soff+Y)}
   E2 XX    SBC    A, (soff,X)  ; Subtraction                         A <= A - M(soff+X) - CC.C
90 E2 XX    SBC    A, (soff,Y)  ; Subtraction                         A <= A - M(soff+Y) - CC.C
   E4 XX    AND    A, (soff,X)  ; Logical AND                         A <= A AND M(soff+X)
90 E4 XX    AND    A, (soff,Y)  ; Logical AND                         A <= A AND M(soff+Y)
   E5 XX    BCP    A, (soff,X)  ; Logical Bit Compare                 {CC.N, CC.Z} <= Test{A AND M(soff+X)}
90 E5 XX    BCP    A, (soff,Y)  ; Logical Bit Compare                 {CC.N, CC.Z} <= Test{A AND M(soff+Y)}
   E6 XX    LD     A, (soff,X)  ; Load                                A <= M(soff+X)
90 E6 XX    LD     A, (soff,Y)  ; Load                                A <= M(soff+Y)
   E7 XX    LD     (soff,X), A  ; Load                                M(soff+X) <= A
90 E7 XX    LD     (soff,Y), A  ; Load                                M(soff+Y) <= A
   E8 XX    XOR    (soff,X)     ; Logical Exclusive OR                A <= A XOR M(soff+X)
90 E8 XX    XOR    (soff,Y)     ; Logical Exclusive OR                A <= A XOR M(soff+Y)
   E9 XX    ADC    A, (soff,X)  ; Addition with Carry                 A <= A  +  M(soff+X) + CC.C
90 E9 XX    ADC    A, (soff,Y)  ; Addition with Carry                 A <= A  +  M(soff+Y) + CC.C
   EA XX    OR     A, (soff,X)  ; Logical OR                          A <= A  OR M(soff+X)
90 FA XX    OR     A, (soff,Y)  ; Logical OR                          A <= A  OR M(soff+Y)
   EB XX    ADD    A, (soff,X)  ; Addition                            A <= A  +  M(soff+X)
90 EB XX    ADD    A, (soff,Y)  ; Addition                            A <= A  +  M(soff+Y)
   EC XX    JP     (soff,X)     ; Jump (Absolute)                     PCE unch. PCH:PCL <= M(soff+X).w
90 EC XX    JP     (soff,Y)     ; Jump (Absolute)                     PCE unch. PCH:PCL <= M(soff+Y).w
   ED XX    CALL   (soff,X)     ; CALL Subroutine (Absolute)          M(SP--)<=PCL M(SP--)<-PCH PCE unch. PCH:PCL<=M(soff+X).w
90 ED XX    CALL   (soff,Y)     ; CALL Subroutine (Absolute)          M(SP--)<=PCL M(SP--)<-PCH PCE unch. PCH:PCL<=M(soff+Y).w
 
Short Word Direct Indexed - адрессация к двум ячейкам через индексный регистр X(Y) в сумме с коротким беззнаковым смещением

Команды оперируют 16-разрядным содержимым двух памяти. Адрес первой ячейки памяти состоит из содержимого индесного регистра X или Y в сумме с коротким беззнаковым смещением soff ($00...$FF). В первой ячейке содержится старший байт операнда. Адрес второй ячейки памяти состоит из содержимого индесного регистра X или Y в сумме с коротким беззнаковым смещением soff ($00...$FF) плюс один. В коде команды участвует индексный регистр X или Y и короткое беззнаковое смещение soff ($00...$FF, 0...255). Все доступные этим командам ячейки находятся в диапазоне адресов $000000...$0100FE. Смещение soff должно быть без префикса # (решетка).

   E3 XX    CPW    Y, (soff,X).w      ; Compare       {CC.N, CC.Z, CC.C} <= Test{Y - M(soff+X).w}
90 E3 XX    CPW    X, (soff,Y).w      ; Compare       {CC.N, CC.Z, CC.C} <= Test{X - M(soff+Y).w} 
   EE XX    LDW    X, (soff,X).w      ; Load Word     X <= M(soff+X).w
90 EE XX    LDW    Y, (soff,Y).w      ; Load Word     Y <= M(soff+Y).w
   EF XX    LDW    (soff,X).w, Y      ; Store Word    M(soff+X).w <= Y
90 EF XX    LDW    (soff,Y).w, X      ; Store Word    M(soff+Y).w <= X 
 
Long Byte Direct Indexed - адрессация к содержимому ячейки памяти через индексный регистр X(Y) в сумме с длинным беззнаковым смещением

Команды оперируют 8-разрядным содержимым ячейки памяти, адрес которой состоит из содержимого индесного регистра X или Y и длинного беззнакового смещения loff ($0000...$FFFF). В коде команды участвует индексный регистр X или Y и длинное беззнаковое смещение loff ($0000...$FFFF, 0...65535). Все доступные этим командам ячейки находятся в диапазоне адресов $000000...$01FFFE. Смещение loff должно быть без префикса # (решетка).

72 40 MS LS    NEG    (loff,X)      ; Negate (Logical 2's complement)     M(loff+X) <= -M(loff+X)
90 40 MS LS    NEG    (loff,Y)      ; Negate (Logical 2's complement)     M(loff+Y) <= -M(loff+Y)
72 43 MS LS    CPL    (loff,X)      ; Logical 1's complement              M(loff+X) <= /M(loff+X)
90 43 MS LS    CPL    (loff,Y)      ; Logical 1's complement              M(loff+Y) <= /M(loff+Y)
72 44 MS LS    SRL    (loff,X)      ; Shift Right Logical                 M(loff+X).{0->#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
90 44 MS LS    SRL    (loff,Y)      ; Shift Right Logical                 M(loff+Y).{0->#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
72 46 MS LS    RRC    (loff,X)      ; Rotate Right Logical through Carry  M(loff+X).{CC.C->#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
90 46 MS LS    RRC    (loff,Y)      ; Rotate Right Logical through Carry  M(loff+Y).{CC.C->#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
72 47 MS LS    SRA    (loff,X)      ; Shift Right Arithmetic              M(loff+X).{#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
90 47 MS LS    SRA    (loff,Y)      ; Shift Right Arithmetic              M(loff+Y).{#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
72 48 MS LS    SLA    (loff,X)      ; Shift Left Arithmetic               M(loff+X).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-0}
72 48 MS LS    SLL    (loff,X)      ; Shift Left Logical                  M(loff+X).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-0}
90 48 MS LS    SLA    (loff,Y)      ; Shift Left Arithmetic               M(loff+Y).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-0}
90 48 MS LS    SLL    (loff,Y)      ; Shift Left Logical                  M(loff+Y).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-0}
72 49 MS LS    RLC    (loff,X)      ; Rotate Left Logical through Carry   M(loff+X).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-CC.C}
90 49 MS LS    RLC    (loff,Y)      ; Rotate Left Logical through Carry   M(loff+Y).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-CC.C}
72 4A MS LS    DEC    (loff,X)      ; Decrement                           M(loff+X) <= M(loff+X) - 1
90 4A MS LS    DEC    (loff,Y)      ; Decrement                           M(loff+Y) <= M(loff+Y) - 1
72 4C MS LS    INC    (loff,X)      ; Increment                           M(loff+X) <= M(loff+X) + 1
90 4C MS LS    INC    (loff,Y)      ; Increment                           M(loff+Y) <= M(loff+Y) + 1
72 4D MS LS    TNZ    (loff,X)      ; Test for Negative or Zero           {CC.N, CC.Z} <= Test{ M(loff+X) }
90 4D MS LS    TNZ    (loff,Y)      ; Test for Negative or Zero           {CC.N, CC.Z} <= Test{ M(loff+Y) }
72 4E MS LS    SWAP   (loff,X)      ; Swap Nibbles                        M(loff+X).low <-> M(loff+X).high
90 4E MS LS    SWAP   (loff,Y)      ; Swap Nibbles                        M(loff+Y).low <-> M(loff+Y).high
72 4F MS LS    CLR    (loff,X)      ; Clear                               M(loff+X) <= 0
90 4F MS LS    CLR    (loff,Y)      ; Clear                               M(loff+Y) <= 0
   D0 MS LS    SUB    A, (loff,X)   ; Subtraction                         A <= A  -  M(loff+X)
90 D0 MS LS    SUB    A, (loff,Y)   ; Subtraction                         A <= A  -  M(loff+Y)
   D1 MS LS    CP     A, (loff,X)   ; Compare                             {CC.N, CC.Z, CC.C} <= Test{ A - M(loff+X) }
90 D1 MS LS    CP     A, (loff,Y)   ; Compare                             {CC.N, CC.Z, CC.C} <= Test{ A - M(loff+Y) }
   D2 MS LS    SBC    A, (loff,X)   ; Subtraction with Carry/Borrow       A <= A  -  M(loff+X)
90 D2 MS LS    SBC    A, (loff,Y)   ; Subtraction with Carry/Borrow       A <= A  -  M(loff+Y)
   D4 MS LS    AND    A, (loff,X)   ; Logical AND                         A <= A AND M(loff+X) 
90 D4 MS LS    AND    A, (loff,Y)   ; Logical AND                         A <= A AND M(loff+Y) 
   D5 MS LS    BCP    A, (loff,X)   ; Logical Bit Compare                 {CC.N, CC.Z} <= Test{ A AND M(loff+Y) }
90 D5 MS LS    BCP    A, (loff,Y)   ; Logical Bit Compare                 {CC.N, CC.Z} <= Test{ A AND M(loff+Y) }
   D6 MS LS    LD     A, (loff,X)   ; Load                                A              <= M(loff+X)
90 D6 MS LS    LD     A, (loff,Y)   ; Load                                A              <= M(loff+Y)
   D7 MS LS    LD     (loff,X), A   ; Load                                M(loff+X)      <= A
90 D7 MS LS    LD     (loff,Y), A   ; Load                                M(loff+Y)      <= A
   D8 MS LS    XOR    A, (loff,X)   ; Logical Exclusive OR                A <= A XOR M(loff+X)
90 D8 MS LS    XOR    A, (loff,Y)   ; Logical Exclusive OR                A <= A XOR M(loff+Y) 
   D9 MS LS    ADC    A, (loff,X)   ; Addition with Carry                 A <= A  +  M(loff+X)      + CC.C
90 D9 MS LS    ADC    A, (loff,Y)   ; Addition with Carry                 A <= A  +  M(loff+Y)      + CC.C
   DA MS LS    OR     A, (loff,X)   ; Logical OR                          A <= A  OR M(loff+X)
90 DA MS LS    OR     A, (loff,Y)   ; Logical OR                          A <= A  OR M(loff+Y)
   DB MS LS    ADD    A, (loff,X)   ; Addition                            A <= A  +  M(loff+X)
90 DB MS LS    ADD    A, (loff,Y)   ; Addition                            A <= A  +  M(loff+Y)
   DC MS LS    JP     (loff,X)      ; Jump (Absolute)                     PCE unch. PCH:PCL <= M(loff+X).w
90 DC MS LS    JP     (loff,Y)      ; Jump (Absolute)                     PCE unch. PCH:PCL <= M(loff+Y).w
   DD MS LS    CALL   (loff,X)      ; CALL Subroutine (Absolute)          M(SP--)<=PCL M(SP--)<-PCH PCE unch. PCH:PCL<=M(loff+X).w
90 DD MS LS    CALL   (loff,Y)      ; CALL Subroutine (Absolute)          M(SP--)<=PCL M(SP--)<-PCH PCE unch. PCH:PCL<=M(loff+Y).w
 
Long Word Direct Indexed - адрессация к двум ячейкам памяти через индексный регистр X(Y) в сумме с длинным смещением

Команды оперируют 16-разрядным содержимым двух ячеек памяти. Адрес первой ячейки памяти, хранящей старший байт операнда, состоит из содержимого индесного регистра X или Y и длинного беззнакового смещения loff ($0000...$FFFF). Адрес второй ячейки памяти, хранящей младший байт операнда, состоит из содержимого индесного регистра X или Y и длинного беззнакового смещения loff ($0000...$FFFF) плюс один. В коде команды участвует индексный регистр X или Y и длинное беззнаковое смещение loff ($0000...$FFFF, 0...65535). Все доступные этим командам ячейки находятся в диапазоне адресов $000000...$01FFFE. Смещение loff должно быть без префикса # (решетка).

   D3 MS LS    CPW    Y, (loff,X).w      ; Compare Word      {CC.N, CC.Z, CC.C} <= Test{ Y - M(loff+X).w }
90 D3 MS LS    CPW    X, (loff,Y).w      ; Compare Word      {CC.N, CC.Z, CC.C} <= Test{ X - M(loff+Y).w }
   DE MS LS    LDW    X, (loff,X).w      ; Load Word         X                <= M(loff+X).w
90 DE MS LS    LDW    Y, (loff,Y).w      ; Load Word         Y                <= M(loff+Y).w
   DF MS LS    LDW    (loff,X).w, Y      ; Load Word         M(loff+X).w      <= Y
90 DF MS LS    LDW    (loff,Y).w, X      ; Load Word         M(loff+Y).w      <= X
 
Extended Direct Indexed - адрессация через индексный регистр с расширенным смещением

Команды оперируют 8-разрядным содержимым ячейки памяти, адрес которой состоит из содержимого индесного регистра X или Y и расширенного беззнакового смещения eoff ($000000...$FFFFFF). В коде команды участвует индексный регистр X или Y и расширенное беззнаковое смещение eoff ($000000...$FFFFFF, 0...16777215). Команда имеет доступ ко всему адресному пространству STM8 $000000...$FFFFFF. Смещение loff должно быть без префикса # (решетка).

   A7 ExtB MS LS    LDF    (eoff,X), A        ; Load Far  M(eoff+X)      <= A
90 A7 ExtB MS LS    LDF    (eoff,Y), A        ; Load Far  M(eoff+Y)      <= A
   AF ExtB MS LS    LDF    A, (eoff,X)        ; Load      A <= M(eoff,X)
90 AF ExtB MS LS    LDF    A, (eoff,Y)        ; Load      A <= M(eoff,Y)
 
Short Pointer Long Indirect - адресация через указатель с коротким адресом

Команды безусловного перехода и вызова подпрограмм по указателю с коротким адресом, В указателе sptr.w короткий адрес (из диапазона $00...$FF) на две ячейки памяти, которые содержат длинный адрес перехода ($0000...$FFFF). В коде команды участвует короткий указатель sptr.w на длинный адрес. Команда имеет доступ к своей секции памяти ($0000...$FFFF).

92 CC XX            JP     [sptr.w]           ; Jump (Absolute)             PCE unch. PCH:PCL <= M(sptr).w
92 CD XX            CALL   [sptr.w]           ; CALL Subroutine (Absolute)  M(SP--)<=PCL M(SP--)<-PCH PCE unch. PCH:PCL <= M(sptr).w
 
Short Pointer Long Byte Indirect - адресация через указатель с коротким адресом

Команды оперируют 8-разрядным содержимым ячейки памяти. В указателе sptr.w короткий адрес (из диапазона $00...$FF) на две ячейки памяти, которые содержат длинный адрес операнда ($0000...$FFFF). В коде команды участвует короткий указатель sptr.w на короткий адрес (из диапазона $00...$FF). Команда имеет доступ к своей секции памяти ($0000...$FFFF).

92 30 XX      NEG    [sptr.w]      ; Negate (Logical 2's complement)     M(M(sptr).w) <= -M(M(sptr).w)
92 33 XX      CPL    [sptr.w]      ; Logical 1's complement              M(M(sptr).w) <= /M(M(sptr).w)
92 34 XX      SRL    [sptr.w]      ; Shift Right Logical                 M(M(sptr).w).{0->#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
92 36 XX      RRC    [sptr.w]      ; Rotate Right Logical through Carry  M(M(sptr).w).{CC.C->#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
92 37 XX      SRA    [sptr.w]      ; Shift Right Arithmetic              M(M(sptr).w).{#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
92 38 XX      SLA    [sptr.w]      ; Shift Left Arithmetic               M(M(sptr).w).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-0}
92 38 XX      SLL    [sptr.w]      ; Shift Left Logical                  M(M(sptr).w).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-0}
92 39 XX      RLC    [sptr.w]      ; Rotate Left Logical through Carry   M(M(sptr).w).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-CC.C}
92 3A XX      DEC    [sptr.w]      ; Decrement                           M(M(sptr).w) <= M(M(sptr).w) - 1
92 3C XX      INC    [sptr.w]      ; Increment                           M(M(sptr).w) <= M(M(sptr).w) + 1
92 3D XX      TNZ    [sptr.w]      ; Test for Negative or Zero           {N, Z} <= Test{ M(M(sptr).w) }
92 3E XX      SWAP   [sptr.w]      ; Swap Nibbles                        M(M(sptr).w).low <-> M(M(sptr).w).high
92 3F XX      CLR    [sptr.w]      ; Clear                               M(M(sptr).w) <= 0
92 C0 XX      SUB    A, [sptr.w]   ; Subtraction                         A <= A  -  M(M(sptr).w)
92 C1 XX      CP     A, [sptr.w]   ; Compare                             {CC.N, CC.Z, CC.C} <= Test{ A - M(M(sptr).w) }
92 C2 XX      SBC    A, [sptr.w]   ; Subtraction with Carry/Borrow       A <= A  -  M(M(sptr).w) - CC.C
92 C4 XX      AND    A, [sptr.w]   ; Logical AND                         A <= A  AND  M(M(sptr).w) 
92 C5 XX      BCP    A, [sptr.w]   ; Logical Bit Compare                 {CC.N, CC.Z} <= Test{ A AND M(M(sptr).w) }
92 C6 XX      LD     A, [sptr.w]   ; Load                                A            <= M(M(sptr).w)
92 C7 XX      LD     [sptr.w], A   ; Load                                M(M(sptr).w) <= A
92 C8 XX      XOR    A, [sptr.w]   ; Logical Exclusive OR                A <= A XOR M(M(sptr).w)
92 C9 XX      ADC    A, [sptr.w]   ; Addition with Carry                 A <= A  +  M(M(sptr).w) + CC.C
92 CA XX      OR     A, [sptr.w]   ; Logical OR                          A <= A  OR M(M(sptr).w)
92 CB XX      ADD    A, [sptr.w]   ; Addition                            A <= A  +  M(M(sptr).w)
92 CC XX      JP     [sptr.w]      ; Jump (Absolute)                     PCE unch. PCH:PCL <= M(sptr).w
92 CD XX      CALL   [sptr.w]      ; CALL Subroutine (Absolute)          M(SP--)<=PCL M(SP--)<-PCH PCE unch. PCH:PCL <= M(sptr).w
 
Short Pointer Long Word Indirect - адресация через указатель с коротким адресом на ячейку с длинным адресом

Команды оперируют 16-разрядным содержимым двух ячеек памяти. В указателе sptr.w короткий адрес (из диапазона $00...$FF) на две ячейки памяти, которые содержат длинный адрес операнда ($0000...$FFFF). В коде команды участвует длинный указатель sptr.w на короткий адрес (из диапазона $00...$FF). Адрес ячейки памяти с младшим байтом операнда на единицу больше адреса ячейки памяти со старшим байтом операнда. Команда имеет доступ к своей секции памяти ($0000...$FFFF).

92 C3 XX      CPW    X, [sptr.w].w      ; Compare Word                   {CC.N, CC.Z, CC.C} <= Test{ X - M(M(sptr).w).w }
91 CE XX      LDW    Y, [sptr.w].w      ; Load Word                      Y              <= M(M(sptr).w).w
92 CE XX      LDW    X, [sptr.w].w      ; Load Word                      X              <= M(M(sptr).w).w
91 CF XX      LDW    [sptr.w].w, Y      ; Load Word                      M(M(sptr).w).w <= Y
92 CF XX      LDW    [sptr.w].w, X      ; Load Word                      M(M(lptr).w).w <= X
 
Long Pointer Long Indirect - адресация через длинный указатель на длинный адрес

Команды безусловного перехода и вызова подпрограмм по указателю с длинным адресом. В указателе lptr.w длинный адрес (из диапазона $0000...$FFFF) на две ячейки памяти, которые содержат длинный адрес перехода ($0000...$FFFF). В коде команды участвует длинный указатель lptr.w на длинный адрес. Команда имеет доступ к своей секции памяти ($0000...$FFFF).

72 CC MS LS    JP     [lptr.w]          ; Jump (Absolute)              PCE unch. PCH:PCL <= M(lptr).w
72 CD MS LS    CALL   [lptr.w]          ; CALL Subroutine (Absolute)   M(SP--)<=PCL M(SP--)<-PCH PCE unch. PCH:PCL <= M(lptr).w
 
Long Pointer Long Byte Indirect - адресация через указатель с длинным адресом на ячейку с длинным адресом

Команды оперируют 8-разрядным содержимым ячейки памяти. В указателе lptr.w длинный адрес (из диапазона $0000...$FFFF) на две ячейки памяти, которые содержат длинный адрес операнда ($0000...$FFFF). В коде команды участвует длинный указатель lptr.w на длинный адрес. Команда имеет доступ к своей секции памяти ($0000...$FFFF).

72 30 XX       NEG    [lptr.w]           ; Negate (Logical 2's complement)      M(M(lptr).w) <= -M(M(lptr).w)
72 33 MS LS    CPL    [lptr.w]           ; Logical 1's complement               M(M(lptr).w) <= /M(M(lptr).w)
72 34 MS LS    SRL    [lptr.w]           ; Shift Right Logical                  M(M(lptr).w).{0->#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
72 36 MS LS    RRC    [lptr.w]           ; Rotate Right Logical through Carry   M(M(lptr).w).{CC.C->#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
72 37 MS LS    SRA    [lptr.w]           ; Shift Right Arithmetic               M(M(lptr).w).{#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
72 38 MS LS    SLA    [lptr.w]           ; Shift Left Arithmetic                M(M(lptr).w).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-0}
72 38 MS LS    SLL    [lptr.w]           ; Shift Left Logical                   M(M(lptr).w).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-0}
72 39 MS LS    RLC    [lptr.w]           ; Rotate Left Logical through Carry    M(M(lptr).w).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-CC.C}
72 3A XX       DEC    [lptr.w]           ; Decrement                            M(M(lptr).w) <= M(M(lptr).w) - 1
72 3C MS LS    INC    [lptr.w]           ; Increment                            M(M(lptr).w) <= M(M(lptr).w) + 1
72 3D MS LS    TNZ    [lptr.w]           ; Test for Negative or Zero            {N, Z} <= Test{ M(M(lptr).w) }
72 3E XX       SWAP   [lptr.w]           ; Swap Nibbles                         M(M(lptr).w).low <-> M(M(lptr).w).high
72 3F MS LS    CLR    [lptr.w]           ; Clear                                M(M(lptr).w) <= 0
72 C0 XX       SUB    A, [lptr.w]        ; Subtraction                          A <= A  -  M(M(lptr).w)
72 C1 MS LS    CP     A, [lptr.w]        ; Compare                              {CC.N, CC.Z, CC.C} <= Test{ A - M(M(lptr).w) }
72 C2 MS LS    SBC    A, [lptr.w]        ; Subtraction with Carry/Borrow        A <= A  -  M(M(lptr).w) - CC.C
72 C4 MS LS    AND    A, [lptr.w]        ; Logical AND                          A <= A  AND  M(M(lptr).w) 
72 C5 MS LS    BCP    A, [lptr.w]        ; Logical Bit Compare                  {CC.N, CC.Z} <= Test{ A AND M(M(lptr).w) }
72 C6 MS LS    LD     A, [lptr.w]        ; Load                                 A            <= M(M(lptr).w)
72 C7 MS LS    LD     [lptr.w], A        ; Load                                 M(M(lptr).w) <= A
72 C8 MS LS    XOR    A, [lptr.w]        ; Logical Exclusive OR                 A <= A XOR M(M(lptr).w)
72 C9 MS LS    ADC    A, [lptr.w]        ; Addition with Carry                  A <= A  +  M(M(lptr).w) + CC.C
72 CA MS LS    OR     A, [lptr.w]        ; Logical OR                           A <= A  OR M(M(lptr).w)
72 CB MS LS    ADD    A, [lptr.w]        ; Addition                             A <= A  +  M(M(lptr).w)
 
Long Pointer Long Word Indirect - адресация через длинный указатель на ячейку с длинным адресом

Команды оперируют 16-разрядным содержимым двух ячеек памяти. В указателе lptr.w длинный адрес (из диапазона $0000...$FFFF) на две ячейки памяти, которые содержат длинный адрес операнда ($0000...$FFFF). В коде команды участвует длинный указатель lptr.w на длинный адрес. Команды имеют доступ к своей секции памяти ($000000...$00FFFF).

72 C3 MS LS    CPW    X, [lptr.w].w      ; Compare Word                        {CC.N, CC.Z, CC.C} <= Test{ X - M(M(lptr).w).w }
91 C3 XX       CPW    Y, [lptr.w].w      ; Compare Word                        {CC.N, CC.Z, CC.C} <= Test{ Y - M(M(lptr).w).w }
72 CE MS LS    LDW    X, [lptr.w].w      ; Load Word                           X              <= M(M(lptr).w).w
72 CF MS LS    LDW    [lptr.w].w, X      ; Load Word                           M(M(lptr).w)   <= X
 
Long Pointer Extended Indirect - адресация через длинный указатель на расширенный адрес

Команды безусловного перехода и вызова подпрограмм по указателю с длинным адресом, В указателе lptr.e длинный адрес (из диапазона $0000...$FFFF) на три ячейки памяти, которые содержат расширенный адрес перехода ($000000...$FFFFFF. В коде команды участвует длинный указатель lptr.e на расширенный адрес. Команды имеют доступ ко всей памяти STM8 ($000000...$FFFFFF).

92 8D MS LS    CALLF  [lptr.e]           ; Call Far Subroutine                 M(SP--)<=PCL M(SP--)<-PCH M(SP--)<-PCE PC<=M(lptr).e
92 AC MS LS    JPF    [lptr.e]           ; Jump Far                            PC <- M(lptr).e
 
Long Pointer Extended Byte Indirect - адресация через указатель с длинным адресом на ячейку с расширенным адресом

Команды оперируют 8-разрядным содержимым ячейки памяти. В указателе lptr.e длинный адрес (из диапазона $0000...$FFFF) на три ячейки памяти, которые содержат расширенный адрес операнда ($000000...$FFFFFF). В коде команды участвует длинный указатель lptr.w на расширенныы адрес (из диапазона $000000...$FFFFFF). Команды имеют доступ ко всей памяти STM8 ($000000...$FFFFFF).

92 BC MS LS    LDF    A, [lptr.e]        ; Load Far                           A <= M(M(lptr).e)
92 BD MS LS    LDF    [lptr.e], A        ; Load Far                           M(M(lptr).e) <= A
 
Short Pointer Long Indirect Indexed - адресация через короткий указатель с длинным адресом

Команды безусловного перехода и вызова подпрограмм по указателю с длинным адресом и индексному регистру . В указателе sptr.w длинный адрес (из диапазона $0000...$FFFF) на две ячейки памяти, которые содержат длинный адрес ($0000...$FFFF), к которому добавляется содержимое индексного регистра X или Y для получения адреса перехода. В коде команды участвует короткий указатель sptr.w на длинный адрес и индексный регистр X или Y. Команды имеют доступ к адресам $000000...$01FFFE.

91 DC XX    JP     ([sptr.w],Y)    ; Jump (Absolute)               PCE unch. PCH:PCL <= M(M(sptr).w+Y).w
92 DC XX    JP     ([sptr.w],X)    ; Jump (Absolute)               PCE unch. PCH:PCL <= M(M(sptr).w+X).w
91 DD XX    CALL   ([sptr.w],Y)    ; CALL Subroutine (Absolute)    M(SP--)<=PCL M(SP--)<-PCH PCE unch. PCH:PCL<=M(M(sptr).w+Y).w
92 DD XX    CALL   ([sptr.w],X)    ; CALL Subroutine (Absolute)    M(SP--)<=PCL M(SP--)<-PCH PCE unch. PCH:PCL<=M(M(sptr).w+X).w
 
Short Pointer Long Byte Indirect Indexed - адресация через короткий указатель с длинным адресом на ячейку с длинным адресом

Команды оперируют 8-разрядным содержимым ячейки памяти. В указателе sptr.w длинный адрес (из диапазона $0000...$FFFF) на две ячейки памяти, которые содержат длинный адрес ($0000...$FFFF), к которому добавляется содержимое индексного регистра X или Y для получения адреса операнда. В коде команды участвует указатель sptr.w на длинный адрес (из диапазона $0000...$FFFF) и индексный регистр X или Y. Команды имеют доступ к памяти в диапазоне адресов $000000...$01FFFE.

91 60 XX    NEG    ([sptr.w],Y)       ; Negate (Logical 2's complement)      M(M(sptr).w+Y) <= -M(M(sptr).w+Y)
92 60 XX    NEG    ([sptr.w],X)       ; Negate (Logical 2's complement)      M(M(sptr).w+X) <= -M(M(sptr).w+X)
91 63 XX    CPL    ([sptr.w],Y)       ; Logical 1's complement               M(M(sptr).w+Y) <= /M(M(sptr).w+Y)
92 63 XX    CPL    ([sptr.w],X)       ; Logical 1's complement               M(M(sptr).w+X) <= /M(M(sptr).w+X)
91 64 XX    SRL    ([sptr.w],Y)       ; Shift Right Logical                  M(M(sptr).w+Y).{0->#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
92 64 XX    SRL    ([sptr.w],X)       ; Shift Right Logical                  M(M(sptr).w+X).{0->#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
91 66 XX    RRC    ([sptr.w],Y)       ; Rotate Right Logical through Carry   M(M(sptr).w+Y).{CC.C->#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
92 66 XX    RRC    ([sptr.w],X)       ; Rotate Right Logical through Carry   M(M(sptr).w+X).{CC.C->#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
91 67 XX    SRA    ([sptr.w],Y)       ; Shift Right Arithmetic               M(M(sptr).w+Y).{#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
92 67 XX    SRA    ([sptr.w],X)       ; Shift Right Arithmetic               M(M(sptr).w+X).{#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
91 68 XX    SLA    ([sptr.w],Y)       ; Shift Left Arithmetic                M(M(sptr).w+Y).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-0}
91 68 XX    SLL    ([sptr.w],Y)       ; Shift Left Logical                   M(M(sptr).w+Y).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-0}
92 68 XX    SLA    ([sptr.w],X)       ; Shift Left Arithmetic                M(M(sptr).w+X).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-0}
92 68 XX    SLL    ([sptr.w],X)       ; Shift Left Logical                   M(M(sptr).w+X).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-0}
91 69 XX    RLC    ([sptr.w],Y)       ; Rotate Left Logical through Carry    M(M(sptr).w+Y).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-CC.C}
92 69 XX    RLC    ([sptr.w],X)       ; Rotate Left Logical through Carry    M(M(sptr).w+X).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-CC.C}
91 6A XX    DEC    ([sptr.w],Y)       ; Decrement                            M(M(sptr).w+Y) <= M(M(sptr).w+Y) - 1
92 6A XX    DEC    ([sptr.w],X)       ; Decrement                            M(M(sptr).w+X) <= M(M(sptr).w+X) - 1
91 6C XX    INC    ([sptr.w],Y)       ; Increment                            M(M(sptr).w+Y) <= M(M(sptr).w+Y) + 1
92 6C XX    INC    ([sptr.w],X)       ; Increment                            M(M(sptr).w+X) <= M(M(sptr).w+X) + 1
91 6D XX    TNZ    ([sptr.w],Y)       ; Test for Negative or Zero            {CC.N, CC.Z} <= Test {M(M(sptr).w+Y)}
92 6D XX    TNZ    ([sptr.w],X)       ; Test for Negative or Zero            {CC.N, CC.Z} <= Test {M(M(sptr).w+X)}
91 6E XX    SWAP   ([sptr.w],Y)       ; Swap Nibbles                         M(M(sptr).w+Y).low <=> M(M(sptr).w+Y).high
92 6E XX    SWAP   ([sptr.w],X)       ; Swap Nibbles                         M(M(sptr).w+X).low <=> M(M(sptr).w+X).high
91 6F XX    CLR    ([sptr.w],Y)       ; Clear                                M(M(sptr).w+Y) <= 0
92 6F XX    CLR    ([sptr.w],X)       ; Clear                                M(M(sptr).w+X) <= 0
91 D0 XX    SUB    A, ([sptr.w],Y)    ; Subtraction                          A <= A  -  M(M(sptr).w+Y)
92 D0 XX    SUB    A, ([sptr.w],X)    ; Subtraction                          A <= A  -  M(M(sptr).w+X)
91 D1 XX    CP     A, ([sptr.w],Y)    ; Compare                              {CC.N, CC.Z, CC.C} <= Test{ A - M(M(sptr).w+Y) }
92 D1 XX    CP     A, ([sptr.w],X)    ; Compare                              {CC.N, CC.Z, CC.C} <= Test{ A - M(M(sptr).w+X) }
91 D2 XX    SBC    A, ([sptr.w],Y)    ; Subtraction with Carry/Borrow        A <= A  -  M(M(srptr).w+Y)
92 D2 XX    SBC    A, ([sptr.w],X)    ; Subtraction with Carry/Borrow        A <= A  -  M(M(srptr).w+X)
91 D4 XX    AND    A, ([sptr.w],Y)    ; Logical AND                          A <= A AND M(M(sptr).w+Y) 
92 D4 XX    AND    A, ([sptr.w],X)    ; Logical AND                          A <= A AND M(M(sptr).w+X) 
91 D5 XX    BCP    A, ([sptr.w],Y)    ; Logical Bit Compare                  {CC.N, CC.Z} <= Test{ A AND M(M(sptr).w+Y) }
92 D5 XX    BCP    A, ([sptr.w],X)    ; Logical Bit Compare                  {CC.N, CC.Z} <= Test{ A AND M(M(sptr).w+X) }
91 D6 XX    LD     A, ([sptr.w],Y)    ; Load                                 A              <= M(M(sptr).w+Y)
92 D6 XX    LD     A, ([sptr.w],X)    ; Load                                 A              <= M(M(sptr).w+X)
91 D7 XX    LD     ([sptr.w],Y), A    ; Load                                 M(M(sptr).w+Y) <= A
92 D7 XX    LD     ([sptr.w],X), A    ; Load                                 M(M(sptr).w+X) <= A
91 D8 XX    XOR    A, ([sptr.w],Y)    ; Logical Exclusive OR                 A <= A XOR M(M(sptr).w+Y)
92 D8 XX    XOR    A, ([sptr.w],X)    ; Logical Exclusive OR                 A <= A XOR M(M(sptr).w+X)
91 D9 XX    ADC    A, ([sptr.w],Y)    ; Addition with Carry                  A <= A  +  M(M(sptr).w+Y) + CC.C
92 D9 XX    ADC    A, ([sptr.w],X)    ; Addition with Carry                  A <= A  +  M(M(sptr).w+X) + CC.C
91 DA XX    OR     A, ([sptr.w],Y)    ; Logical OR                           A <= A  OR M(M(sptr).w+Y) 
92 DA XX    OR     A, ([sptr.w],X)    ; Logical OR                           A <= A  OR M(M(sptr).w+X)
91 DB XX    ADD    A, ([sptr.w],Y)    ; Addition                             A <= A  +  M(M(sptr).w+Y)
92 DB XX    ADD    A, ([sptr.w],X)    ; Addition                             A <= A  +  M(M(sptr).w+X)
 
Short Pointer Long Word Indirect Indexed - адресация через короткий указатель на ячейку с длинным адресом в сумме с индексным регистром X(Y)

Команды оперируют 16-разрядным содержимым двух ячеек памяти. В указателе sptr.w длинный адрес (из диапазона $0000...$FFFF) на две ячейки памяти, которые содержат длинный адрес ($0000...$FFFF), к которому добавляется содержимое индексного регистра X или Y для получения адреса операнда. В коде команды участвует указатель sptr.w на длинный адрес и индексный регистр X или Y. Адрес ячейки памяти с младшим байтом операнда на единицу больше адреса ячейки памяти со старшим байтом операнда. Команды имеют доступ к памяти в диапазоне адресов $000000...$01FFFE.

91 D3 XX    CPW    X, ([sptr.w],Y).w  ; Compare Word  {CC.N, CC.Z, CC.C} <= Test{ X - M(M(sptr).w+Y).w }
92 D3 XX    CPW    X, ([sptr.w],X).w  ; Compare Word  {CC.N, CC.Z, CC.C} <= Test{ X - M(M(sptr).w+X).w }
91 DE XX    LDW    Y, ([sptr.w],Y).w  ; Load Word     Y                <= M(M(sptr).w+Y).w
92 DE XX    LDW    X, ([sptr.w],X).w  ; Load Word     X                <= M(M(sptr).w+X).w
91 DF XX    LDW    ([sptr.w],Y).w, X  ; Load Word     M(M(sptr).w+Y).w <= X
92 DF XX    LDW    ([sptr.w],X).w, Y  ; Load Word     M(M(sptr).w+X).w <= Y
 
Long Pointer Long Indirect Indexed - адресация через длинный указатель на длинный адрес в сумме с индексным регистром X

Команды безусловного перехода и вызова подпрограмм по указателю с длинным адресом и индексному регистру . В указателе lptr.w длинный адрес (из диапазона $0000...$FFFF) на две ячейки памяти, которые содержат длинный адрес ($0000...$FFFF), к которому добавляется содержимое индексного регистра X или Y для получения адреса перехода. В коде команды участвует указатель lptr.w на длинный адрес и индексный регистр X или Y. Команды имеют доступ к адресам $000000...$01FFFE.

72 DC MS LS    JP     ([lptr.w],X)       ; Jump (Absolute)            PCE unch. PCH:PCL <= M(M(lptr).w+X).w
72 DD MS LS    CALL   ([lptr.w],X)       ; CALL Subroutine (Absolute) M(SP--)<=PCL M(SP--)<-PCH PCE unch. PCH:PCL<=M(M(lptr).w+X).w
 
Long Pointer Long Indirect Indexed - адресация через длинный указатель на ячейку с длинным адресом в сумме с индексным регистром X

Команды безусловного перехода и вызова подпрограмм по указателю с длинным адресом и индексному регистру . В указателе lptr.w длинный адрес (из диапазона $0000...$FFFF) на две ячейки памяти, которые содержат длинный адрес ($0000...$FFFF), к которому добавляется содержимое индексного регистра X или Y для получения адреса перехода. В коде команды участвует указатель lptr.w на длинный адрес и индексный регистр X или Y. Команды имеют доступ к адресам $000000...$01FFFE.

72 DC MS LS    JP     ([lptr.w],X)       ; Jump (Absolute)            PCE unch. PCH:PCL <= M(M(lptr).w+X).w
72 DD MS LS    CALL   ([lptr.w],X)       ; CALL Subroutine (Absolute) M(SP--)<=PCL M(SP--)<-PCH PCE unch. PCH:PCL<=M(M(lptr).w+X).w
 
Long Pointer Long Byte Indirect Indexed - адресация через длинный указатель на ячейку с длинным адресом в сумме с индексным регистром X

Команды оперируют 8-разрядным содержимым ячейки памяти. В указателе lptr.w длинный адрес (из диапазона $0000...$FFFF) на две ячейки памяти, которые содержат длинный адрес ($0000...$FFFF), к которому добавляется содержимое индексного регистра X или Y для получения адреса операнда. В коде команды участвует указатель lptr.w на длинный адрес и индексный регистр X или Y. Команды имеют доступ к памяти в диапазоне адресов $000000...$01FFFE.

72 60 MS LS            NEG    ([lptr.w],X)       ; Negate (Logical 2's complement)            M(M(lptr).w+X) <= -M(M(lptr).w+X)
72 63 MS LS            CPL    ([lptr.w],X)       ; Logical 1's complement                     M(M(lptr).w+X) <= /M(M(lptr).w+X)
72 64 MS LS            SRL    ([lptr.w],X)       ; Shift Right Logical                        M(M(lptr).w+X).{0->#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
72 66 MS LS            RRC    ([lptr.w],X)       ; Rotate Right Logical through Carry         M(M(lptr).w+X).{CC.C->#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
72 67 MS LS            SRA    ([lptr.w],X)       ; Shift Right Arithmetic                     M(M(lptr).w+X).{#7->#6->#5->#4->#3->#2->#1->#0->CC.C}
72 68 MS LS            SLA    ([lptr.w],X)       ; Shift Left Arithmetic                      M(M(lptr).w+X).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-0}
72 68 MS LS            SLL    ([lptr.w],X)       ; Shift Left Logical                         M(M(lptr).w+X).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-0}
72 69 MS LS            RLC    ([lptr.w],X)       ; Rotate Left Logical through Carry          M(M(lptr).w+X).{CC.C<-#7<-#6<-#5<-#4<-#3<-#2<-#1<-#0<-CC.C}
72 6A MS LS            DEC    ([lptr.w],X)       ; Decrement                                  M(M(lptr).w+X) <= M(M(lptr).w+X) - 1
72 6C MS LS            INC    ([lptr.w],X)       ; Increment                                  M(M(lptr).w+X) <= M(M(lptr).w+X) + 1
72 6D MS LS            TNZ    ([lptr.w],X)       ; Test for Negative or Zero                  {CC.N, CC.Z} <= Test {M(M(lptr).w+X)}
72 6E MS LS            SWAP   ([lptr.w],X)       ; Swap Nibbles                               M(M(lptr).w+X).low <=> M(M(lptr).w+X).high
72 6F MS LS            CLR    ([lptr.w],X)       ; Clear                                      M(M(lptr).w+X) <= 0
72 D0 MS LS            SUB    A, ([lptr.w],X)    ; Subtraction                                A <= A  -  M(M(lptr).w+X)
72 D1 MS LS            CP     A, ([lptr.w],X)    ; Compare                                    {CC.N, CC.Z, CC.C} <= Test{ A - M(M(lptr).w+X) }
72 D2 MS LS            SBC    A, ([lptr.w],X)    ; Subtraction with Carry/Borrow              A <= A  -  M(M(lptr).w+X) with Carry/Borrow from A
72 D4 MS LS            AND    A, ([lptr.w],X)    ; Logical AND                                A <= A AND M(M(lptr).w+X) 
72 D5 MS LS            BCP    A, ([lptr.w],X)    ; Logical Bit Compare                        {CC.N, CC.Z} <= Test{ A AND M(M(lptr).w+X) }
72 D6 MS LS            LD     A, ([lptr.w],X)    ; Load                                       A              <= M(M(lptr).w+X)
72 D7 MS LS            LD     ([lptr.w],X), A    ; Load                                       M(M(lptr).w+X) <= A
72 D8 MS LS            XOR    A, ([lptr.w],X)    ; Logical Exclusive OR                       A <= A XOR M(M(lptr).w+X)
72 D9 MS LS            ADC    A, ([lptr.w],X)    ; Addition with Carry                        A <= A  +  M(M(lptr).w+X) + CC.C
72 DA MS LS            OR     A, ([lptr.w],X)    ; Logical OR                                 A <= A  OR M(M(lptr).w+X)
72 DB MS LS            ADD    A, ([lptr.w],X)    ; Addition                                   A <= A  +  M(M(lptr).w+X)
 
Long Pointer Long Word Indirect Indexed - адресация через длинный указатель на две ячейки с длинным адресом в сумме с индексным регистром X

Команды оперируют 16-разрядным содержимым двух ячеек памяти. В указателе lptr.w длинный адрес (из диапазона $0000...$FFFF) на две ячейки памяти, которые содержат длинный адрес ($0000...$FFFF), к которому добавляется содержимое индексного регистра X или Y для получения адреса операнда. В коде команды участвует длинный указатель lptr.w на длинный адрес и индексный регистр X или Y. Адрес ячейки памяти с младшим байтом операнда на единицу больше адреса ячейки памяти со старшим байтом операнда. Команды имеют доступ к памяти в диапазоне адресов $000000...$01FFFE.

72 D3 MS LS            CPW    X, ([lptr.w],X).w  ; Compare Word                               {CC.N, CC.Z, CC.C} <= Test{ X - M(M(lptr).w+X).w }
72 DE MS LS            LDW    X, ([lptr.w],X).w  ; Load Word                                  X                <= M(M(lptr).w+X).w
72 DF MS LS            LDW    ([lptr.w],X).w, Y  ; Load Word                                  M(M(lptr).w+X).w <= Y
 
Long Pointer Extended Indirect Indexed - адресация через длинный указатель на ячейку памяти с расширенным адресом в сумме с индексным регистром X(Y)

Команды оперируют 8-разрядным содержимым ячейки памяти. В указателе lptr.e длинный адрес (из диапазона $0000...$FFFF) на три ячейки памяти, которые содержат расширенный адрес ($00000...$FFFFFF), к которому добавляется содержимое индексного регистра X или Y для получения адреса операнда. В коде команды участвует длинный указатель lptr.e на расширенный адрес, и индексный регистр X или Y. Команды имеют доступ к памяти в диапазоне адресов $000000...$FFFFFE

91 A7 MS LS            LDF    ([lptr.e],Y), A    ; Load Far                                   M(M(lptr).e+Y) <= A
92 A7 MS LS            LDF    ([lptr.e],X), A    ; Load Far                                   M(M(lptr).e+X) <= A
91 AF MS LS            LDF    A, ([lptr.e],Y)    ; Load                                       A <= M(M(lptr).e+Y)
92 AF MS LS            LDF    A, ([lptr.e],X)    ; Load                                       A <= M(M(lptr).e+M)

 

Машинные коды STM8 и команды ассемблера здесь. Адресное пространство STM8S103F3 тут.

 

[Стек в STM8 (Статья 5)] [Оглавление.] [Тактирование в STM8 (Статья 7)]