На этом шаге мы рассмотрим организацию безусловного перехода.
В языке Ассемблера имеются специальные команды, позволяющие изменять последовательность выполнения команд. Перечислим способы передачи управления:
JMP <метка> .
Разберем действие этой команды на конкретном примере. В программе, расположенной ниже, регистры AX, BX, CX получают значение 1. Затем в цикле выполняются следующие операции:
Многократное повторение этих команд приводит к увеличению содержимого регистров AX - на 1; BX - на величину, находящуюся в регистре AX; CX - в 2 раза. Повторяющиеся команды начинаются с метки A20. Переход на эту метку осуществляется при выполнении команды JMP A20. Так как здесь не предусмотрен выход из повторения, то программа будет выполняться бесконечно.
TITLE EXJUMP Организация цикла с помощью JMP. CODESG SEGMENT PARA ASSUME: CS:CODESG,DS:CODESG,SS:CODESG ORG 100h Main PROC NEAR MOV AX,01 MOV BX,01 MOV CX,01 A20: ADD AX,01 ADD BX,CX SHL CX,1 JMP A20 Main ENDP CODESG ENDS END Main
Прокомментируем некоторые из приведенных конструкций.
MOV CX, 2 SHL BX, CX .
Команда JMP для перехода в пределах от -128 до +127 байт имеет тип SHORT. В этом случае генерируется однобайтовый код. Команда JMP, превосходящая эти пределы, получает тип NEAR (ее длина 2 байта) или FAR (3 байта). При необходимости генерировать команду JMP определенного типа, в ней используют перечисленные параметры, например:
JMP SHORT A90 . . . A90: . . .
На следующем шаге мы рассмотрим организацию цикла в языке программирования
Ассемблер.