Вычисление суммы по модулю 65536 всех байт буферов BUF1 и BUF3

Страницы работы

Содержание работы

Министерство образования и науки РФ

Санкт-Петербургский государственный электротехнический университет

“ЛЭТИ”

Кафедра РС

ОТЧЕТ

по лабораторной работе № 7

Выполнил  Максимов М.С.

Факультет  РТ

Группа №  0105

Преподаватель  Смирнов Б.И.

Санкт-Петербург

2013

Лабораторная работа № 7

Вычислить сумму по модулю 65536 всех байт буферов BUF1 и BUF3. Подпрограмма CODING без изменений. Контрольных сумм (2 байта) разместить в памяти за соответствующими буферами.

Текст программы:

$ALLPUBLIC

$TITLE(TITLE   'LAB-RAB5. I8085 2009 =L_01.A85')

; COURIER

;       L_01.A85

; ВАРИАНТ ПРОГРАММЫ ИЗ НЕСКОЛЬКИХ ИСХОДНЫХ ФАЙЛОВ

;   РАЗДЕЛ 7 ЛАБОРАТОРНОГО ПРАКТИКУМА

;       MAIN PROGRAM

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

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

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

RAM     EQU     0800H                     ; стартовый адрес памяти типа RAM(2кбайт)

ROM     EQU     0000H                     ; стартовый адрес памяти типа ROM(2кбайт)

LEN_RAM EQU     0800H               ; размер памяти типа RAM

; задание BUF

TEXTSIZE        EQU     20H            ; размер буферов

DEFSEG  DATA1,CLASS=DATA,START=RAM

SEG     DATA1

BUF1:   DS      TEXTSIZE

BUF2:   DS      TEXTSIZE

BUF3:   DS      TEXTSIZE

SUMM1:        DS       2                     ; резервирование 2-х байтового пространства под ;сумму  

SUMM2:        DS       2                     ; для 1 и 3 буферов

;задание STACK

STACKSIZE   EQU    32

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

            SEG     STACK

STACKR:     DS      STACKSIZE     ;

STPOINT   EQU     $               ;назначение для имени STPOINT значения текущего ;адреса

;       FLAGS

            SEG     DATA1

PASS1            DS       1

;       MASKS FOR EXAMPLES

MASK11  EQU     00000011B      

MASK12        EQU    01010000B    

;

;       PROGRAMM

;

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

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

               SEG     CODE

PROG: 

              LXI     SP,STPOINT ;установка указателя стека

              MVI     A,0    

              OUT     DB8355  ;настройка портов ввода

              DCR     A

              OUT     DA8355  ;ALL OUTPUT

; инициализация стека и всех трёх буферов данных кодами «.», «1», «2», «3»

INIT1  STACKR,'.',STACKSIZE

INIT1   BUF1,'1',TEXTSIZE

INIT1   BUF2,'2',TEXTSIZE

INIT1   BUF3,'3',TEXTSIZE

;

;       MAIN

;

;       INPUT TO PORT A 8355

             LXI     H,BUF1+TEXTSIZE-1 ; HL= BUF1+TEXTSIZE-1

            MVI    M,0     ;конец BUF1

            XCHG  ; обмен содержимым DE и HL

            LXI     H,BUF1  ; HL= BUF1

LOOPIN:

        IN      PB8355 ; чтение ТБ из файла

        MOV     M,A  ; Переслать из A в M

        INX     H

        CALL    DEQH ; ПП сравнения (вычитания) Е-L, если байты не равны, то выход

        JNZ     LOOPIN

;       DECODING

        LXI     H,BUF1      ; указатель записи BUF1

        CALL     KONSUM ; вызов ПП контрольной суммы содержимого BUF1

        LXI         D,BUF2  ; указатель записи BUF2

        MVI        A,1

        STA        PASS1  ; установка флага первого прохода

LOOP1:

        MOV     A,M    ; чтение ТБ

            ORA    A       ; проверка ТБ на 0

            JZ        ENDTEXT

            CALL  CODING   ; использование ПП кодирования

            STAX  D                ; сохранение ТБ в буфере записи

            INX     H                ; модификация текущего указателя чтения

            INX     D                ; и записи

            JMP    LOOP1

ENDTEXT:

        STAX    D

            LDA    PASS1

            ORA    A                ; проверка флага прохода

            MVI    A,0

            STA    PASS1       ; сброс первого прохода

            JZ        HALT       ; переход по прежнему значению PASS

PRODOLJ:

;       ONCE MORE

            LXI     H,BUF2    ; загрузка указателей чтения

            LXI     D,BUF3    ; и записи для 2 прохода

            JMP    LOOP1

;

HALT:

        LXI     H,BUF3

        CALL    KONSUM1

;       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                         ; останов процессора

CODING:  ; ПП кодирования/декодирования

        CMA   ; побитовая инверсия ТБ

        RET     ; возврат из ПП

KONSUM:  ; ПП контрольной суммы содержимого BUF1

            PUSH  B   ; поместить в стек содержимое регистровых пар BC,HL,DE

            PUSH  H

            PUSH  D

            MVI    A,0   ; инициализация регистров A,D,E

            MVI    D,0

            MVI    E,0

            MVI    B,TEXTSIZE  ; помещение в регистр В содержимое TEXTSIZE=20Н

LOOL:

            MOV   A,E    ; переслать из E в A

            ADC    M       ; A←М(HL) + (A) + CY

            MOV   E,A    ; переслать из А в Е

            INX     H         ;модификация ТУ

            DCR    B

            MOV   A,D    ; Переслать из D в A

            ADD   M       ; A←М(HL) + (A)

            MOV   D,A     ; Переслать из A в D

            INX     H         ; Модификация ТУ

            DCR    B

            JNZ     LOOL ;  проверка на конец

            XCHG             ; Обмен содержимым DE и HL

            SHLD  SUMM1 ; Записать HL по адресу SUMM1

            POP     D         ; Извлечь слово из стека в DE, HL ,BC

            POP     H

            POP     B

            RET                ; Возврат из подпрограммы

KONSUM1:   ; ПП контрольной суммы содержимого BUF3

            PUSH  B

            PUSH  H

            PUSH  D

            MVI    A,0

            MVI    D,0

            MVI    E,0

            MVI    B,TEXTSIZE

LOOL1:

            MOV   A,E

            ADC    M

            MOV   E,A

            INX     H

            DCR    B

            MOV   A,D

            ADD   M

            MOV   D,A

            INX     H

            DCR    B

            JNZ     LOOL1

            XCHG

            SHLD  SUMM2

            POP     D

            POP     H

            POP     B

            RET

            END

Похожие материалы

Информация о работе