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