Шаг 24.
Организация переходов в Ассемблере. Команда JMP

    На этом шаге мы рассмотрим организацию безусловного перехода.

    В языке Ассемблера имеются специальные команды, позволяющие изменять последовательность выполнения команд. Перечислим способы передачи управления:

На этом шаге мы рассмотрим более подробно первую из перечисленных возможностей.

Команда JMP

Эта команда предназначена для выполнения безусловного перехода. Ее общий вид следующий:
    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

    Прокомментируем некоторые из приведенных конструкций.

  1. Директива ORG 100H устанавливает относительный адрес для начала выполнения программы. Ее использование необходимо, если создается COM-файл. В общем случае здесь приведен как раз пример COM-файла.
  2. Команда SHL осуществляет сдвиг влево содержимого первого операнда, а команда SHR осуществляет сдвиг вправо. Сдвиг на один бит кодируется в команде значением 1. Сдвиг более чем на один бит требует указания этого значения в регистре CL. Тогда следующая последовательность команд осуществляет сдвиг значения, находящегося в регистре BX на 2 бита влево:
               MOV CX, 2
               SHL BX, CX           .
    
  3. Метку можно указывать на одной строке с командой.

    Команда JMP для перехода в пределах от -128 до +127 байт имеет тип SHORT. В этом случае генерируется однобайтовый код. Команда JMP, превосходящая эти пределы, получает тип NEAR (ее длина 2 байта) или FAR (3 байта). При необходимости генерировать команду JMP определенного типа, в ней используют перечисленные параметры, например:

          JMP   SHORT  A90
                .  .  .
      A90:      .  .  .

    На следующем шаге мы рассмотрим организацию цикла в языке программирования Ассемблер.


Предыдущий шаг Содержание Следующий шаг