Практические задания на экзамен по дисциплине "Цифровые и микропроцессорные устройства", страница 7

;-------------------------------------------------

;       MAINPROGRAM

        %INCLUDE "OPIS.INC"   ; ПОДКЛЮЧЕНИЕ

        %INCLUDE "LAB_IO.INC"                ;                  ДОПОЛНИТЕЛЬНЫХ

                    %INCLUDE "INIT_BU.MAC" ;                                      ТЕКСТОВЫХ ФАЙЛОВ

RAM     EQU     0800H

ROM     EQU     0000H

LEN_RAM EQU     0800H

ADDR1     EQU          0850H

ADDR2     EQU          0870H

POROG1  EQU          3FH

POROG2  EQU          78FFH

N                 EQU          1

STEP         EQU          2

;                  BUFFERS

TEXTSIZE        EQU     20H

        DEFSEG  DATA1,CLASS=DATA,START=RAM

        SEG     DATA1

BUF1:   DS      TEXTSIZE

                    ORG          ADDR1

ADDR        DS              ADDR2-ADDR1

COUNT1  DS              1

MASS2      DS              10H

NAMBER1                  DB              5FH,87H

NAMBER2                  DB              44H,87H

;       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 EXAMPLES

MASK11  EQU     00000011B       ;

MASK12  EQU          01010000B                  ;

;

;       PROGRAMM

Чет.

;

EXTERNDEQH                  ; ОБЪЯВЛЕНИЕ ВНЕШНЕГО ИМЕНИ,

        ; ПОДКЛЮЧАЕМОГО НА СТАДИИ КОМПОНОВКИ

SEGCODE

PROG:  

                    ;JMP         ZAD2_1

                    ;JMP         ZAD2_2

                    ;JMP         ZAD4_1

                    ;JMP         ZAD4_2

                    ;JMP         ZAD8

                    ;JMP         ZAD10

                    JMP           ZAD14

                    LXI     SP,STPOINT

        MVI     A,0     ;ALL INPUT

        OUT     DB8355

        DCR     A

        OUT     DA8355  ;ALL OUTPUT

;       MAIN

;

;       INPUT TO PORT A 8355

        LXI     H,BUF1+TEXTSIZE-1

                    MVI           M,0            ;END OF BUFFER

                    XCHG

        LXI     H,BUF1

LOOPIN:

        IN      PB8355

        MOV     M,A

        INX     H

        CALLDEQH

JNZLOOPIN

1.1. Заполнить область RAM, начиная с адреса MASS1, натуральными числами от 0 до 50 и от 50 до 45.

ZAD1:      

                    LXI            H,MASS

                    MVI           B,51

                    MVI           C,46

LOOP_1:

                    MVI           A,51

                    SUB           B

                    MOV         M,A

                    INX            H

                    DCR           B

                    JNZ           LOOP_1

LOOP_2:

                    MVI           A,4

                    ADD           C

                    MOV         M,A

                    INX            H

                    DCR           C

                    JNZ           LOOP_2  

2.1. В массиве чисел (формат байты/слова), расположенном между адресами ADDR1 (четное значение) и ADDR2, обнулить ячейки, содержащие четные числа (т.е. числа, имеющие младший бит младшего байта, равный нулю). Реализовать в виде подпрограммы.

1) Числа ADDR1 и ADDR2  – символические константы.

2) Значения ADDR1 и ADDR2   – содержимое ячеек памяти.

ZAD2_1:

                    LXI            SP,STPOINT

                    LXI            H,ADDR1

                    MVI           B,ADDR2-ADDR1

                    MVI           A,40

NEXT1:   

                    MOV         M,A           

                    INR            A

                    INX            H

                    DCR           B

                    JNZ           NEXT1

                    CALL        PODPR_1

PODPR_1:

                    LXI            H,ADDR1

                    MVIB,ADDR2-ADDR1                         ; БАЙТОВЫЙ ФОРМАТ         

LOOP1_1:                  

                    MOV         A,M

                    ANI            1

                    JNZ           NO_ZERO_1

                    MVI           M,0

NO_ZERO_1: