Решение экзаменационных задач по дисциплине "Цифровые и микропроцессорные устройства", страница 2

9. Вычислить сумму байт буфера BUF1, размером len_BUF,  (более 256) результат поместить в ячейку памяти по адресу SUM, формат суммы - WordИспользоватькоманду DAD RP

first_address     equ 1000h

dlinaBuf1             equ 1000h

            defseg d_seg, start = first_address, class=data

            seg d_seg

BUF1:  ds dlinaBuf1

SUM:    ds 2

ukCht: ds 2h

      defseg c_seg, start = 0000h, class=code

      seg c_seg

 ; ZAPOLNIM HUINEI BUFER

        LXI H, BUF1

        LXI B, dlinaBuf1

        MVI D, 00h

L1:  MOV M, D

        INR D

        INX H

        DCX B

         MOV A, B

         ORA C

         JNZ L1

; KONEC ZAPOLNENIIA HUINEI

        LXI H, BUF1

        LXI B, dlinaBuf1

L2:  MOV E, M

        INX H

        SHLD UkCht

        LHLD SUM

        DAD D

        SHLD SUM

        LHLD UkCht

        DCX B

        MOV A, B

        ORA C

        JNZ L2           

11. Написать программу вычисления суммы всех слов буфера BUFW, объемом len_W. Формат суммы – DWORD

first_address     equ 1000h

dlinaBuf1             equ 1000h

            defseg d_seg, start = first_address, class=data

            seg d_seg

BUF1:  ds dlinaBuf1

SUMs:    ds 2h

SUMm:    ds 2h

ukCht: ds 2h

      defseg c_seg, start = 0000h, class=code

      seg c_seg

 ; ZAPOLNIM HUINEI BUFER

        LXI H, BUF1

        LXI B, dlinaBuf1

        MVI D, 00h

L1:  MOV M, D

        INR D

        INX H

        DCX B

         MOV A, B

         ORA C

         JNZ L1

; KONEC ZAPOLNENIIA HUINEI

        LXI H, BUF1

        LXI B, dlinaBuf1

L2:  MOV D, M

        INX H

        MOV E, M

        INX H

        SHLD UkCht

        LHLD SUMm

        DAD D

        SHLD SUMm

        JNC L3

        LHLD SUMs

        INX H

        SHLD SUMs

L3:  LHLD UkCht

        DCX B

        DCX B

        MOV A, B

        ORA C

        JNZ L2

        end

 13. Вычислить сумму байтов буфера BUF1, размером len_BUF (не более 80h),  результат поместить в ячейку памяти по адресу SUM (формат byte)

first_address     equ 800h

LEN_BUF       equ 18h

      defseg d_seg, start = first_address, class=data

      seg d_seg

buf1:   db 43h, 0A3h, 8Ch, 0F3h, 5Ah, 9Bh, 0FCh, 69h

             db 13h, 63h, 0BCh, 03h, 15h, 9Fh, 0Ch, 6Ch

             db 47h, 0A9h, 2Ch, 83h, 5Ch, 9Ch, 0Fh, 14h

SUMM:   ds 1; zarezerv dlia cummi

      defseg c_seg, start = 0000h, class=code

      seg c_seg

        LXI H, buf1

        MVI B, LEN_BUF; s4et4ik

L1:  ADD M

        INX H

        DCR B

        JNZ L1

        MOV M, A

      end

14. Вычислить сумму байтов буфера BUF1, размером len_BUF (не более 80h),  результат поместить в ячейку памяти по адресу SUM (формат Word)

ТОЖЕ САМОЕ ЧТО И ЗАД 7

15. Вычислить сумму слов буфера BUF3, размером 80h,  результат поместить в ячейку памяти по адресу SUM формат DWord).

РЕШЕНИЕ – УПРОЩЁННАЯ ВЕРСИЯ ЗАД 11 (СЧЁТЧИК ИЗ 1 РЕГИСТРА А НЕ ИЗ ПАРЫ)

16. Вычислить сумму байтов буфера BUF1, размером 200h,  результат поместить в ячейку памяти по адресу SUM формат DWord).

first_address     equ 1000h

dlinaBuf1             equ 1000h

            defseg d_seg, start = first_address, class=data

            seg d_seg

BUF1:  ds dlinaBuf1

SUMs:    ds 2h

SUMm:    ds 2h

ukCht: ds 2h

      defseg c_seg, start = 0000h, class=code

      seg c_seg

 ; ZAPOLNIM HUINEI BUFER

        LXI H, BUF1

        LXI B, dlinaBuf1

        MVI D, 00h

L1:  MOV M, D

        INR D

        INX H

        DCX B

         MOV A, B

         ORA C

         JNZ L1