Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
2.23 Mб
Скачать

Теоретичні відомості

Характеристика команд передачі керування. Команди передачі керування, які змінюють природний порядок вибірки і виконання команд програми в однокристальному МП КР580, можуть бути поділені на 4 підгрупи: переходу, виклику підпрограми, повернення з підпрограми, повторного пуску. Команди цієї групи не змінюють стану регістра ознак.

Команди передачі керування бувають двох типів: безумовні і умовні. Безумовні команди виконують певні операції із вмістом програмного лічильника PC, який вказує адресу наступної команди.

Умовні команди спочатку аналізують стан однієї з чотирьох ознак (перевіряють виконання умови) і в залежності від цього змінюють або не змінюють вміст програмного лічильника. Оскільки ознаки встановлюються за результатом попередньої операції, то передача керування залежить від результату операції.

Умови команд передачі керування такі:

NZ-Z=0, результат не нуль;

Z-Z=1, нуль;

NC-CY=0, немає переносу;

C-CY=1, є перенос;

РО-Р=0, непарність;

РЕ-Р=1, парність;

P-S=0, плюс;

M-S=1, мінус.

2. 0. CALL АДРЕСА - виклик підпрограми. ((SP)-1)<-PCH; ((SP)-2)<-PCL SP<-SP-2; PC<-АДРЕСА. Команда безумовного виклику підпрограми. Поточне значення лічильника команд (адреса команди, яка

йде за командою CALL) запам'ятовується в стеку. При цьому,

вказівник стека зменшується на 2. Початкова адреса підпрограми

задана в 2-у і 3-у байтах команди, завантажується в лічильник

команд. Внаслідок цього, після виконання команди CALL наступною виконуватиметься команда, адреса якої вказана у 2-у і 3-у байтах команди CALL.

Приклад: 0142 CALL 1045H

СТЕК<-0415; РС<1045.

Виклик підпрограми з адресою 1045Н.

2. 2. Команди переходів. 2. 2. 1. JMP J-АДРЕС- безумовний перехід.

PC J- АДРЕС- 3-й і 2-й байти команди.

Передати керування команді, адресу якої визначається 3-м і 2-м байтами команди, причому 3-й байт є старшим байтом адреси.

Приклад: JMP С000Н; PC <- С000.

Передати керування команді з адресою С000Н.

2. 2. 2. УМОВА АДРЕСИ - умовний перехід.

Якщо УМОВА, тоді PC <- АДРЕСА.

Якщо умова справджується, тоді передати керування команді, адреса якої визначається 3-м і 2-м байтами команди; в іншому випадку виконується подальша команда програми. З врахуванням умов існують 8 таких команд умовних переходів:

JNZ - перехід, якщо Z=0 (не нуль);

JZ - перехід, якщо Z=l (нуль);

JNC - перехід, якщо CY=0 (немає переносу);

JC - перехід, якщо CY=1 (перенос);

JPO - перехід, якщо Р=0 (непарність);

JPE - перехід, якщо Р=1 (парність);

JM - перехід, якщо 5=0 (мінус);

JP - перехід, якщо 5=1 (плюс).

Під час запису команд переходів на мові Асемблера адреса переходу задається в символьній формі (міткою). Після трансляції програми з мови Асемблера в об'єктний код символьна адреса замінюється двобайтовим числом.

2. 2. 3. PCHL; PC <- HL.

Безумовна передача керування команді, адреса якої визначається вмістом регістрової пари HL. При цьому, вміст регістра Н заноситься у вісім старших розрядів лічильника команд PC, а вміст регістра L - у вісім молодших.

2. 3. Програмування простих розгалужень. Команди переходів використовуються для організації розгалужень і циклів у програмах.

При розгалуженнях у програмі аналізуються деякі умови і в залежності від них або зберігається послідовний порядок виконання програми, або відбувається перехід на іншу частину програми. Індикаторами таких умов в мікропроцесорі виступають ознаки

(прапорці) Розглянемо принцип розгалуження на простому прикладі. У залежності від значення старшого розряду числа В необхідно перейти до двох різних міток програми: PLUS або MINUS. Загальний алгоритм рішення цієї задачі такий:

  1. перевірити значення старшого розряду числа В;

  2. якщо В=0, тоді перейти на програму PLUS;

  3. якщо В=1, тоді перейти на програму MINUS.

Розглянемо декілька варіантів розв'язання цієї задачі.

Оскільки безпосередній аналіз числа в регістрі В неможливий, число з регістра В спочатку пересилається в акумулятор, потім над його вмістом виконується деяка арифметична або логічна операція для того, щоб в залежності від числа встановити деяку ознаку (Z, S, CY, P).

Варіант 1. (З аналізом ознаки Z).

також запам'ятовується у стеку, необхідно слідкувати, щоб до команди повернення RET кількість витягувань дорівнювала кількості занесень у стек.

Для забезпечення достатньої універсальності у специфікації кожної програми необхідно вказати місце знаходження даних, які обробляються підпрограмою, і результату, отриманого при її виконанні, а також регістри, які використовуються підпрограмою, вміст яких змінює підпрограма.

2. 4. Програмування циклів. Цикл у програмі-фундлментальна властивість програми ЕОМ- це засіб, який дозволяє за допомогою однієї і тієї ж послідовності команд виконати деякі дії багато разів. Загалом, цикл представляє собою групу команд, виконання яких багатократно повторюється за рахунок того, що в цій групі є команда, яка повертає керування знову на першу команду в групі команд, поки не виконається певна умова закінчення циклу.

Програмування циклів покажемо на прикладі обчислення суми ряду N чисел, які розміщені в пам'яті з певною адресою.

Для розв'язання задачі необхідно послідовно додавати кожне число ряду до поточної часткової суми. Можна написати програму, в якій для додавання кожного числа буде використовуватись окрема послідовність команд. Однак доцільно написати програму у вигляді циклу, який підраховує кількість сумованих чисел. Як лічильник циклу можна використати регістр, початкове значення якого можна встановити за межами циклу, а при кожній ітерації циклу

модифікувати і перевіряти (тестувати) його значення. У кожній ітерації необхідно забезпечити вибір подальшого числа.

У циклічній програмі можна виділити такі частини: ініціалізуючу, яка задає початкові дані і число ітерацій, основну роботу, модифікуючу і тест кінця циклу. Приклад організації програмного циклу:

MVI B, N ; завантаження в регістр В числа ітерацій

CYCL: ; основна частина

DCR В; підрахунок ітерацій

JNZ CYCL; перехід на повтор, якщо не кінець циклу

HLT ; кінець

У прикладних програмах часто необхідно декілька разів виконувати певну кількість послідовностей команд над різними вхідними даними. У цих випадках зручно послідовність команд, яка повторюється, включити в об'єктну програму лише 1 раз, а в потрібних точках спеціальними командами викликати її для виконання з поточними даними. Така послідовність команд (програма в програмі) називається підпрограмою, або процедурою.

Застосування підпрограм має такі переваги:

- складну програму можна розділити на невеликі порівняно прості в управлінні модулі, які можуть розроблятися декількома програмістами з відповідним скороченням термінів проектування програмного забезпечення;

- підпрограми скорочують довжину прикладних програм, що

забезпечує економію програмної пам'яті;

- відлагоджені підпрограми типових обчислень можна зберігати в бібліотеках і використовувати в нових розробках.

Команди виклику і повернення з підпрограм належать до групи команд керування, які змінюють послідовний порядок виконання команд програми. Стани прапорців не змінюються.