Мы уже видели, как из нулей и единиц, хранимых в ЭВМ, формируются
числа.Теперь мы посмотрим как комбинации тех же значений 0 и 1
могут быть использованы для программирования компьютера.
Машинная программа представляет собой последовательность ко-
манд (инструкций). Эти команды "объясняют" компьютеру, что он
должен делать. Это похоже на рецепты в кулинарной книге. В
рецепте имеется описание действий, которые необходимы для
приготовления определенного блюда. Подобным образом, компьютер
имеет последовательность команд, которые точно описывают ему
последовательность действий. Этот набор команд называется
программой. Процесс построения корректного набора команд
называют программированием компьютера. В нашей аналогии с рецептом
рецепт является программой, а тот кто его написал - программистом.
Роль компьютера здесь играет повар, готовящий еду.
Реальная программа, которую выполняет компьютер, это последова-
тельность едениц и нулей, связанных с памятью компьютера. Эту стро-
ку бит принято называть машинным языком. Машинный язык - это тот
язык который машина понимает. Компьютер извлекает команды машинного
языка из памяти точно определенным способом. Затем компьютер выпол-
няет команду, обозначенную данной конфигурацией бит. Этот цикл изв-
лечения и исполнения будет разобран в одном из последующих разделов
данной главы.
Однако машинный язык мало о чем говорит людям. Если вы хотите
сложить два числа в 8088 (например, содержимое регистров AX BX -
краткое описание регистров сейчас последует), команда будет
выглядеть таким образом:
0000001111000011B (или 03C3H)
Эти два байта точно указывают компьютеру какую опреацию произвести.
Аналогично, для вычитания двух чисел (вычитание регистра BX из ре-
гистра AX) мы будем иметь в машинном языке
0010101111000011B (или 2BC3H)
Здесь необходимо коротко пояснить, что такое регистры, поскольку в
обсуждении основ работы 8088 с ними приходится чато сталкиваться.
Регистр - это часть процессора, предназанченная для сохранения дан-
ных. К данным, сохраненным в регистре, процессор получает доступ
очень быстро - намного быстрее, чем к данным, хранимым в памяти.
Возможно еще специальное использование регистров в некоторых коман-
дах. В третьей главе будет дано полное описание регистров 8088.
Хотя машинный язык - это действительно прекрасно, если вы явля-
етесь компьютером, он труден для программистов - людей. К счастью,
существует более простой способ программирования. Этим методом,
более близким людям, чем машинам, является программирование на
языке ассемблера.
Язык ассемблера, как язык программирования, т.е. более понятный
программисту, чем машинный, язык, все еще сохраняет все значения
машинного языка. Компьютер читает программы на языке ассемблера и
переводит их в машинный язык, в ту форму, которая понятна ЭВМ. Этот
процесс, называемый "ассемблированием" программы, фактически
является переводом с одного языка на другой. Операцию перевода с
языка ассемблера на машинный язык выполняет программа, называемая
ассемблером.
Чтобы лучше понять разницу, давайте взглянем на примеры,
которыми мы уже пользовались выше. Ассемблерная команда для
сложения содержимого регистров AX и BX проста:
ADD AX,BX
Аналогично, для вычитания регистра BX из регистра AX мы напишем:
SUB AX,BX
Ассемблер превращает эти предложения в форму, которую мы видели вы-
ше. Компьютер сам управляется с проблемой превращения файла с по-
нятным человеку текстом в программу на машинном языке, которую мог
бы выполнить процессор.
Язык ассемблера не похож на языки типа Фортран, Кобол или
Паскаль. Эти языки, как и многие подобные им, являются языками
высокого уровня. Языки высокого уровня разработаны для того, чтобы
можно было иметь дело непосредственно с задачей, решаемой
программой. В этом качестве они иногда называются процедурными
языками, поскольку описывают процедуру, используемую для решения
задачи. Языки высокого уровня машинно-независимы. Программа,
написанная на Фортране для IBM PC будет правильно работать и давать
те же самые результаты при выполнении на IBM/370. язык
программирования не зависит от машины.
Програмы же на языке ассемблера непосредственно относятся к той
машине, на которой они должны выполняться. Язык ассемблера машин-
нозависимый. Язык ассемблера для IBM PC принципиально отличен от
языка ассемблера для IBM/370. Это связано с тем, что команды языка
ассемблера почти один к одному переводятся в команды машинного
языка т.е. каждая команда языка ассемблера обычно преобразуется
точно в одну команду машинного языка. Поскольку машинные языки
разных компьютеров различны, то различаются и языки ассемблера.
Обычно каждое утверждение языка ассемблера генерирует одну команду
машинного языка. В некоторых случаях это не так, потому что
существуют команды, которые не являются частью выполняемой програм-
мы, а предназачены для ассемблера. Они описывают действия ассембле-
ра, который должен выполнять их во время ассемблирования. Пример
директивы ассемблеру (такой предназначенной только для него
команды) -
TITLE Пример Программы
Эта инструкция сообщает ассемблеру заголовок программы. После
трансляции ассемблером прграммы этот заголовок - "Пример
программы"- появляется в верхней части каждой страницы сообщений
ассемблера. Эта инструкция имеет смысл только для ассемблера. В
8088 нет команды, которая могла бы выполнить эту опреацию.