Assembler для начинающих


Принципы работы компьютера



Принципы работы компьютера


    Ниже описаны некоторые основные принципы работы компьютера.  Эти
    принципы важны для понимания 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 Команда условного перехода
 
    значения данных в процессе выполнения программы.  Ход выполнения
    программы может меняться в зависимости от результатов этой
    проверки.




Содержание раздела