На этом шаге мы рассмотрим организацию безусловного перехода.
В языке Ассемблера имеются специальные команды, позволяющие изменять последовательность выполнения команд. Перечислим способы передачи управления:
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: . . .
На следующем шаге мы рассмотрим организацию цикла в языке программирования
Ассемблер.