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

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

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

1. Разработать фрагмент программы, которая в зависимости от вводимого кода ( 00,01,02,03) производит передачу управления на адреса, заданные символическими именами ADR0, ADR1, ADR2, ADR3.

first_address     equ 800h

adr0    equ     1000h

adr1    equ     1100h

adr2    equ     1200h

adr3    equ     1300h

      defseg d_seg, start = first_address, class=data

      seg d_seg

         defseg io_seg,start=80h,class=IOspace

         seg    io_seg   ;

adrport  ds     1        

      defseg c_seg, start = 0000h, class=code

      seg c_seg

       in adrport

       CPI 00h

       JZ L0

       CPI 01h

       JZ L1

       CPI 02h

       JZ L2

       CPI 03h

       JZ L3

L0:  

        JMP addr0     

L1:

        JMP  addr1     

L2:

        JMP addr2     

L3:

        JMP addr3     

      end

2. Заполнить область памяти от адреса 2100h объемом 50h кодами 20h. Использовать шаблон

цикл типа ДО

first_address     equ 2100h

dlina   equ 50h

      defseg d_seg, start = first_address, class=data

      seg d_seg

      ds       dlina; zarezerviruem 50h baitov

      defseg c_seg, start = 0000h

      seg c_seg

        LXI H, first_address; ukazatel 4teniia

        MVI B, dlina; s4et4ik

L1:   MVI A, 20h

        MOV M, A

        INX H

        DCR B

        JNZ L1

      end

3. Заполнить область памяти от адреса 8000h объемом 125h нарастающими кодами 05,06,07, … . Заполнение идет от начального адреса в сторону уменьшения. (8000h – 8124h)

first_address     equ 8000h

dlina   equ 125h

      defseg d_seg, start = first_address

      seg d_seg

      ds       dlina;  zarezerviruem 125h baitov

      defseg c_seg, start = 0000h

      seg c_seg

        LXI H, first_address; ukazatel 4teniia

        LXI D, dlina; s4et4ik

        MVI C, 05h; narastaiushii kod zapolneniia

L1:   MOV A, C

        MOV M, A

        INR C

        INX H

        DCX D

; DCX D ne men9et flagi!!! i poetomu:       

        MOV A, E

        ORA D

        JNZ L1

      End

4. В зависимости от содержимого в ячейке 2101h выполнить одно из трех действий. Если (M(2101h)) <20h заполнить область памяти от адреса 2102h до адреса 2302h кодами 20h, если (M(2101h)) >20h, то кодами 30h и, если (M(2101h)) =20h, то кодами 00h

first_address     equ 2101h

      defseg d_seg, start = first_address, class=data

      seg d_seg

       db 30h

       ds 200h

      defseg c_seg, start = 0000h, class=code

      seg c_seg

          LXI H, first_address

          MOV A, M

          INX H

          LXI B, 2302h-2102h+1

          CPI 20h

          JZ L00h

          JC L20h

          MVI D, 30h

          JMP LLL

L00h: MVI D, 00h

          JMP LLL

L20h: MVI D, 20h

LLL:  MOV M, D

          INX H

          DCX B

          MOV A, B

          ORA C

          JNZ LLL

    end

5. Принять байтовые данные из порта port и записать их буфер в памяти (Buff1) до поступления кода 00h. Объем поступающей информации не превышает 80 байтов

first_address     equ 800h

      defseg d_seg, start = first_address, class=data

             seg d_seg

buff1    ds 80

         defseg io_seg,start=80h,class=IOspace

         seg    io_seg   ;

adrport  ds     1        

      defseg c_seg, start = 0000h, class=code

      seg c_seg

 MVI B, 80+1; s4et4ik

 LXI H, buff1; ukazatel

 L1:

        DCR B

        JZ L2

       IN adrport

       CPI 00h

       JZ L2; proverka na 00h

       MOV M, A

       INX H

       JMP L1

L2:

      End

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

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 2; zarezerv dlia cummi

      defseg c_seg, start = 0000h, class=code

      seg c_seg

        LXI H, buf1

        MVI B, LEN_BUF; s4et4ik

        MOV A, M

        INX H

        DCR B

L2:  ADD M

        JNC L1

        INR D

L1:  INX H

        DCR B

        JNZ L2

        MOV M, D

        INX H

        MOV M, A

      end

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

first_address     equ 1000h

dlinaBuf1             equ 1000h

 defseg d_seg, start = first_address, class=data

            seg d_seg

BUF1:  ds dlinaBuf1

SUM:    ds 2h

vremA: ds 1h

 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:   ADD M

        JNC L3

        INR D

L3:  INX H

        DCX B

        STA vremA

        MOV A, B

        ORA C

        LDA vremA

        JNZ L2

        MOV M, D

        INX H

        MOV M, A   

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

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