Ill
ЯЗЫК АССЕМБЛЕРА МИКРОПРОЦЕССОРА 8088
Язык ассемблера — машинный язык, записанный в символической форме. В то время как адреса и команды в машинном языке суть числа, язык ассемблера разрешает присваивать адресам памяти неповторяющиеся имена, состоящие из букв. Так как исполнительные устройства микропроцессоров 8086 и 8088 идентичны, то и язык ассемблера 8088 также оказывается иден-тичным языку ассемблера 8086 и является частью языка ассемблера микропроцессоров 80186 и 80286, представляющих собой улучшенные модификации ЦП 8086.
Программа, написанная на языке ассемблера 8088, может быть переведена (транслирована) на машинный язык с помощью программы, называемой ассемблером. Ассемблер, описанный в данной книге, является макроассемблером фирмы Microsoft, используемым в персональном компьютере IBM с дисковой операционной системой PC-DOS.
Существуют и другие версии ассемблеров, приемлемые для семейства микропроцессоров 8086/8088, например ассемблер IASM-86, разработанный фирмой Intel Corporation, который (включает стандартные мнемонические команды, в том числе команды арифметических операций для чисел с плавающей запятой в процессоре 8087. Несмотря на имеющиеся различия между этими ассемблерами, их структуры и форматы команд языков в значительной степени совместимы.
Почему необходим язык ассемблера?
Очень неудобно, утомительно, а иногда и трудно писать программы непосредственно на машинном язьь ке. Программист при этом должен выполнить массу кропотливых и рутинных операций: следить за распределением ячеек в памяти микро-ЭВМ для записи команд или программных данных, чтобы затем можно было указать или определить эти адреса в программе; помнить действительные машинные команды, представляемые в двоичном или в шестнадцатеричном коде, и связанные с ними способы адресации микро-
98
процессора; все данные в программе должны быть преобразованы в двоичный код для того, чтобы их можно было включить в программу на машинном языке. Очевидно, что в результате такой работы может быть допущено много ошибок.
Язык ассемблера — способ символической записи программ на машинном языке. Например, код машинной команды ЗС02 (шестнадцатеричный) может быть записан в символической форме на языке ассемблера как CMP AL,02 (эта команда сравнивает содержимое регистра AL с шестнадцатеричным числом 02). Таким образом, рутинные преобразования машинных кодов и данных в программе, перечисленные выше, можно. максимально переложить на программу — ассемблер. Следовательно, основная цель ассемблера — трансляция программ, написанных на языке ассемблера, в машинный язык (машинные коды).
Ассемблер следит за использованными ячейками памяти, с тем чтобы команды в программе имели ссылки на эти адреса в символическом виде, используя имена и метки, заменяющие действительные значения. Например, машинный код в шестнадцатерич-ной записи С606001201 может быть записан на языке ассемблера как MOV BYTE-COUNT,01, где BYTE-COUNT есть символическое имя адреса памяти 1200Н.
Ассемблер допускает символическое представление констант и программных данных и осуществляет все необходимые их преобразования в соответствующие двоичные коды, вычисляет правильное число байтов или слов, необходимых для запоминания, и составляет таблицу имен или меток и соответствующих им адресов.
В языке ассемблера программист может написать процедуру (подпрограмму) как независимый и совершенно отдельный модуль. Ассемблер генерирует информацию, необходимую для того, чтобы при загрузке объектного модуля процедуры в память микропроцессора он мог бы быть объединен с другими модулями, содержащимися в отдельных библиотеках программ.
Изменение программ на языке ассемблера осуществляется значительно проще, чем изменение программ, написанных непосредственно на машинном языке. Например, вставка команд может изменить
4*
99
размещение адресов операндов или программных данных в памяти после места вставки. Поэтому, если программа написана в машинных кодах, программист должен изменить адреса всех операндов и программных данных, размещенных после введенной команды. Это очень утомительная и требующая больших затрат времени процедура, не говоря уже о том, что при ее выполнении возможны ошибки. Если вставка выполнена в программе, написанной на языке ассемблера, то перенумерация всех адресов операндов в памяти осуществляется автоматически в соответствии с новой структурой и размещением данных в измененной программе.
Ассемблер может выдать листинг (текст) исходной программы, который содержит первоначальные команды языка ассемблера, соответствующие коды машинного языка и данных, результаты диагностики и/или сообщения об ошибках, которые формируются во время процесса трансляции. Поэтому многие программные ошибки могут быть обнаружены предварительно на этапе трансляции. Листинг программ содержит символы, имена или метки, которые являются символическими представлениями констант или программных данных. Сам листинг представляет собой удобный инструмент для анализа и исправления ошибок, которые могут появляться во время отладки программ.
Формат программы
Каждое отдельное так называемое утверждение языка ассемблера, как правило, транслируется в одну машинную команду. В большинстве языков ассемблера каждое утверждение имеет четыре однозначно определенных поля, которые описывают различные атрибуты транслируемой команды. Этими полями являются поле метки, поле операции, поле операндов и поле комментариев. Каждое поле может быть переменной длины и должно быть отделено от соседних одним или более пробелами.
Первое поле используется для задания имени или символа ячейки памяти, содержащей команду, константу или данные. Адрес этой ячейки содержится в
100
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.