Машинный язык и язык ассемблера

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

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

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

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

0000001111000011B (или 03C3H)

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

0010101111000011B (или 2BC3H)

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

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

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

Чтобы продемонстрировать, как по-разному воспринимаются эти языки, вернемся к примеру, рассмотренному выше. На языке ассемблера команда сложения содержимого регистров AX и BX есть просто

ADD AX,BX

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

SUB AX,BX

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

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

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

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

TITLE Example Program

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

Хостинг от uCoz