Смекни!
smekni.com

Структурне програмування на асемблері (стр. 1 из 4)

МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ

ЧЕРНІВЕЦЬКИЙ ДЕРЖАВНИЙ УНІВЕРСИТЕТ

ім. Ю. ФЕДЬКОВИЧА

ФІЗИЧНИЙ ФАКУЛЬТЕТ

КАФЕДРА ЕОМ

СТРУКТУРНЕ ПРОГРАМУВАННЯ

НА МОВІ АСЕМБЕЛЕРА

Курсова робота з курсу “Системне програмування”

Студент 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 змушує мікропроцесор виконувати або пропускати групу команд в залежності від того, істинна чи хибна задана умова. Її основна форма:

$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

СТРУКТУРА IF З ЧАСТКОЮ ELSE

Як і в мові Бейсік, ви можете вставити ELSE і змусити мікропроцесор виконувати альтернативну групу команд у випадку, якщо умова не істинна. Тоді структура IF буде мати вигляд: