REFERATUA.ORG.UA — База українських рефератів



Головна Інформатика, комп'ютери, програмування → СТРУКТУРНЕ ПРОГРАМУВАННЯ НА МОВІ АСЕМБЕЛЕРА

дорівнює 0 і флаг ZF рівний нулю. Це дозволяє виявляти перший нульовий результат у серії операцій.

  • Оператор $ENDDO LOOPZ є альтернативною формою оператора $ENDDO LOOPE.

  • Оператор $ENDDO LOOPNZ є альтернативною формою оператора $ENDDO LOOPNE.

    ОПЕРАЦІЇ AND І OR

    Операція AND завершує цикл, якщо декілька умов виконуються одночасно, а операція OR завершує цикл, якщо виконується будь-яка з кількох умов. Наприклад, нижче показана загальна форма структури DO, що завершує цикл, якщо у відповідь на запрошення до вводу користувач відповість "Ні", набравши на клавіатурі "Н" або "н":

    $DO

    ...

    ...

    (Видати на екран "Продовжити? (Д/Н)")

    (Зчитати відповідь користувача в перемінну ANSWER)

    СМР ANSWER,"Н"

    $ENDDO E,OR

    СМР ANSWER,"н"

    $ENDDO E

    СТРУКТУРА SEARCH

    Структура SEARCH (шукати) схожа на структуру DO, але передбачає два різних варіанти завершення циклу: успішний і неуспішний. Це зручно для тих додатків, де потрібно знати, яка з умов привела до завершення циклу. Наприклад, Вам може бути необхідно дізнатися, завершилася операція вводу-виводу успішно чи була припинена через виникнення помилки.

    Як і структура DO, структура SEARCH має три форми:

    • Структура SEARCH UNTIL (шукати ... до) повторює блок команд доти, поки одна з двох умов в кінці цього блока не стане істинною.

    • Структура SEARCH WHILE (шукати, поки не) повторює блок команд, поки обидві умови помилкові. Якщо одна з них початково істинна, то блок команд не виконується жодного разу.

    • Структура SEARCH COMPLEX (шукати комплексно) являє собою комбінацію структур SEARH UNTIL і SEARCH WHILE, що включає в себе блок команд до перевірки умов і блок команд після них. Вона виконує перший блок, потім перевіряє умови. Якщо хоча б одна з них істинно, то цикл завершується. У противному випадку здійснюється другий блок команд і процес повторюється ще раз.

    СТРУКТУРА SEARCH UNTIL

    Ця структура має загальний вигляд

    $SEARCH-

    А (Основний блок)

    $EXITIF умова1

    В (Якщо умова1 істинна, то виконати і

    Вийти з циклу)

    $ORELSE

    С (Якщо умова1 хибна, то виконати) $ENDLOOP умова2

    D (Якщо умова2 істинна, то виконати і

    Вийти з циклу)

    $ENDSRCH

    де умова1 і умова2 -- умови завершення циклу. Тут умова1 відповідає успішному завершенню (Ви знайшли те, що шукали), а умова2 -- неуспішному. На мал. 3, a показана блок-схема структури SEARCH UNTIL.

    Врахуйте, що основний блок А завжди виконується принаймні один раз. Блоки В і D виконуються відповідно при успішному і неуспішному завершенні операцій (Ви можете користуватися ними для видачі повідомлень), а блок С містить команди, що встановлюють значення флагів для перевірки оператором $ENDLOOP.

    Наприклад, в екзаменаційній програмі можна скористатися структурою SEARCH UNTIL і дати студенту три спроби вибрати з запропонованих йому варіантів відповіді правильний. Її застосування може мати такий загальний вид:

    MOVE СХ,3 ;Встановити лічильник

    (Зобразити на екрані питання)

    $SEARCH

    (Прочитати відповідь студента)

    (Встановити ZF == 1, якщо відповідь правильна)

    $EXITIF Z

    (Зобразити на екрані "Поздоровляємо, Ви праві" )

    $ORELSE

    (Зобразити на екрані "Вибачте, Ви помилились, спробуйте знову")

    $ENDLOOP LOOP

    (Зобразити на екрані 'Всі три відповіді неправильні')

    (Зобразити на екрані "Правильна відповідь:" і

    вказати відповідь"

    $ENDSRCH

    СТРУКТУРА SEARCH WHILE

    Ця структура має загальний вигляд

    $SEARCH

    $LEAVE умова1

    А (Якщо умова1 хибна, то виконати)

    $EXITIF умова2

    В (Якщо умова2 істинна, то

    Виконати і вийти з циклу)

    $OREELSE

    C (Якщо умова2 хибна, то виконати)

    $ENDLOOP

    D (Якщо умова1 істинна, то виконати і

    вийти з циклу)

    $ENDSRCH

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

    MOV СХ,TABLE LENGTH ;Встановити лічильник

    MOV ВХ,0 ;Зупинити вказівник на перший елемент

    $SEARCH

    $LEAVE CXZ

    СМР ТABLE[ВХ],0 Порівняти з нулем

    $EXITIF E

    (Зобразити на екрані Знайдено нуль )

    $OPELSE

    INC ВX

    $ENDLOOP LOOP

    (Зобразити "Нулів немає")

    $ENDSRCH

    СТРУКТУРА SEARCH COMPLEX

    Ця структура має загальний вигляд

    $SEARCH

    A

    $ЕХIТIF умова1

    В (Якщо умова1 істинна, то виконати і

    вийти з циклу)

    $ORELSE

    С (Якщо умова1 хибна, то виконати)

    $LEAVE умова2

    D (Якщо умова2 хибна, то виконати) $ENDLOOP

    Е (Якщо умова2 істинна, то виконати і вийти з циклу)

    $ENDSRCH

    На мал. 3, в показана блок-схема структури SEARCH COMPLEX. Звернемо увагу на те, що структура SEARCH COMPLEX аналогічна структурі SEARCH UNTIL, але виконує додатковий блок. D, якщо умова 2 хибна.

    ДОДАТКОВІ ОПЕРАНДИ

    Деякі оператори структури SEARCH можуть мати додаткові операнди типу тих, що описувалися для структур IF і DO. Вони мають такі загальні форми:

    $EXITIF умова[,AND/OR][,LONG][,NUL]

    $ORELSE [LONG]

    $ENDLOOP [умова[,AND/OR]][,LONG]

    $ENDLOOP [LOOPx],[LONG]

    $LEAVE умова[,AND/OR][,LONG]

    Єдиний новий операнд -- NUL, що можна використовувати в сполученні з оператором $EXITIF у ситуації, коли в структурі SEARCH треба пропустити блок В (успішний пошук). Звичайно, якщо блока В немає, то можна пропустити й оператор $ORELSE. Структура функціонує і в тому випадку, якщо блок В порожній, але вказівка операнда NUL прискорює її виконання.

    Таблиця 2. Допустимі використання умов NCXZ і CXZ

    Структурний оператор

    NCXZ

    CXZ

    $IF умова

    Так

    Ні

    $IF умова, OR

    Ні

    Так

    $IF умова, AND

    Так

    Ні

    $LEAVE умова

    Ні

    Так

    $LEAVB умова, OR

    Ні

    Так

    $LEAVE умова, AND

    Так

    Ні

    $EXITIF умова

    Так

    Ні

    $EXITIF умова, AND

    Так

    Ні

    $EXITIF умова, OR

    Ні

    Так

    $EXITIF умова, AND, NUL

    Так

    Ні

    $EXITIF умова, OR,


     
    Загрузка...