Ветвление и организация циклов. — КиберПедия 

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...

Ветвление и организация циклов.

2023-01-01 19
Ветвление и организация циклов. 0.00 из 5.00 0 оценок
Заказать работу

До этого момента примеры выполнялись последовательно команда за командой. Однако, программируемые задачи редко бывают так просты. Большинство программ содержат ряд циклов, в которых несколько команд повторяются до достижения определенного требования, и различные проверки, определяюшие какие из нескольких действий следует выполнять. Обычным требованием является проверка – должна ли программа завершить выполнение. Эти требования включают передачу управления по адресу команды, которая не находится непосредственно за выполняемой в текущий момент командой. Передача управления может осуществляться вперед для выполнения новой группы команд или назад для повторения уже выполненных команд. Некоторые команды могут передавать управление, изменяя нормальную последовательность шагов непосредственной модификацией значения смещения в командном указателе (регистре IP). Ниже приведены три способа передачи управления:

Безусловный переход:    JMP

Цикл:                           LOOP

Условный переход:     Jnnn (больше,меньше,равно)

Следует отметить что имеется три типа адресов: SHORT, NEAR и FAR. Адресация SHORT используется при циклах, условных пеpеходах и некоторых безусловных переходах. Адресация NEAR и FAR используется для вызовов процедур (CALL) и безусловных переходов, которые не квалифицируются, как SHORT. Все три типа передачи управления воздействуют на содержимое регистра IP; тип FAR также изменяет регистр сегмента кода CS.

 

Команда JMP. Одной из команд обычно используемых для передачи управления является команда JMP. Эта команда выполняет безусловный переход, т.е. обеспечивает передачу управления при любых обстоятельствах. В следующей процедуре используется команда JMP. В pегистры AX, BX, и CX загружается значение 1, и затем в цикле выполняются следующие операции:

прибавить 1 к регистру AX,

прибавить AX к BX,

удвоить значение в регистре CX.

Повторение цикла приводит к увеличению содержимого регистра AX: 1,2,3,4..., регистра BX: 1,3,6,10..., и регистра CX: 1,2,4,8... Начало цикла имеет метку, в данном случае, A20: - двоетичие oбозначает, что метка находится внутри процедуры в сегменте кода. В конце цикла находится команда

JMP a20

которая указывает на то, что управление должно быть передано команде c меткой a20. Следует обратить внимание, что адресная метка в операнде команды указывается без двоеточия. Данный цикл не имеет выхода и приводит к бесконечному выполнению - такие циклы обычно не используются.

 

main proc near

mov ax,01; Инициализация AX,

mov bx,01;BX,

mov cx,01; и CX

a 20:       ;метка

add ax,01;Прибавить 1 к AX

add bx, ax;Прибавить 1 к BX

shl cx,1;Удвоить CX (сдвиг влево на 1;разряд)

jmp a 20;Переход на метку а20

main endp

 

Метку можно кодировать на одной строке с командой:

 

a 20: add ax,01

 

или на отдельной строке:

 

a 20:

add ax,01

 

В обоих случаях адрес a20 указывает на первый байт команды ADD. Отсутствие двоеточия в метке является частой ошибкой.

 

Команда LOOP. Команда JMP в предыдущем примере реализует бесконечный цикл. Но более вероятно подпрограмма должна выполнять определенное число циклов. Команда LOOP, которая служит для этой цели, использует начальное значение в регистре CX. В каждом цикле команда LOOP автоматически уменьшает содержимое регистра CX на 1. Пока значение в CX не равно нулю, управление передается по адресу, указанному в операнде, и если в CX будет 0, управление переходит на следующую после LOOP команду.

В следующем примере показана процедура, иллюстрирующая использование команды LOOP, она выполняет действия, аналогичные предыдущему примеру за исключением того, что после десяти циклов программа завершается. Команда MOV инициализирует регистр CX значением 10. Так как команда LOOP использует регистр CX, то в программе для удвоения начального значения 1 вместо регистра CX используется DX. Команда JMP A20 заменена командой LOOP и для эффективности команда ADD AX,01 заменена командой INC AX (увеличение AX на 1).

Аналогично команде JMP, операнд команды LOOP определяет адрес метки A20. Для команды LOOP расстояние до метки должно быть в пределах от -128 до +127 байт. Если операнд превышает эти границы, то ассемблер выдаст сообщение "Relative jump out of range " (превышены границы перехода).

 

begin proc near

mov ax,01; Инициализация AX,

mov bx,01;BX,

mov dx,01; и DX

mov cx,10; Число повторений цикла

a20:

inc ax  ;Прибавить 1 к AX

add bx, ax;Прибавить AX к BX

shl dx,1;Удвоить DX путем сдвига влево;на 1 разряд

loop a 20;Уменьшить CX на 1 и повторить;цикл, если CX > 0

ret    ;Выход из процедуры

begin endp

 

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

В предыдущих примерах было показано, что команда LOOP уменьшает на единицу содержимое регистра CX и проверяет его: если не ноль, то управление передается по адресу, указанному в операнде. Таким образом, передача управления зависит от конкретного состояния. Ассемблер поддерживает большое количество команд условного перехода, которые осуществляют передачу управления в зависимости от состояний флагового регистра (flags).

Команду LOOP в процедуре можно заменить на две команды: одна уменьшает содержимое регистра CX, а другая выполняет условный переход:

 


Поделиться с друзьями:

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.01 с.