- •Московский авиационный институт
- •(Государственный технический университет)
- •“ Язык ассемблера ibm pc ”
- •Лабораторные работы
- •Указания по работе с турбо-ассемблером
- •Лабораторная работа № 1
- •Команды сложения и вычитания
- •Дополнительные команды
- •Команды умножения и деления
- •Команды преобразования длины
- •Задание
- •Лабораторная работа № 2
- •Близкие и далекие переходы.
- •Задание
- •Лабораторная работа № 3
- •Структура программы на языке Ассемблера
- •Описание процедур
- •Вызов процедур
- •Задание
- •Лабораторная работа № 4 Задание
Близкие и далекие переходы.
Мнемоники команд переходов в ЯА образуются от слова Jump.
Например, безусловный переход:
JMP оp,
где ор – имя команды, которой передается управление (т.е. метка).
Адрес перехода ассоциируется с меткой команды. Метка – это имя команды, которое располагается до мнемоники команды и отделяется двоеточием. Любая программная метка (включая имя процедуры) имеет атрибут NEAR или FAR.
Например,
АМ1: ADD AX,4
………………….
JMP AM1
Команды перехода модифицируют указатель команд IP и, возможно, регистр сегмента команд CS и бывают двух типов:
если команда изменяет только IP , т.е. передача управления внутри сегмента, то переход называется ближний переход NEAR.
если изменяется пара регистров CS:IP, - это межсегментный переход или далекий переход FAR. Заметим, что переход из ассемблерного участка программы в Паскаль-программу также является далеким переходом.
а) команды, анализирующие результаты предыдущей команды (флаги) – условный переход в классическом понимании. Они имеют только 1-байтовое смещение.
Если условный переход требует удаления более чем на 128Б (30-40 команд), то используется комбинация условного и безусловного перехода.
Например:
Требуется NEAR переход на метку ZERO по флагу ZF=1, тогда
Получим фрагмент программы
………..
JNZ CONTINUE; if ZF<>1 then continue
JMP ZERO
CONTINUE
Т.е. используется условный переход по противоположному признаку, а по ZF=1 получим 2-хбайтовый переход.
Мнемоника условного перехода сложна, таких переходов более 20. Некоторые очевидны. Для образования мнемоники используют следующие сокращения:
E – equal (=)
N – not (не)
G – greater (больше для знаковых целых)
L – less (меньше для знаковых целых)
A – above (выше) беззнаковых
B –below (ниже) для беззнаковых
В условных переходах используется после J от одной до трех букв (из перечисленных выше).
Например, после сравнения чисел результат ор1<ор2, возможны 2 команды, эквивалентные между собой для одного и того же перехода:
для знаковых JL ADRES
JNGE ADRES
для беззнаковых JB ADRES
JNA ADRES
б) команды управления циклом
LOOP ор
- управление циклом по счетчику, где ор – метка первой команды цикла, цикл управляется счетчиком в СХ.
Команда LOOP уменьшает содержимое СХ (dec СХ) и передает управление в начало цикла, если содержимое СХ<>0, иначе управление передается команде следующей за LOOP.
Обычно цикл оформляется следующим образом.
mov CX,N ; СХ = {число проходов цикла}
L1: ……… начало цикла
……………….
LOOP L1;
Особенности команды LOOP:
счетчик цикла находится только в CX;
начальное значение загружается в CX>0 до входа в цикл;
команды прохода цикла выполняются хотя бы один раз;
LOOP осуществляет переход типа SHORT, поэтому проход цикла не должен занимать 128Б (30-40 команд); если нужен более длинный проход цикла, то используется сочетание условных и безусловных переходов;
CX может использоваться как операнд в цикле, но не должен изменяться другими командами.