Ниже описаны некоторые основные принципы работы компьютера.  Эти  принципы важны для понимания 8088 и его работы.  Все, что говорится  в этом разделе, верно и для других компьютеров.  В соответствующих  местах мы будем специально оговариваться, что речь идет об Intel  8088, хотя основная часть сведений, относящихся только к 8088,  появится в следующей главе.

Работа компьютера состоит в выборке команд из памяти и их  выполнении.  Каждая команда проходит через этот двухшаговый  процесс. Выборкой очередной порции в этом цикле управляет один из  регистров процессора.  Этот регистр называют счетчиком программы  или указателем команды.  Он является "маркером" текущей  выполняемой команды.  То место в памяти, на которое указывает этот  регистр, содержит следующую команду, которую должен будет выбрать и  выполнить процессор.  Процессор читает в этом месте один или  несколько байтов, интерпретирует их как команду и выполняет ее.  Затем процессор увеличивает указатель в соответствии с числом  байтов в команде.  Теперь счетчик программы указывает на следующую  команду. Этот цикл повторяется для всех без исключения команд.  Нормальное выполнение программы является последовательным, от одной  команды к другой, расположенной следом.

Процессор может изменить последовательный цикл выборки-исполнения при выполнении команды, которая помещает в указатель команд новое значение.  Такие команды являются командами передачи  управления, поскольку выполнение программы переходит в новую  область. Инструкция перехода или выбора варианта является самым  распространенным способом передачи управления.  Команда перехода  задает адрес команды, которая должна выполняться следующей.  Цикл в  программе является примером использования команды перехода.  Пример  на Фиг. 2.16 на языке ассемблера 8088 показывает сохранение одного  и того же значения в последовательных байтах памяти.  Команда  перехода в конце цикла приводит к повторному выполнению его команд.

           Microsoft (R) Macro Assembler Version 5.00              11/2/88 21:30:42

           Фиг. 2.16 Команда перехода                        Page         1-1

                1                                    PAGE   ,132

                2                                    TITLE  Фиг. 2.16 Команда перехода

                3 0000                   CODE   SEGMENT

                4                                    ASSUME CS:CODE

                5

                6 0000                   MEM    LABEL   BYTE

                7

                8 0000                   FIG2_16:

                9 0000  2E: C6 87 0000 R 00         MOV     MEM[BX],0

               10 0006  43                     INC     BX

               11 0007  EB F7                        JMP     FIG2_16

               12

               13 0009                   CODE   ENDS

               14                                    END

           Фиг. 2.16 Команда перехода

Обратите внимание, что в команде JMP для определения следующего выполняемого адреса используется метка, в данном случае  "FIG2_16".  Это - еще одна из возможностей ассемблера.  Хотя в  машинном языке требуется абсолютный адрес следующей команды, язык  ассемблера требует лишь программно определенную метку.  Ассемблер  сам определяет абсолютный адрес и ставит правильное значение в  команду машинного языка.

Команда перехода не обязательно должна быть безусловной как в  приведенном примере.  8088 располагает множеством команд перехода,  которые выполняются в соответствии с некоторым кодом условия.  Значение кода условия устанавливают другие команды при их  выполнении процессором.  Условие, указанное в команде условного  перехода, сравнивается с кодом условия, сохраненного в регистре  состояний.  Если условия совпадают, то процессор переходит по  указанному адресу.  В противном случае процессор игнорирует  переход, и выполнение программы продолжается в обычном  последовательном порядке.  На Фиг.  2.17 предыдущий пример изменен.  Цикл в этом примере прерывается, когда значение BX становится  равным 1000.

На Фиг. 2.17 появляется новая команда сравнения, которая  устанавливает коды состояния.  Команда условного перехода (JNE  (Jump if Not Equal) переход, если не равны) выполняет переход на  "FIG2_17", если условие выполнено.  Если условие не выполняется,  8088 выполняет команду, следующую за условным переходом, в данном  случае команду NOP.  Команда условного перехода позволяет проверить

            Microsoft (R) Macro Assembler Version 5.00              11/2/88 22:31:33

            Фиг. 2.17 Команда условного перехода                    Page    1-1

                  1                              PAGE   ,132

                  2                              TITLE  Фиг. 2.17 Команда условного перехода

                  3 0000                         CODE   SEGMENT

                  4                              ASSUME CS:CODE

                  5

                  6 0000                         MEM    LABEL   BYTE

                  7

                  8 0000                         FIG2_17:

                  9 0000  2E: C6 87 0000 R 00          MOV     MEM[BX],0

                10 0006  43                     INC     BX

                11 0007  81 FB 03E8                   CMP     BX,1000

                12 000B  EB F3                        JMP     FIG2_17

                13

                14 000D                         CODE   ENDS

                15                              END

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

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