Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практ 5-1-1.doc
Скачиваний:
0
Добавлен:
21.11.2019
Размер:
124.42 Кб
Скачать

8

Міністерство транспорту та зв’язку україни львівський коледж державного університету інформаційно-комунікаційних технологій

Навчальна дисципліна: Обчислювальна техніка та мікропроцесори

Лабораторія: обчислювальної техніки, мікропроцесорних систем і мереж

Спеціальність 5.05090308 Монтаж, обслуговування

та експлуатація апаратних засобів інформатизації

РОЗГЛЯНУТО

на засіданні циклової комісії фундаментальних дисциплін

Протокол №

від ”___”______2009 р.

Голова комісії_________О.Лабаз

ЗАТВЕРДЖУЮ

Заступник директора з НВР

____________Я.Плешівський

„___”________2009 р.

Інструкція до практичної роботи № 5 складання циклічної програми

Склав викладач:

Гамаль М.І.


Львів – 2010

1.МЕТА РОБОТИ: вивчити прийоми та здобути практичні навики складання циклічних програм з використанням системи команд МП КР580ВМ80.

2.Література:

2.1. Ю.І. Якименко, Т.О.Терещенко, Є.І. Сокол та ін. Мікропроцесорна техніка: Підручник. – Київ. – ІВЦ «Видавництво «Політехніка». – 2004. – 439 с.

2.2. В.І. Бойко, А.М. Гурій, В.Я. Жуйков та ін. Схемотехніка електронних систем: У 3 кн. Кн.2. Цифрова схемотехніка: Підручник. – Київ. – «Вища школа». 2004. – 423 с.

2.3. В.І. Бойко, А.М. Гурій, В.Я. Жуйков та ін. Схемотехніка електронних систем: У 3 кн. Кн.3. Мікропроцесори та мікроконтролери: Підручник. – Київ. – «Вища школа». 2004. – 42

2.4. Б.А. Калабеков, И.А. Мамзелев. Цифровые устройства и микропроцессорные системы.- Москва –Горячая линия – Телеком. – 2003. – 336с.

2.5. Інструкція до даної практичної роботи.

3.Завдання:

3.1.Використовуючи блок-схему алгоритму, команди i8086 умовних та безумовних Переходів скласти програму обрахунку «N - ого» члена арифметичної прогресії:

Де:

- a0-значення першого доданка;

- d - фіксована різниця між попереднім та наступним членами арифметичної прогресії.

Для 1-го варіанта

Для 2-го варіанта

Знайти значення 5-го члена прогресії

Знайти значення 4-го члена прогресії

a0 = 2

a0 = 5

d = 6

d = 10

3.2.В коментарях детально пояснити хід виконання програми.

Рис.1.Блок-схема алгоритму

4. Методичні вказівки.

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

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

Більшість арифметичних і логічних команд впливають на регістр стану процесора (або прапорці - flags). У цьому регістрі 16 біт. Кожен біт називається прапорцем і може приймати значення 1 або 0.

Carry Flag (CF) - перенос - цей прапор установлюється в 1, коли є беззнакове переповнення. Наприклад, якщо ви збільшили байт 255 + 1 (результат не міститься в діапазоні 0...255). Якщо переповнення не відбувається, цей прапор установлений в 0.

Zero Flag (ZF) - нуль - установлюється в 1, якщо результат дорівнює нулю. Якщо результат не нульовий, то цей прапор установлюється в 0.

Sіgn Flag (SF) - знак - установлений в 1, якщо результат - негативне число. Якщо результат позитивний, то цей прапор установлюється в 0. Звичайно цей прапор приймає значення старшого значущого біта.

Overflow Flag (OF) - переповнення - установлюється в 1, якщо трапляється переповнення при арифметичних операціях зі знаком. Наприклад, якщо ви збільшили байт 100 + 50 (результат не міститься в діапазоні -128...127).

Parіty Flag (PF) - контроль із - цей прапор установлюється в 1, якщо в молодших 8-бітових даних парне число. Якщо число непарне, то цей біт установлений в 0. Навіть якщо результат - це слово, то з тільки 8 молодших біт!

Auxіlіary Flag (AF) - зовнішній перенос - установлений в 1, якщо трапилося переповнення без знака молодших 4-х битов (тобто перенос із 3-го біта).

Іnterrupt enable Flag (ІF) - переривання - якщо цей прапор установлений в 1, то процесор реагує на переривання від зовнішніх пристроїв.

Dіrectіon Flag (DF) - напрямок - цей прапор використається деякими командами для обробки ланцюжка даних. Якщо прапор установлений в 0 - обробка відбувається в прямому напрямку, якщо 1 - у зворотному.

Команди CMP й TEST впливають тільки на прапорці й не записують результат (ця команда використовується для ухвалення рішення під час виконання програми).

Ці команди впливають тільки на прапорці: CF, ZF, SF, OF, PF, AF.

Якщо потрібно порівняти два числових значення, то використовують команду CMP (вона робить те ж саме, що й команда SUB (вирахування), але не зберігає результат, а впливає тільки на прапорці.

наприклад: потрібно порівняти числа 5 й 2,

5 - 2 = 3

результат - НЕ НУЛЬ (Прапор Нуля - Zero Flag (ZF) установлений в 0).

Інший приклад: потрібно порівняти 7 й 7,

7 - 7 = 0

результат - НУЛЬ! (Прапорець Нуля - Zero Flag (ZF) встановлений в 1 і команди JZ або JE виконають перехід).

Керування ходом програми - дуже важлива річ. Це те, що змушує програму приймати рішення, залежно від деяких умов.

Безумовні Переходи Основна команда, що передає керування в іншу крапку програми - це JMP.

Основний синтаксис команди JMP:

JMP мітка

Щоб оголосити мітку у вашій програмі, просто надрукуйте її ім'я й наприкінці додайте двокрапку ":". Мітка може бути будь-якою комбінацією символів, але не повинна починатися із цифри. Наприклад, нижче представлені три правильних оголошення міток:

label1:

label2:

a:

Мітка може бути оголошена на окремому рядку або перед будь-якою іншою командою, наприклад: x1:

MOV AX, 1 x2: MOV AX, 2

Приклад команды JMP:

ORG 100h

MOV AX, 5 ; записати в AX число 5.

MOV BX, 2 ; записати у ВX число 5.

JMP calc ; перейти до 'calc'.

back: JMP stop ; перейти до 'stop'.

calc:

ADD AX, BX ; додати BX до AX.

JMP back ; перейти до 'back'.

stop:

RET ; повернутися в операційну систему.

END ; директива для припинення компіляції.

Команда JMP може передавати керування іншій ділянці програми, що може перебувати як після цієї команди, так і перед нею. Цей перехід може бути здійснений у межах поточного сегмента коду (65,535 байтів).

Короткі умовні переходи

Подібно до команди JMP, що виконує безумовний перехід, існують команди, які здійснюють умовний перехід (перехід, що здійснюється тільки в тому випадку, якщо виконується певна умова). Ці команди розділяються на три групи. Перша група тільки перевіряє окремий прапорець, друга - порівнює числа зі знаком, третя - порівнює числа без знака.

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

  • будь-яка команда, яка змінює стан арифметичних прапорців;

  • команда порівняння cmp, яка порівнює значення двох операндів;

Команда cmp має наступний синтаксис:

cmp операнд_1, операнд_2

(compare) – порівнює два операнди і за результатами порівняння встановлює прапорці.

Команди Переходу, що перевіряють одиночний прапор

Команда

Опис

Умова

Обернена команда

JZ , JE

Перехід, якщо " = 0 " ("нуль"). Якщо порівнювані значення однакові, то ZF = 1 і перехід виконається

 ZF = 1

JNZ, JNE

JC , JB, JNAE

Перехід, якщо є перенесення

 CF = 1

JNC, JNB, JAE

JS

Перехід по знаку.

 SF = 1

JNS

JO

Перехід по переповненні

 OF = 1

JNO

JPE, JP

Перехід, якщопаритет.

 PF = 1

JPO

JNZ , JNE

Перехід якщо р-тат " не = 0"

 ZF = 0

JZ, JE

JNC , JNB, JAE

Перехід, якщо немає перенесення

 CF = 0

JC, JB, JNAE

JNS

Перехід, яекщо немає знака.

 SF = 0

JS

JNO

Перехід, якщо немає переповнення.

 OF = 0

JO

JPO, JNP

Перехід, якщо результат непарний

 PF = 0

JPE, JP

Існують команди, які виконують однакові дії. Це нормально. Вони навіть асемблюються в однаковий машинний код, тому буде непогано, якщо ви запам'ятаєте, що при компіляції команди JE, після дизасемблювання ви одержите її як: JZ.

Різні імена використовуються для того, щоб робити програми більш легкими для розуміння й кодування.

Команди Переходу для чисел зі знаками

Команда

Опис

Умова

Обернена команда

JE , JZ

Перехід, якщо "нуль".

ZF = 1

JNE, JNZ

JNE , JNZ

Перехід, якщо "не нуль".

ZF = 0

JE, JZ

JG , JNLE

Перехід, якщо "більше" (>). Перехід, якщо "не меньше чи однаково" (not <=).

ZF = 0 SF = OF

JNG, JLE

JL , JNGE

Перехід, якщо "меньше" (<). Перехід, якщо "не більше чи однаково" (not >=).

SF <> OF

JNL, JGE

JGE , JNL

Перехід, якщо "більше чи однаково" (>=). Перехід, якщо "не меньше" (not <).

SF = OF

JNGE, JL

JLE , JNG

Перехід, якщо "меньше чи однаково" (<=). Перехід, якщо "не більше" (not >).

ZF = 1 SF <> OF

JNLE, JG

<> - цей знак означає "не дорівнює".

Команди Переходу для чисел без знаків

Команда

Опис

Умова

Обернена команда

JE , JZ

Перехід, якщо "нуль".

ZF = 1

JNE, JNZ

JNE , JNZ

Перехід, якщо "не нуль".

ZF = 0

JE, JZ

JA , JNBE

Перехід, якщо "більше" (>). Перехід, якщо "не меньше чи однаково" (not <=).

CF = 0 and ZF = 0

JNA, JBE

JB , JNAE, JC

Перехід, якщо "нижче" (<). Перехід, якщо "не більше чи однаково" (not >=). Перехід по переносу.

CF = 1

JNB, JAE, JNC

JAE , JNB, JNC

Перехід, якщо "більше чи однаково" (>=). Перехід, якщо "не меньше" (not <). Перехід, якщо "немає перенесення".

CF = 0

JNAE, JB

JBE , JNA

Перехід, якщо "меньше чи однаково" (<=). Перехід, якщо "не більше" (not >).

CF = 1 or ZF = 1

JNBE, JA

Приклад використання команди CMP й умовного перехіду:

іnclude emu8086.іnc

ORG 100h

MOV AL, 25 ; записати в AL число 25.

MOV BL, 10 ; записати в BL число 10.

CMP AL, BL ; зрівняти AL з BL.

JE equal ; якщо AL = BL (ZF = 1), те перейти до мітки equal.

PUTC 'N' ; інакше, якщо AL <> BL, те продовжити виконання

JMP stop ; програми - надрукувати 'N' і перейти до мітки stop.

equal: ; якщо програма на цій мітці,

PUTC 'Y' ; те AL = BL, тому виводимо на екран 'Y'.

stop:

RET ; сюди приходимо в кожному разі

END

Всі умовні Переходи мають одне серйозне обмеження - на відміну від команди JMP, вони можуть виконувати перехід тільки на 127 байтів уперед або на 128 байтів назад (врахуйте, що більші команди асемблюються в 3 і більше байтів).

Можна легко перебороти це обмеження, використовуючи наступний метод:

  1. Взяти зворотну команду з наведеної вище таблиці й виконати перехід до мітки label_x.

  2. Використати команду JMP для Переходу до потрібної ділянки програми.

  3. Визначити мітку label_x: тільки після команди JMP.

label_x: - може бути будь-яким ім'ям.

Інакший метод, являє собою застосування безпосереднього значення (адреси) замість мітки. Якщо безпосереднє значення починається із символу '$', то виконується відносний перехід - перехід щодо поточної адреси. Компілятор обчислює команду, що перебуває по заданому зсуві, і виконує перехід безпосередньо до неї.

Наприклад:

ORG 100h

; безумовний перехід уперед:

; пропускаємо наступні два байти,

JMP $2

a DB 3 ; 1 байт.

b DB 4 ; 1 байт.

; перехід назад на 7 байтів, якщо BL <> 0:

; (Команда JMP займає 2 байти)

MOV BL,9

DEC BL ; 2 байти.

CMP BL, 0 ; 3 байти.

JNE $-7

RET

END

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]