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

(Справочное пособие)

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

Пособие состоит из 4 глав.

В главе 1 рассмотрены особенности персональных компьютеров типа IBM PC и приведены начальные сведения о языке MASM.

В главе 2 описывается система команд этих компьютеров.

Глава 3 посвящена собственно языку MASM. В главе 4 приведены примеры фрагментов программ и полных программ на MASM для решения различных задач.

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

Под термином «ПК» в пособии понимается персональный компьютер типа IBM PC c микропроцессором 8088/8086,80 186 или 80 286.

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

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

1.1.1 Оперативная память Объем оперативной памяти ПК — 220 байтов (1 Мб). Байты нумеруются начиная с 0, номер байта называется его адресом. Для ссылок на байты памяти используются 20-разрядные адреса: от 0 до 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 обычно указывает на вершину стека, аппаратно поддерживаемого в ПК.