Команда безусловного перехода. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Команда безусловного перехода.



JMP <адрес перехода>

имеет три модификации в зависимости от длины ее адресной части:

short - при переходе по адресу, который находится на расстоянии

-128...127 байт относительно адреса данной команды (длина адресной части 1 байт);

near ptr - при переходе по адресу, который находится на расстоянии        З2 Кбайта (-32768...32767 байт) относительно адреса данной команды (длина адресной части 2байта);

far ptr - при переходе по адресу, который находится на расстоянии превышающем 32 Кбайта (длина адресной части 4 байта).

При указании перехода к командам, предшествующим команде перехода, ассемблер сам определяет расстояние до метки перехода и строит адрес нужной длины. При указании перехода к последующим частям программы необходимо ставить указатели short, near ptr и far ptr.

В качестве адреса команды перехода используются метки трех видов:

а) < имя >: n ор (nор - команда "нет операции");

б)< имя> label near (для внутрисегментных переходов);

в) <имя> label far (для внесегментных переходов).

Примеры:

а) jmp short b - переход по адресу b;

б) jmp [ bx ] - переход по адресу в регистре bx (адрес определяется косвенно);

в) a: пор - описание метки перехода " a ";

г) b label near - описание метки перехода " b ".

Команды условного перехода.

<мнемоническая команда> <адрес перехода>

Мнемоника команд условного перехода:

JZ - переход по "ноль";

J E - переход по "равно";

JN Z - переход по "не нуль";

J NE - переход по "не равно";

JL - переход по "меньше";

JNG, J LE - переход по "меньше или равно ";

JG - переход по "больше";

JNL, J GE - переход по "больше или равно ";

JA - переход по "выше" (беззнаковое больше);

JNA, JBE - переход по "не выше"(беззнаковое не больше);

JB - переход по "ниже" (беззнаковое меньше);

JNB, JAE - переход по"не ниже" (беззнаковое не меньше).

Все команды имеют однобайтовое поле адреса, следовательно, смешение не должно превышать -128...127 байт. Если смещение выходит за указанные пределы, то используется специальный прием:

вместо                                                      программируется

Jz zero                                                    jnz continue

                                                                    jmp zero

                                                 continue:...

Команды организации циклической обработки.

В качестве счетчика цикла во всех командах циклической обработки используется содержимое регистра cx.

1) Команда организации цикла.

LOOP < адрес перехода >

при каждом выполнении уменьшает содержимое регистра cx на единицу и передает управление по указанному адресу, если cx не равно 0:

mov cx, loop _ count                 ; загрузка счетчика

begin_loop:  

     ;... тело цикла...

                loop begin_loop

Примечание. Если перед началом цикла в регистр cx загружен 0, то цикл выполняется 35536 раз.

2) Команда перехода по обнуленному счетчику.

JCXZ <адрес перехода>

передает управление по указанному адресу, если содержимое регистра cx равно 0. Например:

mov cx, loop _ count                 ; загрузка счетчика

jcxz end _ of _ loop                 ; проверка счетчика

begin_loop:  

;... тело цикла...

                 loop begin_loop

end_of_loop:...

3)   Команды организации цикла с условием.

L ООР E <адрес перехода>

LOOPNE <адрес перехода>

уменьшают содержимое на единицу и передают управление по указанному адресу при условии, что содержимое cx отлично от нуля, но L ООР E дополнительно требует наличия признака "равно", а LOOPNE - ''не равно", формируемых командами сравнения. Например:

mov cx, loop _ count                 ; загрузка счетчика

jcxz end _ of _ loop                ; проверка счетчика

begin _ loop:  

;... тело цикла...

                 cmp al, 100                    ; проверка содержимого al

                 loopne begin _ loop; возврат в цикл, если cx ¹ 0 и al ¹ 100

end _ of _ loop:...

Команды вызова подпрограмм.

1) Команда вызова процедуры.

C A L L <адрес процедуры>

осуществляет передачу управления по указанному адресу, предварительно записав в стек адрес возврата.

При указании адреса процедуры так же как и при указании адреса перехода в командах безусловного перехода, возникает необходимость определить удаленности процедуры от места вызова:

а) если процедура удалена не более чем на -128...127 байт, то специальных указаний не требуется;

б) если процедура удалена в пределах 32 к6ант, то перед адресом по процедуры необходимо указать near ptr,

в) если процедура подпрограмма удалена более, чем на 32 кбайта, то перед адресом процедуры необходимо записать far ptr.

Например:

          call near ptr p - вызов подпрограммы " р ".

Текст процедуры должен быть оформлен в виде:

< имя процедуры> ргос < указатель удаленности>

         ... тело процедуры...

<имя процедуры>   end

Здесь указатель удаленности также служит дли определения длины адресов, используемых при обращении к процедуре: near - при использовании двухбайтовых адресов, far - при использовании четырехбайтовых адресов.

2) Команда возврата управления.

RET [<число>]

извлекает из стека адрес возврата и передает управление по указанному адресу.

Если в команде указано значение счетчика, то после восстановления адреса возврата указанное число добавляется к содержимому регистра-указателя стека. Последний вариант команды позволяет удалить из стека параметры, передаваемые в процедуру через стек.

Команды обработки строк.

Команды обработки строк используются для организации циклической обработки последовательностей элементов длиной I или 2 байта. Адресация операндов при этом выполняется с помощью пар регистров: DS: SI - источник, ES: DI - приемник. Команды имеют встроенную корректировку адреса операндов согласно флагу направления D: 1 - уменьшение адреса на длину элемента, 0 - увеличение адреса на длину элемента. Корректировка выполняется после выполнения операции.

Установка требуемого значения флага направления выполняется специальными командами:

ST D - установка флага направления в единицу,

CLD - сброс флага направления в ноль.

1) Команда загрузки строки LO DS.

LO DSB              (загрузка байта),

LO DSW          (загрузка слова).

Команда загружает байт в А L или слово в AX. Для адресации операнда используются регистры DS: S I

2) Команда записи строки STOS.

STOSB      (запись байта),

ST OSW        (запись слова)

записывает в основную память содержимое A L или АX соответственно. Для адресации операнда используются регистры ES:DI.

3) Команда пересылки MOVS.

MOVSB (пересылка байта),

МО VSW (пересылки слова)

пересылает элемент строки из области, адресуемой регистрами DS: SI, в область, адресуемую регистрами Е S: DI.

4) Команда сканирования строки SCAS.

SCASB    (поиск байта),

SCAS W   (поиск слова).

По команде содержимое регистра AL или АХ сравниваются с элементом строки, адресуемым регистрами DS: SI и устанавливается значение флажков в соответствии с результатом [ DI ] - AL или [ DI ]- AX.

5) Команда сравнения строк CMPS.

СMPSB (сравнение байт),

С MPS W (сравнение слов)

элементы строк, адресуемых парами регистров DS: SI и ES: DI, сравниваются и устанавливаются значения флажков в соответствии с результатом [DI]-[ SI ].

6) Префиксная команда повторения.

REP <команда>

позволяет организовать повторение указанной команды CX раз. Например:

Rep stosb

Здесь поле, адресуемое парой регистров ES: DI длиной CX заполняется содержимым AL.

7) Префиксные команды "повторять, пока равно" и "повторять, пока не равно".

REPE  < команда >

RE PNE   < команда ^

Префиксные команды используются совместно с командами С MPS и SCAS. Префикс REPE означает повторять, пока содержимое регистра СХ не равно нулю и значение флажка нуля равно единице, a RE PNE - повторять, пока содержимое регистра CX не равно нулю и значение флажка нуля равно нулю.



Поделиться:


Последнее изменение этой страницы: 2021-12-15; просмотров: 47; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.17.162.247 (0.017 с.)