Пример: Глобальная сеть INTERNET
Я ищу:
На главную  |  Добавить в избранное  

Главная/

Программирование, базы данных. /

Язык макроассемблера IBM PC

←предыдущая  следующая→
1 2 3 4 5 6 7 8 9 10 ... 

 

ЯЗЫК МАКРОАССЕМБЛЕРА  IBM PC (Справочное пособие)

Составитель: В.Н.Пильщиков (МГУ, ВМК) (январь 1992 г.)


    В пособии рассматривается язык макроассеблера для персональных ЭВМ типа IBM PC (язык MASM, версия 4.0).

    Пособие состоит из 4 глав.  В главе 1 рассмотрены особенности пер­сональных компьютеров типа IBM PC и  приведены  начальные  сведения  о языке  MASM.  В  главе 2 описывается  система команд этих компьютеров. Глава 3 посвящена посвящена собственно языку MASM. В главе 4 приведены примеры фрагментов программ и полных программ на MASM для решения раз­личных задач.

    В пособии не рассматриваются вопросы,  связанные с обработкой дво­ично-десятичных чисел  и работой арифметического сопроцессора 8087 или 80287.

    Под термином "ПК" в пособии понимается персональный компьютер типа IBM PC c микропроцессором 8088/8086, 80186 или 80286.

        ГЛАВА  1.  ОСОБЕННОСТИ ПК. ВВЕДЕНИЕ В MASM.

             1.1. ОПЕРАТИВНАЯ ПАМЯТЬ. РЕГИСТРЫ.

         1.1.1 Оперативная память

    Объем оперативной памяти ПК - 2^20 байтов (1 Мб). Байты нумеруются начиная с 0, номер байта называется его адресом.  Для ссылок  на байты памяти используются 20-разрядные адреса:  от 00000 до FFFFF (в 16-рич­ной системе).

    Байт содержит 8 разрядов (битов),  каждый из которых  может прини­мать значение 1 или 0. Разряды нумеруются справа налево от 0 до 7:

-----------------

           | | | | | | | | |

           -----------------

            7 6 5 4 3 2 1 0

    Байт  - это наименьшая адресуемая ячейка памяти. В ПК используются и более крупные ячейки - слова и двойные слова. Слово - это два сосед­них байта,  размер слова - 16 битов (они нумеруются справа налево от 0 до 15). Адресом слова считается адрес его первого байта (с меньшим ад­ресом); этот адрес может быть четным и нечетным.  Двойное слово  - это любые четыре соседних байта  (два соседних слова), размер такой ячейки - 32 бита; адресом двойного слова считается адрес его первого байта.

Байты  используются для хранения небольших целых чисел и символов,

слова - для хранения целых чисел и адресов, двойные слова - для хране­ния "длинных" целых чисел и т.н. адресных пар (сегмент:смещение).

         1.1.2 Регистры

    Помимо ячеек оперативной памяти для хранения данных (правда, крат­ковременного) можно использовать и регистры  - ячейки, входящие в сос­тав процессора  и доступные из машинной программы.  Доступ к регистрам осуществляется значительно быстрее, чем к ячейкам памяти,  поэтому ис­пользование регистров заметно уменьшает время выполнения программ.

    Все регистры имеют размер слова (16 битов),  за каждым из них зак­реплено определенное имя (AX, SP и  т.п.).  По  назначению  и  способу использования регистры можно разбить на следующие группы:

- регистры общего назначения (AX, BX, CX, DX, BP, SI, DI, SP);

    - сегментные регистры (CS, DS, SS, ES);

    - счетчик команд (IP);

    - регистр флагов (Flags).

(Расшифровка этих названий:  A - accumulator, аккумулятор;  B  - base, база; C - counter, счетчик; D - data, данные;  BP - base pointer, ука­затель базы;  SI - source index, индекс источника;  DI  -  destination index,  индекс приемника;  SP  - stack pointer, указатель стека;  CS -

code segment, сегмент команд; DS - data segment, сегмент данных; SS  ­stack segment, сегмент стека;  ES - extra segment, дополнительный сег­мент; IP - instruction pointer, счетчик команд.)

    Регистры общего назначения можно использовать во всех арифметичес­ких и логических командах.  В то же время каждый их них  имеет опреде­ленную специализацию (некоторые команды "работают" только с определен­ными регистрами). Например, команды умножения и деления требуют, чтобы один из операндов находился в регистре AX  или в регистрах AX и DX  (в зависимости от размера операнда),  а команды управления циклом исполь­зуют регистр CX в качестве счетчика цикла. Регистры BX и BP очень час­то используются как базовые регистры,  а SI и DI - как индексные.  Ре­гистр SP обычно указывает на вершину стека,  аппаратно поддерживаемого в ПК.

    Регистры AX, BX, CX и DX конструктивно устроены так,  что возможен независимый доступ к их старшей  и  младшей половинам;  можно сказать, что каждый из этих регистров состоит из двух байтовых регистров,  обо­значаемых AH, AL, BH и т.д. (H - high, старший; L - low, младший):

-----------      -----------      -----------      -----------


AX | AH | AL |   BX | BH | BL |   CX | CH | CL |   DX | DH | DL |

-----------      -----------      -----------      ----------­15  8 7  0


Таким образом,  с каждым из этих регистров можно работать как с единым целым, а можно работать и с его "половинками".  Например,  можно запи­сать слово в AX, а затем считать только часть слова из регистра AH или заменить только часть в регистре AL и т.д.  Такое устройство регистров позволяет использовать их для работы и с числами, и с символами.

    Все остальные регистры не делятся на "половинки",  поэтому считать или записать их содержимое (16 битов) можно только целиком.

    Сегментные регистры CS, DS, SS и ES не могут быть операндами ника­ких команд, кроме команд пересылки и стековых команд. Эти регистры ис­пользуются только для сегментирования адресов (см. 1.4).

    Счетчик  команд  IP всегда содержит адрес (смещение от начала про­граммы)  той команды,  которая должна быть выполнена следующей (начало программы хранится в регистре CS).  Содержимое регистра IP можно изме­нить только командами перехода.

         1.1.3 Флаги

    И,  наконец,  в ПК имеется особый регистр флагов.  Флаг - это бит, принимающий значение 1 ("флаг установлен"),  если выполнено  некоторое условие,  и  значение 0 ("флаг сброшен") в противном случае.  В ПК ис-

пользуется 9 флагов, каждому из них присвоено определенное имя (ZF, CF и т.д.). Все они собраны в регистре флагов  (каждый флаг - это один из разрядов регистра, часть его разрядов не используется):

-------------------------------------------------

Flags  | x| x| x| x|OF|DF|IF|TF|SF|ZF| x|AF| x|PF| x|CF| -------------------------------------------------

15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0

    Некоторые флаги принято называть флагами условий; они автоматичес­ки меняются при выполнении команд  и фиксируют те или иные свойства их результата (например, равен ли он нулю).  Другие флаги называются фла­гами состояний; они меняются из программы и оказывают влияние на даль­нейшее поведение процессора (например, блокируют прерывания).

        Флаги условий:

    CF (carry flag)  -  флаг переноса.  Принимает значение 1, если при сложении целых чисел появилась единица переноса, не "влезающая" в раз­рядную сетку, или если при вычитании чисел без знака первое из них бы­ло меньше второго.  В командах сдвига в CF заносится бит,  вышедший за разрядную сетку. CF фиксирует также особенности команды умножения.

    OF (overflow flag) - флаг переполнения.  Устанавливается в 1, если при сложении или вычитании целых чисел со знаком  получился результат, по модулю превосходящий  допустимую  величину  (произошло переполнение мантиссы и она "залезла" в знаковый разряд).

    ZF (zero flag) - флаг нуля.  Устанавливается в 1,  если  результат команды оказался равным 0.

    SF (sign flag) - флаг знака.  Устанавливается в 1, если в операции над знаковыми числами получился отрицательный результат.

    PF (parity

←предыдущая  следующая→
1 2 3 4 5 6 7 8 9 10 ... 


Copyright © 2005—2007 «RefStore.Ru»