Главная Контакты В избранное
  • Отчет по лабораторной работе №140 по теме: «1. Команды пересылки. Виды адресации операндов. Работа со стеком.

    АвторАвтор: student  Опубликовано: 14-12-2020, 21:00  Комментариев: (0)

     

     

     

    Скачать: 140.zip [1,27 Mb] (cкачиваний: 1)  

     

    Отчет по лабораторной работе №140

    по теме:

    «1. Команды пересылки. Виды адресации операндов. Работа со стеком.

    2. Основная программа и подпрограмма. Назначение рабочего банка и загрузка его регистров»

    по дисциплине «Вычислительные машины, системы и сети»

     


     

     

     

    1. Команды пересылки. Виды адресации операндов. Работа со стеком.

    Исходные данные и полученные листинг и загрузочный модуль представлены в таблицах 1, 2 и 3.

     

     

    Таблица 1 - Исходный текст программы MVB1.ASM

     

     

    Таблица 2 - Листинг программы (MVB1.LST)

     

     

    Таблица 3 - Загрузочный модуль (MVB1.HEX)

    Анализ работы программы по табл. 2 (MVB1.LST)

    1 Анализ команд пересылки строки 10-16

    Команда

    Мнемоника

    Команд

    Байт

    Приемник

    После вып. команды

    в приемнике

    Адресация

    Источник

    Приемник

    10

    MOV 31h,#0BBh

    MOV ad,#d8

    1

    3

    31h

    BBh

    Непоср.

    Прямая

    11

    MOV R1,#31h

    MOV Rn,#d8

    8

    2

    R1

    31h

    Непоср.

    Регистр

    12

    MOV A,R1

    MOV A,Rn

    8

    1

    A(E0h)

    31h

    Регистр.

    Неявная

    13

    MOV A,@R1

    MOV A,@Ri

    2

    1

    A(E0h)

    BBh

    Косвен.

    Неявная

    14

    MOV 5Fh,#0AAh

    MOV ad,#d8

    1

    3

    5Fh

    AAh

    Непоср.

    Прямая

    15

    MOV A,5Fh

    MOV A,ad

    1

    2

    A(E0h)

    AAh

    Прямая

    Неявная

    16

    MOV A,#5Fh

    MOV A,#d8

    1

    2

    A(E0h)

    5Fh

    Непоср.

    Неявная

    1.1 Описание команд строки 12,13,15,16

    12 строка: MOV A, R1 – копирует содержимое регистра R1 текущего банка в аккумулятор (рис. 1).

    Рис. 1– Результат команды «MOV A, R1»

    13 строка: MOV A,@R1 – Копирует содержимое с адреса, указанного в R1 текущего банка в аккумулятор (рис. 2).

    Рис. 2- Результат «MOV A,@R1»

    15 строка: MOV A,5Fh – Копирует а аккумулятор содержимое с адреса 5Fh (рис. 3).

    Рис. 3- Результат «MOV A,5Fh»

    16 строка: MOV A,#5Fh – Записывает в аккумулятор константу 5Fh (рис. 4).

    Рис. 4– Результат «MOV A,#5Fh»

    1.Анализ фрагмента строк 18-21

    18 MOV R0,#50h

    M1: 19 MOV @R0,#0CCh

    20 INC R0

    21 SJMP M1

     


    1

    Установка

    параметров

    1 цикла

    R0,#50h

    2

    Основное

    действие

    цикла

    Тело цикла

    @R0,#0CCh

    3

    Установка параметров

    следующего цикла

    INC R0

    4

    Проверка.

    - (беск. цикл)

    5

    Стоп

    NOP

     

     

     

     

     

     

    а) назначение блоков б) программа в) блок-схема

    Рис. 5 – Программная конструкция

    Значение меткиM1 будет при PC равным 0011h.

    При адресе ПП=0014h, код=80h – это код операции SJMP, при ПП=0015h, код=FBh – относительный адрес перехода rel. Переход выполняется по адресу в ПП: PC=PC0+2+FBh=11h. После выполнения этой операции, адрес ПП равен 0011h – начало цикла, это значение «выше» текущего 0014h, цикл повторяется.

    Адрес ПП=0016h. код=00h. 00h - NOP нет операции. Никакая команда не выполняется.

     

    2.Анализ строк 23-28

    23 MOV SP,#50h

    24 MOV R0,#50h

    25 MOV R2,#04h

    M2: 26 MOV @R0,#0CCh

    27 INC R0

    28 DJNZ R2,M2

     

    Команда

    Описание

    Мнемоника

    23

    MOV SP,#50h

    SP←50h

    MOV ad,#d8

    24

    MOV R0,#50h

    R0←50h

    MOV Rn,#d8

     

    25

    MOV R2,#04h

    R2←04h

    MOV Rn,#d8

     

    26

    MOV @R0,#0CCh

    РПД@R0←CCh

    MOV @Ri,#d8

     

    27

    INC R0

    R0←[R0]+1

    INC Rn

     

    28

    DJNZ R2,M2

    R2←[R2]-1, PC←[PC0]+2+rel

    DJNZ Rn,rel

     

     

    Значение меткиM2 при команде 76CCh на PC = 001Еh.

    Адрес ПП=0021h, код=DAh. DAh – код операции DJNZ R2, aдрес ПП=0022h, код=FBh. FBh – относительный адрес перехода rel. Переход выполняется по адресу в ПП: PC=PC0+2+FBh=1Fh. После выполнения этой операции, адрес ПП равен 001Fh – начало цикла, это значение «выше» текущего 0022h, цикл повторяется.

    Выставив в СК адрес 0021h, считывается в регистр команд содержимое ПП по адресу 0021h = DA. ДК по КОП=DAh определяет текущую команду как 2 байтную, МК выполняет операцию R2=[R2]-1, считывает 2 байт по адресу 0022h, получает значение относительного переходаrel, далее МК выполняет переход в СК на адрес 001Fh.

    Цикл записывает по адресам 50-54h содержимое ССh.

    24 строка устанавливает начальный адрес для записи содержимого в цикле

    25 строка задает условие окончания цикла.

    3.Анализ строк 30-35

    30 MOV A,#50H

    31 MOV R0,#08H

    M3: 32 PUSH ACC

    33 INC A

    34 DJNZ R0,M3

    35 NOP

    Команда

    Описание

    Мнемоника

    30

    MOV A,#50H

    A←50H

    MOV ad,#d8

     

    31

    MOV R0,#08H

    R0←08H

    MOV Rn,#d8

     

    32

    PUSH ACC

    M@SP←[A]

    PUSH ad

     

    33

    INC A

    A←[A]+1

    INC A

     

    34

    DJNZ R0,M3

    R0←[R0]-1, PC←[PC0]+2+rel

    DJNZ Rn,rel

     

    35

    NOP

     

     

     

    1

    Установка

    параметров

    1 цикла

    MOV A,#50H

    MOV R0,#08H

    2

    Основное

    действие

    цикла

    Тело цикла

    M3: PUSH ACC

    3

    Установка параметров

    следующего цикла

    INC A

    4

    Проверка.

    DJNZ R0,M3

    5

    Стоп

    NOP

     

     

     

     

     

     

     

     

    а) назначение блоков б) программа в) блок-схема

    Рис. 6 – Программная конструкция

    Значение метки М3 при команде C0E0h в PC = 0028h.

    Содержимое регистра R0 задает условие окончания цикла. Содержимое аккумулятора (А) задает параметры следующего цикла.

    Рис. 5– Результат работы после 1 цикла

    Рис. 6– Результат работы после всех циклов

    4.Анализ строк 36-45

    36 MOV SP,#60H

    37 PUSH 51H

    38 PUSH 52H

    39 PUSH 53H

    40 PUSH 54H

    41 POP 65H

    42 POP 66H

    43 POP 67H

    44 POP 68H

    45 NOP

    Команда

    Описание

    Мнемоника

    36

    MOV SP,#60H

    SP←60H

    MOV ad,#d8

     

    37

    PUSH 51H

    M@SP←[51H]

    PUSH ad

     

    41

    POP 65H

    [65H]←[M@SP]

    POP ad

     

    33

    NOP

     

     

     

    Рис. 7– Результат выполнения программы до строки 0031h

     

    Рис. 8– Результат выполнения всей программы


    2 Основная программа и подпрограмма. Назначение рабочего банка и загрузка его регистров

    Исходные данные и полученные листинг и загрузочный модуль представлены в таблицах 4, 5 и 6.

     

     

    Таблица 4 - Исходный текст программы MVB2.ASM

     

     

    Таблица 5 - Листинг программы (MVB2.LST)

     

     

    Таблица 6 - Загрузочный модуль (MVB2.HEX)


    Анализ работы программы по табл. 5 (MVB2.LST)

    1. Анализ строк от 10 до 15

    Эти шесть строк листинга представлены в таблице 7, для команд можно составить блок-схему (рис. 11) и соответственно прокомментировать их.

    Таблица 7 – Анализируемый фрагмент листинга

    1

    Установка начальных параметров для цикла и др.

    MOV SP, #50H

    MOV R0, #50H

    2

     

     

    3

    Основное действие цикла

     

    Установка параметров следующего цикла

    Тело цикла

    M1: MOV @R0, #50H

     

     

    INC R0

     

    4

    Проверка: R0=54h

    CJNE R0,#54H, M1 (rel)

    5

     

    NOP

    а) блок-схемаб) назначение блоков в) программа

    Рис. 11 – Программная конструкция

    Таблица 8 – Анализ команд

    № строки

    Мнемоника

    Описание

    Число команд

    Число байт

    КОП (Н-код)

    10 MOV SP, #50H

    MOV ad, #d8

    SP←50h

    1

    3

    75

    11 MOV R0, #50H

    MOV Rn, #d8

    R0←50h

    8

    2

    78

    12 MOV @R0, #0ССH

    MOV @Ri, #d8

    РПД@R0←0ССh

    2

    2

    76

    13 INC R0

    INC Rn

    R0←[R0]+1

    8

    1

    08

    14 CJNE R0,#54H, M1(rel)

    CJNE Rn, #d8, rel

    [R0]-54h→C, PC←[PC]+3+FAh^NE

    8

    3

    В8

    15 NOP

    NOP

    PC←[PC]+1 (нет операции)

    1

    1

    00

    Команда, расположенная на 10ой строке, записывает в содержимое указателя стека SP (РПД в блоке SFRs) заданное однобайтное число 50h, определяющее «дно» стека. Команда 11ой строки записывает в содержимое регистра R0 текущего банка заданное однобайтное число 50h. На 12ой строке в РПД@R0 – регистр РПД с адресом, находящемся в R0, также записывается однобайтное число ССh. На 13ой к предыдущему значению содержимого регистра R0 прибавляется единица. На 14ой задаётся цикл с командой CJNE– Compare& jumpifnotequal(сравнить и перейти, если значения не равны), сравниваются содержимое регистра R0 и однобайтное число 54h, и пока эти значения не сравняются (в ходе прохождения цикла), программный счетчикбудет перебрасываться назад к установленной метке М1:

    - при [R0]< 54hто C≠0 => NE(not equal)=1 => PC←[PC]+3+FAh – повторяется цикл,

    - при [R0]=54h тоC=0, => NE(not equal)=0 => PC←[PC]+3 – цикл завершен.

    Численное значение метки М1 будет равен:PC=[PC]+3+FAh, т.е. переход программного счётчика произойдёт в значение: PC=0008h+0003h+00FAh

    то есть PC при не выполнении условия [R0]=54hбудет перескакивать к M1 со значением PC=0005h

     

    Назначение команд: в данном случае, с помощью регистра R0 в адреса РПД последовательно записываются содержимое ССh начиная с заданного адреса 50h и кончая заданным ограничением цикла 54h при инкрементировании R0. Результат выполнения этих команд приведён на рисунках 12 и 13.

    Рис. 12 – Результат работы в ADSimпосле первого цикла

    Рис. 13 – Результат работы в ADSimпосле завершения цикла

    РегистрR0, в данном случае, является как бы опорной ячейкой, с помощью содержимым которой задаётся адрес других последовательных ячеек, куда запишется задаваемое значение.

     

    2. Анализ строк от 16 до 38

    Строки листинга представлены в таблице 9, для команд можно составить блок-схему (рис. 19) и соответственно прокомментировать их.

    Таблица 9 – Анализируемый фрагмент листинга

    Таблица 10 – Анализ команд

    № строки

    Мнемоника

    Описание

    Число команд

    Число байт

    КОП (Н-код)

    16 СALL MV

    LСALL ad16

    M([SP])←[PC]+3, PC←0044h (MV)

    1

    3

    12

    17 SETB RS1

    SETB bit

    RS1←1

     

    2

    D2

    18 SETB RS0

    RS0←1

    D2

    20 CLR 0D3h

    CLR bit

    0D3h←0

     

    2

    C2

    22 SETB 0D3h

    SETB bit

    0D3h←1

     

    2

    D2

    23 CLR PSW.4

    CLR bit

    PSW.4←0

     

    2

    C2

    25 NOP

    NOP

    PC←[PC]+1 (нет операции)

    1

    1

    00

    30 MOV R0,#10H

    MOV Rn, #d8

    R0←10h

    8

    2

    78

    31 MOV R1,#18H

    R1←18h

    79

    32 MOV R2,#22H

    R2←22h

    7A

    33 MOV R3,#33H

    R3←33h

    7B

    34 MOV R4,#44H

    R4←44h

    7C

    35 MOV R5,#55H

    R5←55h

    7D

    36 MOV R6,#66H

    R6←66h

    7E

    37 MOV R7,#77H

    R7←77h

    7F

    38 RET

    RET

    PC←[M([SP])] (возврат в осн. пр.)

    1

    1

    22

     

    Команда, расположенная на 16ой строке, перебрасывает программный счетчик на указанное число (на метку MV, т.е. на подпрограмму) и одновременно запоминает в SP адрес следующей ПП после возвращения в основную программу командой RET. С помощью команды «SETB bit» устанавливаются в соответствующие адреса бит регистра PSW единицы (причём, обозначения RS1, 0D3h, PSW.4 и 0D0h.3 – это одинаковые обозначения одного и того же четвертого бита регистра PSW). Команда «CLR bit» устанавливает в соответствующий адрес бита PSWзначение, равное нулю. «MOV Rn, #d8» записывает в соответствующий адрес регистра Rn содержимое, равное значению однобайтной числовой константе #d8. «RET» на 38ой строке возвращает значение программного счетчика PC на соответствующее записанное число в SP, т.е. в данном случае происходит возврат из подпрограммы в основную программу.

    МеткаMVв данной программе равна 0044h;RS1 = PSW.4 = D4h; RS0 = D3h.

    В анализируемом фрагменте программы подпрограмма с именем MV вызывается основной программой четыре раза (командой «LСALL MV»), при этом до вызова MVв регистре PSWзадаются четыре разные комбинации битов RS0 и RS1 (командами очистки битов и установки единицы в них), благодаря чему изменяется номер рабочего (текущего) банка (рисунок 4). Подпрограмма MVзаполняет соответствующие регистры Rn текущего банка приводимым содержимым (#d8). В результате имеем поочерёдное заполнение регистров каждого из четырёх банков (в начале заполнились адреса РПД с 00h по 07h, далее с 18h по 1Fh, после с 10hпо 17hи, в заключении, с 08hпо 0Fh) – рисунки 15, 16, 17 и 18.

    Рис. 14 – Регистр PSWи установка рабочего банка в соответствии с заданными значениями битов RS0 и RS1

     

    Рис. 15 – Результат работы в ADSimпосле первого обращения к подпрограмме

    Блок-схема и программные комментарии для данных команд листинга представлены на рисунке 19.

     

     

    Рис. 16 – Результат работы в ADSimпосле второго обращения к подпрограмме

    Рис. 17 – Результат работы в ADSimпосле третьего обращения к подпрограмме

    Рис. 18 – Результат работы в ADSimпосле всех обращений к подпрограмме

    где 1, 2, 3 и 4 – части основной программы

    Рис. 19 – Программная конструкция

    скачать dle 10.6фильмы бесплатно