Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Кафедра САПР

Інформація про роботу

Рік:
2007
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Архітектура комп'ютерів

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” Кафедра САПР ЗВІТ до лабораторної роботи №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-ше число  Карта пам’яті Висновок: на цій лабораторній роботі я вивчив команди переходів, виклику і повернення із підпрограми, способи передачі параметрів і отримав практичні навики програмування з використанням підпрограм.
Антиботан аватар за замовчуванням

28.01.2013 14:01-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!