Мы уже видели, как из нулей и единиц, хранимых в ЭВМ, формируются  числа.Теперь мы посмотрим как комбинации тех же значений 0 и 1  могут быть использованы для программирования компьютера.

Машинная программа представляет собой последовательность команд (инструкций).  Эти команды "объясняют" компьютеру, что он  должен делать.  Это похоже на рецепты в кулинарной книге.  В  рецепте имеется описание действий, которые необходимы для  приготовления определенного блюда.  Подобным образом, компьютер  имеет последовательность команд, которые точно описывают ему  последовательность действий.  Этот набор команд называется  программой.  Процесс построения корректного набора команд  называют программированием компьютера.  В нашей аналогии с рецептом  рецепт является программой, а тот кто его написал - программистом.  Роль компьютера здесь играет повар, готовящий еду.

Реальная программа, которую выполняет компьютер, это последовательность единиц и нулей, связанных с памятью компьютера. Эту строку бит принято называть машинным языком. Машинный язык  -  это тот  язык который машина понимает. Компьютер извлекает команды машинного  языка из памяти точно определенным способом. Затем компьютер выполняет команду, обозначенную данной конфигурацией бит. Этот цикл изв-  лечения и исполнения будет разобран в одном из последующих разделов  данной главы.

Однако машинный язык мало о чем говорит людям.  Если вы хотите  сложить два числа в 8088 (например, содержимое регистров AX BX -  краткое описание регистров сейчас последует), команда будет  выглядеть таким образом:

  0000001111000011B  (или 03C3H)

Эти два байта точно указывают компьютеру какую операцию произвести.  Аналогично, для вычитания двух чисел (вычитание регистра BX из регистра AX) мы будем иметь в машинном языке

  0010101111000011B  (или 2BC3H)

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

Язык ассемблера, как язык программирования, т.е. более понятный  программисту, чем  машинный, язык, все  еще сохраняет все  значения  машинного языка.  Компьютер читает программы на языке ассемблера и  переводит их в машинный язык, в ту форму, которая понятна ЭВМ. Этот  процесс, называемый "ассемблированием" программы,  фактически  является переводом  с одного языка  на другой. Операцию  перевода с  языка ассемблера  на машинный язык  выполняет программа, называемая  ассемблером.

Чтобы лучше понять разницу, давайте взглянем на примеры,  которыми мы уже пользовались выше.  Ассемблерная команда для  сложения содержимого регистров AX и BX проста:

  ADDAX,BX

Аналогично, для вычитания регистра BX из регистра AX мы напишем:

  SUBAX,BX

Ассемблер превращает эти предложения в форму, которую мы видели выше. Компьютер сам управляется с проблемой превращения файла с понятным человеку текстом в программу на машинном языке, которую мог  бы выполнить процессор.

Язык ассемблера не похож на языки типа Фортран, Кобол или  Паскаль. Эти языки, как и многие подобные им, являются языками  высокого уровня.  Языки высокого уровня разработаны для того, чтобы  можно было иметь дело непосредственно с задачей, решаемой  программой.  В этом качестве они иногда называются процедурными  языками, поскольку описывают процедуру, используемую для решения задачи. Языки высокого уровня машинно-независимы.  Программа,  написанная на Фортране для IBM PC будет правильно работать и давать  те же самые результаты при выполнении на IBM/370.  язык  программирования не зависит от машины.

Программы же на языке ассемблера непосредственно относятся к той  машине, на которой они должны выполняться. Язык  ассемблера  машиннозависимый. Язык  ассемблера для IBM  PC принципиально отличен от  языка ассемблера для IBM/370. Это  связано с тем, что команды языка  ассемблера  почти один  к одному  переводятся в  команды машинного  языка т.е. каждая  команда языка  ассемблера обычно  преобразуется  точно в одну  команду  машинного языка. Поскольку  машинные языки  разных компьютеров различны,  то различаются  и языки  ассемблера.  Обычно каждое утверждение языка  ассемблера генерирует одну команду  машинного языка.  В  некоторых случаях  это  не так,  потому что  существуют команды, которые не являются частью выполняемой программы, а предназначены для ассемблера. Они описывают действия ассемблера, который  должен выполнять их  во время ассемблирования.  Пример  директивы ассемблеру (такой  предназначенной  только для  него  команды) -

  TITLE Пример Программы

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