Скачать:
Отчет по лабораторной работе №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 |
Непоср. |
Неявная |
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»
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 нет операции. Никакая команда не выполняется.
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 строка задает условие окончания цикла.
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– Результат работы после всех циклов
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 – Программная конструкция