Структурне програмування на асемблері, Детальна інформація
Структурне програмування на асемблері
Z Zero – нуль ZF=1
СТРУКТУРА IF З ЧАСТКОЮ ELSE
Як і в мові Бейсік, ви можете вставити ELSE і змусити мікропроцесор виконувати альтернативну групу команд у випадку, якщо умова не істинна. Тоді структура IF буде мати вигляд:
$IF умова
A (здійснюється, якщо умова істинна)
$ELSE
B (здійснюється, якщо умова не істинна)
$ENDIF
На мал. 1,б показана блок-схема, що пояснює дію структури $IF-$ELSE-$ENDIF.
ФУНКЦІОНУВАННЯ СТРУКТУРИ IF
Насправді оператори $IF, $ELSE і $ENDIF є командами для програми SALUT. Коли ми викликаємо програму SALUT, то вона перетворює ці оператори в рядки коментарів (так що Асемблер буде їх ігнорувати), а потім створює їхній еквівалент на мові асемблера. Після цього програма може бути відтрансльована Асемблером, тому що операторів $IF, $ELSE і $ENDIF в ній уже немає. У наступних розділах ми покажемо, як програма SALUT перетворить спочатку структуру $IF-$ENDIF, а потім структуру $IF-$ELSE-$ENDIF.
КОМАНДИ, ЩО ГЕНЕРУЮТЬСЯ ОПЕРАТОРАМИ $IF-ENDIF
Коли програма SALUT виявляє оператор $IF, вона генерує команду умовної передачі управління Jx, що змушує мікропроцесор пропустити оператори, що знаходяться між оператором $IF і наступним оператором $ENDIF. Звернемо увагу на слово «пропустити». Воно повідомляє нам, що програма SALUT повинна підставити команду Jx, обернену стосовно змісту операнда в операторі $IF. Отже, вона повинна замінити $IF Z на JNZ, а $IF на JNA. Звичайно, у кожної команди умовної передачі управління повинний бути адресат, і тому програма SALUT уставить мітку після оператора $ENDIF. Наприклад після того, як програма SALUT опрацює оператори $IF і $ENDIF, наш попередній приклад прийме такий вид:
CMP BX,0 ;Негативне значення?
;$IF L
JNL $$IF1
NEG BX ;Якщо так, змінити знак
;$ENDIF
$$IF1:
(Ми вставили мітку $$IF1 тільки для ілюстрації, тому що не знаємо яку мітку програма SALUT вставить насправді).
КОМАНДИ, ЩО ГЕНЕРУЮТЬСЯ ОПЕРАТОРАМИ $IF-$ELSE-$ENDIF
При опрацюванні структури $IF-$ELSE-$ENDIF програма SALUT замінює оператор $IF на команду Jx, що передає керування мітці, що слідує за $ELSE, заміняє $ENDIF на іншу мітку і підставляє замість $ELSE команду короткої передачі керування JMP, що адресується до мітки при $ENDIF Таким чином, як показано на наступному схематичному лістингу, програма SALUT перетворить оператори лівої частини в ті, що зазначені справа.
$IF умова JN умова $$IF1
А
$ELSE JMP SHORT $$EN1
$$IF1:
В
$ENDIF $$EN1:
ВАРІАНТИ ОПЕРАНДУ
СТРУКТУРА IF З ЧАСТКОЮ ELSE
Як і в мові Бейсік, ви можете вставити ELSE і змусити мікропроцесор виконувати альтернативну групу команд у випадку, якщо умова не істинна. Тоді структура IF буде мати вигляд:
$IF умова
A (здійснюється, якщо умова істинна)
$ELSE
B (здійснюється, якщо умова не істинна)
$ENDIF
На мал. 1,б показана блок-схема, що пояснює дію структури $IF-$ELSE-$ENDIF.
ФУНКЦІОНУВАННЯ СТРУКТУРИ IF
Насправді оператори $IF, $ELSE і $ENDIF є командами для програми SALUT. Коли ми викликаємо програму SALUT, то вона перетворює ці оператори в рядки коментарів (так що Асемблер буде їх ігнорувати), а потім створює їхній еквівалент на мові асемблера. Після цього програма може бути відтрансльована Асемблером, тому що операторів $IF, $ELSE і $ENDIF в ній уже немає. У наступних розділах ми покажемо, як програма SALUT перетворить спочатку структуру $IF-$ENDIF, а потім структуру $IF-$ELSE-$ENDIF.
КОМАНДИ, ЩО ГЕНЕРУЮТЬСЯ ОПЕРАТОРАМИ $IF-ENDIF
Коли програма SALUT виявляє оператор $IF, вона генерує команду умовної передачі управління Jx, що змушує мікропроцесор пропустити оператори, що знаходяться між оператором $IF і наступним оператором $ENDIF. Звернемо увагу на слово «пропустити». Воно повідомляє нам, що програма SALUT повинна підставити команду Jx, обернену стосовно змісту операнда в операторі $IF. Отже, вона повинна замінити $IF Z на JNZ, а $IF на JNA. Звичайно, у кожної команди умовної передачі управління повинний бути адресат, і тому програма SALUT уставить мітку після оператора $ENDIF. Наприклад після того, як програма SALUT опрацює оператори $IF і $ENDIF, наш попередній приклад прийме такий вид:
CMP BX,0 ;Негативне значення?
;$IF L
JNL $$IF1
NEG BX ;Якщо так, змінити знак
;$ENDIF
$$IF1:
(Ми вставили мітку $$IF1 тільки для ілюстрації, тому що не знаємо яку мітку програма SALUT вставить насправді).
КОМАНДИ, ЩО ГЕНЕРУЮТЬСЯ ОПЕРАТОРАМИ $IF-$ELSE-$ENDIF
При опрацюванні структури $IF-$ELSE-$ENDIF програма SALUT замінює оператор $IF на команду Jx, що передає керування мітці, що слідує за $ELSE, заміняє $ENDIF на іншу мітку і підставляє замість $ELSE команду короткої передачі керування JMP, що адресується до мітки при $ENDIF Таким чином, як показано на наступному схематичному лістингу, програма SALUT перетворить оператори лівої частини в ті, що зазначені справа.
$IF умова JN умова $$IF1
А
$ELSE JMP SHORT $$EN1
$$IF1:
В
$ENDIF $$EN1:
ВАРІАНТИ ОПЕРАНДУ
The online video editor trusted by teams to make professional video in
minutes
© Referats, Inc · All rights reserved 2021