МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра САПР
Звіт про виконання лабораторної роботи №4
на тему: “ Організація програм, підпрограм і способи передачі параметрів в однокристальному МП КР580 ”
з курсу: “ Комп’ютери та мікропроцесорні системи ”
Виконав
студент групи КН-3
Львів - 2006
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;
SPSP-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Н; PC10А2Н,
інакше PC<-0418.
2.7. RET - безумовне повернення з підпрограми.
PCСТЕК; SPSP+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; SPSP-2; PC8n; n=0,1,...,7.
Вміст лічильника команд запам'ятовується у стеку. При цьому, вказівник стека зменшується на 2. У лічильник команд заноситься адреса, яка визначається як добуток n на 8, за яким буде вибиратися подальша команда. Ця однобайтова команда аналогічна трибайтовій команді виклику підпрограми CALL, але має 8 фіксованих адрес переходу на підпрограми:
PAGE \# "'Page: '#''"
RST0 - 00H; RST1 - 08H; RST2 - 10H; RST3 - 18H; RST4 - 20H;
RST5 28H; RST6 - 30H; RST7 - 38H.
Приклад: RST4; Викликати підпрограму з адресою 20H.
2.10. Організація підпрограм.
Виклик підпрограми порушує природний порядок виконання команд. З точки виклику, керування передається першій команді підпрограми, потім звичайно послідовно виконуються команди підпрограми, а по її завершенні керування передається на команду, яка є наступною після команди виклику підпрограми.
На практиці часто одна викликана підпрограма викликає другу, а друга третю і т.д. Для правильної роботи такого механізму вкладень ("гніздування") підпрограм необхідно забезпечити достатню область пам'яті під стек.
Постановка лабораторного завдання
Ввести дані в пам’ять, використовуючи цикл. Проаналізувати третій розряд першого даного на наявність нуля, при наявності такого виконати: (6+5+4+3+2+1), при відсутності виконати: (6-5-4-3-2-1) через цикл. Результат записати в A.
Текст програми
ORG 100H
MVI B,6
MVI D,2
MVI A,20
LXI H,1000H
CYCL1 : MOV M,A
ADD D
INR L
DCR B
JNZ CYCL1
LDA 1000H
ANI 00001000B
JZ C2
LDA 1005H
LXI H,1004H
MVI D,5
CYCL3: MOV B,M
SUB B
DCR L
DCR D
JNZ CYCL3
STA 1009H
JMP EXIT
C2: LDA 1005H
LXI H,1004H
MVI D,5
CYCL2: MOV B,M
ADD B
DCR L
DCR D
JNZ CYCL2
STA 1009H
EXIT: HLT Результати виконання програми
EMBED PBrush
Висновки: виконавши дану лабораторну роботу, я ознайомився з командами передачі управління, виклику та повернення з підпрограм, і реалізував на практиці програму з циклами.