Основные приемы поиска и исправления ошибок, страница 3

        MOV     A,E

        SUB     L

        RET

CODING:

        ;SUBROUTINE

        CMA

               RET

;

KONSUM: ;SUBROUTINE

               ;

               ;

               RET

;

               END

2. ПОСЛЕДОВАТЕЛЬНОСТЬ ИСПОЛНЕНИЯ И ПОИСКА ОШИБОК ВАРИАНТА L2_00.A85

2.1. ВАРИАНТЫ ДЛЯ САМОСТОЯТЕЛЬНОГО ПОИСКА И ИСПРАВЛЕНИЯ ОШИБОК

RAM     EQU     0800H

ROM     EQU     0000H

LEN_RAM EQU     0800H

;              BUFFERS

TEXTSIZE        EQU     20H

        DEFSEG  DATA1,CLASS=DATA,START=RAM

        SEG     DATA1

BUF1:   DS      TEXTSIZE-1

        DB      0

        SEG     DATA1

BUF2:   DS      TEXTSIZE-1

        DB      О; не О, а 0 иначе буфер 2 не очистится перед началом работы

        SEG     DATA1

BUF3:   DS      TEXTSIZE

        DB      0

;       STACK

STACKSIZE            EQU        32

        DEFSEG  STACK,CLASS=DATA,START=RAM+LEN_RAM-STACKSIZE

        SEG     STACK

STACKR: DS      STACKSIZE

STPOINT EQU    $            ;

;       FLAGS

        SEG     DATA1

PASS1    DS          1

;       MASKS FOR EXAPLES

MASK11  EQU     00000011B       ;

MASK12  EQU     01010000В        ;

        ;MACROCOMMAND

INIT1        %MACRO               BU,SIM,SZ

        %LOCAL LOOP_INIT

        LXI  H,BU

               MVI         B,SZ

LOOP_INIT:

               MVI         M,SIM

               INR          H; не INR , а INX

               DCR        B

               JNZ         LOOP_INIT

        %ENDM

        SEG     IOSPACE,START=0

CS8155                  DS          1             ; COMMAND/STATUS REG OF 8155 IN I/O SPACE

PA8155                  DS          1             ; PORT A OF 8155 IN I/O SPACE

PB8155                  DS          1

PC8155                  DS          1             ; PORT C OF 8155 IN I/O SPACE

TL8155                   DS          1             ; TIMER LOW PART OF 8155 IN I/O SPACE

TH8155                   DS          1             ; TIMER HIGH PART OF 8155 IN I/O SPACE

               DEFSEG PA8355SEG,START=8,CLASS=IOSPACE

               SEG        PA8355SEG

PA8355          DS      1 ; PORT A OF 8355 IN I/O SPACE

PB8355                  DS          1 ; PORT B OF 8355 IN I/O SPACE

DA8355                  DS          1 ; DDR OF PORT A OF 8355 IN I/O SPACE

DB8355                  DS          1 ; DDR OF PORT B OF 8355 IN I/O SPACE

               ;

        ;PROGRAMM

        SEG     CODE,CLASS=CODE,START=ROM

               ;

PROG:   LXI     SP,STPOINT

        MVI     A,0     ;ALL INPUT

        OUT     DB8355

               DCR        A

        OUT     DB8355  ;ALL OUTPUT

               INIT1        STACKR,'.',STACKSIZE

        INIT1   BUF1,'1',TEXTSIZE-1

        INIT1   BUF2,'2',TEXTSIZE-1

        INIT1   BUF3,'3',TEXTSIZE-1

;

;       MAIN

;

;       INPUT TO PORT A 8355

        LXI     H,BUF1

        LXI     D,BUF1+TEXTSIZE-1

LOOPIN:

        IN      PB8355

        MOV     M,A

        INX     H

        CALL    DEQH

        JNZ     LOOPIN

;       DECODING

        LXI     H,BUF1

               CALL       KONSUM

               LXI          D,BUF2

               MVI         A,1

               STA         PASS1

LOOP1:

        MOV     A,M

               ORA        A

               JZ           ENDTEXT

               CALL       CODING

               STAX      D

               INX          H

               INX          D

               JMP        LOOP1N; не LOOP1N, а LOOP1

ENDTEXT:

        STAX    D; не STAXDLDAXD

               LDA        PASS1

               ORA        A

               MVI         A,0

               STA         PASS1

               JZ           HALT

PRODOLJ:

;       ONCE MORE

               LXI          H,BUF2

               LXI          D,BUF3

               JMP        LOOP1

;

HALT:

        LXI     H,BUF3

        CALL    KONSUM

;       OUTPUT FROM THE PORT B

        LXI     H,BUF2

        MVI     B,TEXTSIZE-1

LOOPOUT:

        MOV     A,M

        OUT     PA8355

        INX     H

        DCR     B

        JNZ     LOOPOUT

;

               HLT

DEQH:

;

ПП выполняет сравнение (вычитание) E-L,

; если байты не равны, то выход,

; иначе продолжение сравнений D-H.

;     выход: Z=0, если DE = HL,

;            Z=0, если DE <> HL

;

        MOV     A,D

        SUB     H

        RNZ

        MOV     A,E

        SUB     L

        RET

CODING:

        ;SUBROUTINE

        CMA

               RET

;

KONSUM: ;SUBROUTINE

               RET

;       END