МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ
ім. Ю. ФЕДЬКОВИЧА
ФІЗИЧНИЙ ФАКУЛЬТЕТ
КАФЕДРА ЕОМ
НА МОВІ АСЕМБЕЛЕРА
Курсова робота з курсу “Системне програмування”
Студент 3-го курсу
Беднарський І.Я.
Керівник
Федорук В.І.
1999
ЗМІСТ
ЧАСТИНА і
Вступ...................................................................................................................................................................... 4
Глава 1. Структурні оператори і структури логіки керування.......................... 5
умови у структурах логіки керування................................................................................. 6
Глава 2. Структура if................................................................................................................................. 5
структура if з чаСткою else............................................................................................................ 9
функціонування структури if...................................................................................................... 9
команди, що генеруються операторами $if-$endif................................................................ 10
команди, що генеруються операторами $if-$else-$endif................................................... 10
варіанти операнду................................................................................................................................. 11
операції and i or...................................................................................................................................... 11
дальні передачі управління................................................................................................................ 13
глава 3. структура do............................................................................................................................... 13
структура do until................................................................................................................................. 14
структура do while................................................................................................................................ 15
структура do complex.......................................................................................................................... 16
додаткові операнди.............................................................................................................................. 16
параметр loop........................................................................................................................................... 17
операції and и or..................................................................................................................................... 18
глава 4. структура search.................................................................................................................... 18
структура search until...................................................................................................................... 19
структура search while..................................................................................................................... 20
структура search complex.............................................................................................................. 21
додаткові операнди.............................................................................................................................. 21
глава 5. обмеження на використання умов ncxz і cxz............................................ 23
глава 6. упорядкування структурованих програм...................................................... 23
процедура...................................................................................................................................................... 23
розробка структурованих програм по методу “зверху вниз”............................................ 24
використання програми salut..................................................................................................... 25
пакет команд для програми salut................................................................................................. 25
переформатування вихідних текстів програмою salut......................................... 26
переформатування неструктурованих програм...................................................................... 26
ЧАСТИНА іі
ЛІСТИНГ ПРОГРАМИ ДРУКУ ДИСКОВОГО asCII ФАЙЛУ............................................................ 28
список використаної літератури................................................................................................ 32
СТРУКТУРНЕ ПРОГРАМУВАННЯ
Одним із найцінніших якостей Макроасемблера версії 2 є те, що він дозволяє вам писати структуровані програми на мові асемблера. Під «структурованими» ми розуміємо програми, що містять оператори високого рівня і виконуючі цикли, умовні передачі керування та інші задачі керування, що при відсутності оператора зажадали б декількох команд на мові асемблера. У дійсноcті структурні оператори забезпечують ті ж види складаних операцій, що і мова Бейсік. Наприклад, одне із сімейств структурних операторів (або логічних структур) виконує ті ж дії, що й оператор IF-THEN-NEXT.
Але структурне програмування зовсім не зводиться до простої заміни команд на структурні оператори. Воно, скоріше, являє собою філософію розробки програмного забезпечення, в основу якої покладені такі елементи:
- розробка за методу «зверху вниз». (нагадаємо, що при цьому методі розробка програм починається з коментарів, до яких послідовними кроками додаються все нові і нові деталі).
- Програмування без міток.
- Програмування без оператора GOTO (тобто без команд умовної або безумовної передачі керування).
- Запис тексту програми з відступами, що показують рівень вкладеності логічних структур.
- У достатній мірі лістинги, що самодокументуються.
Все це призначено для підвищення якості програм на мові асемблера. Якісні поліпшення повинні бути явними в наступних аспектах:
- розробник повинен краще розуміти логіку програми;
- лістинг повинен бути зрозумілий тим, хто намагається внести власні зміни в чужі програми;
- оскільки програма більш зрозуміла, у ній повинно бути менше помилок;
- підвищується гнучкість і полегшується супровід програми. Це означає, що програма виявиться більш стійкою до зміни зовнішніх ситуацій, ніж це передбачено в проекті, і наступні модифікації органічно ввійдуть в існуючу структуру програми і не внесуть нових помилок;
- програма повинна бути зручною для читання, це допоможе зробити лістинг кращою документацією програми.
Можливість користуватися структурними операторами забезпечується програмою SALUT (Structured Language Utility - сервісна програма структурного програмування на мові асемблера). Ви повинні набрати текст своєї програми, а потім викликати програму SALUT для перетворення структурних операторів у стандартні команди на мові асемблера. Після цього треба як завжди відтранслювати програму і завантажити її.
У цій главі описані структурні оператори програми SALUT і приведені приклади і вказівки по їхньому застосуванню. У ній також обговорюються кроки, що треба виконати для трансляції і форматування структурованих програм.
Існує більше десяти різних структурних операторів, але ними треба користуватися в строго визначених сполученнях, що у посібнику з Макроасемблеру називаються структурами логіки керування. Нижче визначені вісім різних структур логіки управління, але ми можемо розбити їх на три групи: структура IF (якщо) -- реалізує прийняття рішень Вона змушує мікропроцесор виконувати або пропускати групу команд у залежності від того, задовольняється задана умова чи ні. Структура IF аналогічна оператору IF-THEN на мові Бейсік.
- Структура DO (виконати), що забезпечує повторення групи команд. Вона змушує мікропроцесор циклічно виконувати одну або декілька груп команд, поки не задовольниться задана умова. Структура DO аналогічна операторам FOR-NEXT у мові Бейсік.
- Структура SEARCH (шукати) також пов'язана з повторенням команд, але використовується в тому випадку, коли вам необхідно знати, яка саме з декількох умов привела до завершення виконання циклу. Структура SEARCH виконує свій блок команд для кожної умови виходу з циклу.
У табл. 1 показані умови, якими можна скористатися для керування структурами IF, DO і SEARCH.
Структура IF змушує мікропроцесор виконувати або пропускати групу команд в залежності від того, істинна чи хибна задана умова. Її основна форма:
$IF умова
А
$ENDIF
де умова -- умова що перевіряється (одна з тих, що перераховані в табл. 1), а А -- блок команд. Якщо умова істинна, то мікропроцесор виконує ці команди, у протилежному випадку він переходить до оператора, що слідує безпосередньо за оператором $ENDIF. (звернемо увагу, що цей порядок дій протилежний до того, по якому слідують команди умовної передачі керування: останні пропускають команди, якщо умова істинна). На мал. 1, а показана блок-схема структури IF.
Наприклад, для перетворення числа, що знаходиться в регістрі BX на його абсолютне значення ми повинні скористатися операторами
CMP BX, 0 ;Від’ємне значення?
$IF L
NEG BX ;Якщо так, змінити знак
$ENDIF
Таблиця 1. Умови в структурах логіки управління
Умова | Опис | Істинно, якщо … |
А | Above – вище | CF=0 і ZF=0 |
AE | Above or Equal - вище або рівне | CF=0 |
B | Below – нижче | CF=1 |
BE | Below or Equal - нижче або рівне | CF=1 або ZF=1 |
C | Carry – перенос | CF=1 |
CXZ | CX Register is Zero - регістр СХ рівний нулю | (CX)=1 |
E | Equal – рівне | ZF=1 |
*G | Greater – більше | ZF=0 і SF=OF |
*GE | Greater or Equal - більше або рівне | ZF=OF |
*L | Less – менше | SF<>OF |
*LE | Less or Equal - менше або рівне | ZF=1 або SF<>OF |
NA | Not Above - не вище | CF=1 або ZF=1 |
NAE | Not Above nor Equal - не вище або рівне | CF=1 |
NB | Not Below - не нижче | CF=0 |
NBE | Not Below nor Equal - не нижче або рівне | CF=0 i ZF=0 |
NC | No Carry - німа переносу | CF=0 |
NCXZ | CX Register Not Zero - регістр СХ не нуль | (CX)<>0 |
NE | Not Equal - не рівне | ZF=0 |
*NG | Not Greater -- не більше | ZF=1 або SF<>OF |
*NGE | Not Greater nor Equal - не більше, не рівне | SF<>OF |
*NL | Not Less - не менше | SF=OF |
*NLE | Not Less nor Equal -- не менше, не рівне | ZF=O i SF=OF |
*NO | No Overflow - німа переповнення | OF=0 |
NP | No Parity (Odd) - неспівпадання парності (непарне) | PF=0 |
*NS[i1] * | No Sign - німа знаку | SF=0 |
NZ | Not Zero - не нуль | ZF=0 |
*O | Overflow – переповнення | OF=0 |
P | Parity (Even) - співпадання парності (хлопцю) | PF=1 |
PE | Parity Even – хлопцю | PF=1 |
PO | Parity Odd – непарне | PF=0 |
*S | Sign – знак | SF=1 |
Z | Zero – нуль | ZF=1 |
Як і в мові Бейсік, ви можете вставити ELSE і змусити мікропроцесор виконувати альтернативну групу команд у випадку, якщо умова не істинна. Тоді структура IF буде мати вигляд: