МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра САПР
ЗВІТ
до лабораторної роботи №4
з дисципліни:
“Архітектура комп’ютерів ”
Лабораторна робота № 4
“Організація програм, підпрограм і способи передачі параметрів в однокристальному МП КР580 ”
1. МЕТА РОБОТИ
Вивчити команди переходів, виклику і повернення із підпрограми, способи передачі параметрів і отримати практичні навики програмування з використанням підпрограм.
2. КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ
2.1. Характеристика команд передачі керування. Команди передачі керування, які змінюють природний порядок вибірки і виконання команд програми в однокристальному МП КР580, можуть бути поділені на 4 підгрупи: переходу, виклику підпрограми,повернення з підпрограми, повторного пуску. Команди цієї групи не змінюють стану регістра ознак.
Команди передачі керування бувають двох типів: безумовні і умовні. Безумовні команди виконують певні операції із вмістом програмного лічильника РС, який вказує адресу наступної команди.
Умовні команди спочатку аналізують стан однієї з чотирьох ознак (перевіряють виконання умови) і в залежності від цього змінюють або не змінюють вміст програмного лічильника. Оскільки ознаки встановлю-ються за результатом попередньої операції, то передача керування залежить від результату операції.
Умови команд передачі керування такі:
NZ-Z=0, результат не нуль;
Z-Z=1, нуль;
NC-CY=0, немає переносу;
C-CY=1, є перенос;
PO-P=0, непарність;
PE-P=1, парність;
P-S=0, плюс;
M-S=1, мінус.
2.2. Команди переходів.
2.2.1.JMP J- АДРЕС- безумовний перехід.
PC J- АДРЕС- 3-й і 2-й байти команди.
Передати керування команді, адресу якої визначається 3-м і 2-м байтами команди, причому 3-й байт є старшим байтом адреси.
Приклад: JMP C000H; PC ( C000.
Передати керування команді з адресою C000H.
2.2.2. УМОВА АДРЕСИ - умовний перехід.
Якщо УМОВА, тоді PC ( АДРЕСА.
Якщо умова справджується, тоді передати керування команді, адреса якої визначається 3-м і 2-м байтами команди; в іншому випадку виконується подальша команда програми. З врахуванням умов існують 8 таких команд умовних переходів:
JNZ - перехід, якщо Z=0 (не нуль);
JZ - перехід, якщо Z=1 (нуль);
JNC - перехід, якщо CY=0 (немає переносу);
JC - перехід, якщо CY=1 (перенос);
JPO - перехід, якщо P=0 (непарність);
JPE - перехід, якщо P=1 (парність);
JM - перехід, якщо S=0 (мінус);
JP - перехід, якщо S=1 (плюс).
Під час запису команд переходів на мові Асемблера адреса переходу задається в символьній формі (міткою). Після трансляції програми з мови Асемблера в об'єктний код символьна адреса замінюється двобайтовим числом.
2.2.3. PCHL; PC ( HL.
Безумовна передача керування команді, адреса якої визначається вмістом регістрової пари HL. При цьому, вміст регістра Н заноситься у вісім старших розрядів лічильника команд РС, а вміст регістра L - у вісім молодших.
2.3. Програмування простих розгалужень. Команди переходів використовуються для організації розгалужень і циклів у програмах.
При розгалуженнях у програмі аналізуються деякі умови і в залежності від них або зберігається послідовний порядок виконання програми, або відбувається перехід на іншу частину програми. Індикаторами таких умов в мікропроцесорі виступають ознаки (прапорці).
Розглянемо принцип розгалуження на простому прикладі. У залежності від значення старшого розряду числа В необхідно перейти до двох різних точок програми: PLUS або MINUS.
Загальний алгоритм рішення цієї задачі такий:
- перевірити значення старшого розряду числа В;
- якщо В=0, тоді перейти на програму PLUS;
- якщо В=1, тоді перейти на програму MINUS.
Розглянемо декілька варіантів розв'язання цієї задачі.
Оскільки безпосередній аналіз числа в регістрі В неможливий, число з регістра В спочатку пересилається в акумулятор, потім над його вмістом виконується деяка арифметична або логічна операція для того, щоб в залежності від числа встановити деяку ознаку (Z,S,CY,P).
Варіант 1. (З аналізом ознаки Z).
також запам'ятовується у стеку, необхідно слідкувати, щоб до команди повернення RET кількість витягувань дорівнювала кількості занесень у стек.
Для забезпечення достатньої універсальності у специфікації кожної програми необхідно вказати місце знаходження даних, які обробляються підпрограмою, і результату, отриманого при її виконанні, а також регістри, які використовуються підпрограмою, вміст яких змінює підпрограма.
Правильно складені підпрограми не повинні міняти вміст регістрів мікропроцесора, крім регістрів, які використовуються для початкових даних і результату. Для цього на початку підпрограми вміст регістрів, які додатково використовуються, запам'ятовуються у стеку, а в кінці підпрограми відновлюються.
Якщо, наприклад, деяка підпрограма MOVE використовує регістри А,В і С, тоді їх запам'ятовування і відновлення здійснюється так :
MOVE : PUSH PSW ; запам'ятовування регістрів А і F
PUSH B ; запам'ятовування регістрів B i C
...
POP B ; відновлення регістрів B i C
POP PSW ; відновлення регістрів A i F
RET ; повернення з підпрограми
Порядок витягування даних із стека зворотний до порядку їх занесення у стек. Враховуючи, що адреса повернення підпрограми
MOV A,B ;передати В в А для аналізу
ANI 80H ;встановити ознаку Z
JNZ MINUS
JMP PLUS
MINUS:
.....
PLUS: .....
Варіант 2. (з аналізом ознаки S).
MOV A,B
ANA A ;встановити ознаку S
JP PLUS
MINUS: .....
PLUS: .....
Варіант 3. (З аналізом ознаки CY).
MOV A,B
RLC ;встановити ознаку CY
JNC PLUS
MINUS: .....
PLUS: .....
Варіант 4. (з аналізом ознаки P).
MOV A,B
ANI 1000 0000 B ; встановити ознаку P
JPO PLUS
MINUS: .....
PLUS: .....
Команди виклику і повернення з підпрограм належать до групи команд керування, які змінюють послідовний порядок виконання команд програми. Стани прапорців не змінюються.
2.4. Програмування циклів. Цикл у програмі- фундаментальна властивість програми ЕОМ- це засіб, який дозволяє за допомогою однієї і тієї ж послідовності команд виконати деякі дії багато разів. Загалом, цикл представляє собою групу команд, виконання яких багатократно повторюється за рахунок того, що в цій групі є команда, яка повертає керування знову на першу команду в групі команд, поки не виконається певна умова закінчення циклу.
Програмування циклів покажемо на прикладі обчислення суми ряду N чисел, які розміщені в пам'яті з певною адресою.
Для розв'язання задачі необхідно послідовно додавати кожне число ряду до поточної часткової суми. Можна написати програму, в якій для додавання кожного числа буде використовуватись окрема послідовність команд. Однак доцільно написати програму у вигляді циклу, який підраховує кількість сумованих чисел. Як лічильник циклу можна використати регістр, початкове значення якого можна встановити за межами циклу, а при кожній ітерації циклу модифікувати і перевіряти (тестувати) його значення. У кожній ітерації необхідно забезпечити вибір подальшого числа.
У циклічній програмі можна виділити такі частини: ініціалізуючу, яка задає початкові дані і число ітерацій, основну роботу, модифікуючу і тест кінця циклу.
Приклад організації програмного циклу:
MVI B,N ; завантаження в регістр B числа ітерацій
CYCL: ; основна частина
.....
DCR B ; підрахунок ітерацій
JNZ CYCL ; перехід на повтор, якщо не кінець циклу
HLT ; кінець
У прикладних програмах часто необхідно декілька разів виконувати певну кількість послідовностей команд над різними вхідними даними. У цих випадках зручно послідовність команд, яка повторюється, включити в об'єктну програму лише 1 раз, а в потрібних точках спеціальними командами викликати її для виконання з поточними даними. Така послідовність команд (програма в програмі) називається підпрограмою, або процедурою.
Застосування підпрограм має такі переваги:
- складну програму можна розділити на невеликі порівняно прості в уп- равлінні модулі, які можуть розроблятися декількома програмістами з відповідним скороченням термінів проектування програмного забезпечення;
- підпрограми скорочують довжину прикладних програм, що забезпечує економію програмної пам'яті;
- відлагоджені підпрограми типових обчислень можна зберігати в бібліотеках і використовувати в нових розробках.
2.5. CALL AДРЕСА - виклик підпрограми.
((SP)-1)(PCH; ((SP)-2)(PCL;
SP(SP-2; PC(АДРЕСА.
Команда безумовного виклику підпрограми.
Поточне значення лічильника команд (адреса команди, яка йде за командою CALL) запам'ятовується в стеку. При цьому, вказівник стека зменшується на 2. Початкова адреса підпрограми, задана в 2-у і 3-у байтах команди, завантажується в лічильник команд. Внаслідок цього, після виконання команди CALL наступною виконуватиметься команда, адреса якої вказана у 2-у і 3-у байтах команди CALL.
Приклад : 0142 CALL 1045H
СТЕК<-0415; PC<1045.
Виклик підпрограми з адресою 1045Н.
2.6. С УМОВА АДРЕСИ - умовний виклик підпрограми.
Якщо УМОВА, тоді СТЕК<-PC, PC<-АДРЕСА.
Якщо умова істинна, тоді виконуються дії, аналогічні команді CALL. У протилежному випадку - продовжується виконання основної програми. Як умови використовуються прапорці Z,CY,P,S. Із врахуванням умов можливі вісім таких команд умовного виклику підпрограми:
CZ - виклик, якщо Z=1 (нуль);
CNZ - виклик, якщо Z=0 (не нуль);
CC - виклик, якщо C=1 (перенос);
CNC - виклик, якщо CY=O (нема переносу);
CPO - виклик, якщо P=O (непарність);
CPЕ - виклик, якщо P=1 (парність);
CP - виклик, якщо S=-0 (плюс);
CМ - виклик, якщо S=1 (мінус).
Приклад : 0415 CNZ 10A2 H
Якщо Z=0, тоді СТЕК(0418Н; PC(10А2Н,
інакше PC<-0418.
2.7. RET - безумовне повернення з підпрограми.
PC(СТЕК; SP(SP+2.
Адреса повернення в основну програму вибирається із стека і заноситься в лічильник команд, а вміст вказівника стека SP збільшується на 2. Вважається, що адреса повернення попередньо була занесена у стек командою CALL, або іншим шляхом.
2.8. R УМОВА - умовне повернення з підпрограми.
Якщо УМОВА, тоді PC(СТЕК.
Якщо умова виконується, тоді виконуються дії, аналогічні команді RET; у протилежному випадку - наступна команда. Як умови перевірки використовуються прапорці Z,CY,P i S. З врахуванням умов можливі вісім таких команд умовного повернення з підпрограми:
RZ - повернення, якщо Z=1 (нуль);
RNZ - повернення, якщо Z=0 (не нуль);
RC - повернення, якщо C=1 (перенос);
RNC - повернення, якщо CY=O (нема переносу);
RPO - повернення, якщо P=O (непарність);
2.9. RSTn - повторний запуск.
СТЕК(PC; SP(SP-2; PC(8n; n=0,1,...,7.
Вміст лічильника команд запам'ятовується у стеку. При цьому, вказівник стека зменшується на 2. У лічильник команд заноситься адреса, яка визначається як добуток n на 8, за яким буде вибиратися подальша команда. Ця однобайтова команда аналогічна трибайтовій команді виклику підпрограми CALL, але має 8 фіксованих адрес переходу на підпрограми:
RST0 - 00H; RST1 - 08H; RST2 - 10H; RST3 - 18H; RST4 - 20H;
RST5 28H; RST6 - 30H; RST7 - 38H.
Приклад: RST4; Викликати підпрограму з адресою 20H.
2.10. Організація підпрограм.
Виклик підпрограми порушує природний порядок виконання команд. З точки виклику, керування передається першій команді підпрограми, потім звичайно послідовно виконуються команди підпрограми, а по її завершенні керування передається на команду, яка є наступною після команди виклику підпрограми.
На практиці часто одна викликана підпрограма викликає другу, а друга третю і т.д. Для правильної роботи такого механізму вкладень ("гніздування") підпрограм необхідно забезпечити достатню область пам'яті під стек.
Індивідуальне завдання
Варіант 16
Ввести в пам'ять дані 137,136…132.Організувавши цикл проаналізувати на парність 3-тє дане. Якщо воно парне то над парою 5-ого і 6-ого циклу виконати логічну операцію або, якщо ні-логічну операцію виключне або. Результат записати в пару Н.
Текст програми
org 100h
mvi b,6
mvi c,1
lxi h,200h
mvi a,137
CYCL:
mov m,a
sub c ;formyjemo nastypne 4uslo
inr l ;formyjemo nastypny adresy komirku
dcr b ;zmenwyjemo li4ulnuk
jnz CYCL
lda 202h ;zavantagyjemo v akymylator 3-te 4uslo
jpe m1 ;jakwo parne to mitka m1
jpo m2 ;jakwo neparne to mitka m2
m1: call proc1 ;vukluk procedyru proc1
jmp exit
m2: call proc2 ;vukluk procedyru proc1
exit:hlt
proc1:
lda 204h ;zavantagyjemo v akymylator 5-te 4uslo
mov c,a
lda 205h ;zavantagyjemo v akymylator 6-te 4uslo
ora c ; logi4ne abo
mov h,a ;zapusyjemo rezyltat v registrovy pary h
ret
proc2:
lda 204h ;zavantagyjemo v akymylator 5-te 4uslo
mov c,a
lda 205h ;zavantagyjemo v akymylator 6-te 4uslo
xra c ;vukly4ne abo
mov h,a ;zapusyjemo rezyltat v registrovy pary h
ret
Результати виконання програми
Адреси
Дані
Коментарі
DEC
HEX
DEC
HEX
BIN
512
513
514
515
516
517
200
201
202
203
204
205
137
136
135
134
133
132
89
88
87
86
85
84
10001001
10001000
10000111
10000110
10000101
10000100
1-ше число
2-ше число
3-ше число
4-ше число
5-ше число
6-ше число
Карта пам’яті
Висновок: на цій лабораторній роботі я вивчив команди переходів, виклику і повернення із підпрограми, способи передачі параметрів і отримав практичні навики програмування з використанням підпрограм.