CodeNet / Языки программирования / Ассемблер / СПРАВОЧНИК по системе программирования ТУРБО АССЕМБЛЕР 2.0
СПРАВОЧНИК по системе программирования ТУРБО АССЕМБЛЕР 2.0
Компьютеры IBM PC и XT ----------------------------------------------------------------- Мы сосредоточились на рассмотрении языка Ассемблера процес- сора 8086, но суть вопроса состоит в том, что процессор 8086 представляет собой часть вычислительной системы, а на программи- рование на языке Ассемблера в большой степени влияют аппаратная конфигурация и операционная система. Подавляющее большинство когда-либо написанных для процессора 8086 программ (и, возможно, большинство программ, написанных за время существования ЭВМ) написаны для компьютеров IBM PC и XT и совместимых с ними машин, которые работают под управлением опера- ционной системы MS-DOS (далее мы будем просто называть это семей- ство компьютеров IBM PC). Вы также, вероятно, планируете разраба- тывать программы на Ассемблере для операционной среды IBM PC. Без знания аппаратной конфигурации и операционной системы, под управлением которой будут работать ваши программы, нельзя вы- полнить ввод или вывод данных или даже завершить работу програм- мы. Мы не будет обсуждать все возможности компьютеров IBM PC и системного программного обеспечения, но расскажем о некоторых ос- новных характеристиках IBM PC, предполагая, что вы самостоятельно изучите соответствующие книги и руководства. Устройства ввода и вывода ----------------------------------------------------------------- Во всех компьютерах IBM PC имеется клавиатура, дисплейный адаптер и монитор, а также дисковод на гибком диске. Часто также имеются такие устройство, как модемы, принтеры, "мышь" и жесткие диски. Каждое из этих устройств управляется с помощью весьма сложной последовательности обращений к портам ввода-вывода или памяти (или к тому и другому). Например, выбор нового видеорежима на цветном графическом адаптере (CGA) требует выполнения более 30 инструкций OUT, а последовательности инструкций, использующиеся для управления клавиатурой, модемом или диском еще более сложные. Означает ли это, что для написания на Ассемблере полезных программ для IBM PC вам потребуется освоить бесконечные последо- вательности инструкций управления? Вовсе нет, системное прог- раммное обеспечение вашего IBM PC выполнит за вас большую часть этой работы. Системное программное обеспечение для семейства IBM PC ----------------------------------------------------------------- Системное программное обеспечение - это такое программное обеспечение, которое служит для управления и используется в ка- честве промежуточного уровня между прикладным программным обеспе- чением (например, Турбо Ассемблером или Quattro) и аппаратным обеспечением вашего компьютера (см. Рис. 4.9). -------------------------------------------------------------- | Прикладное программное обеспечение | -------------------------------------------------------------- | | | | V | | -------------------------------------- | | | DOS | | | | (обращение а DOS через функции | | | | INT 21 и другие прерывания) | | | -------------------------------------- | | | | | V V | --------------------------------- | | BIOS | | | (обращение к базовой системе | | | ввода-вывода (BIOS) через | | | функции BIOS с помощью неко- | | | торых прерываний) | | --------------------------------- | | V V -------------------------------------------------------------- | Аппаратное обеспечение IBM PC | | Дисплейный адаптер, клавиатура, принтер, диск, "мышь", | | джойстик и т.д. Обращение к устройствам - через порты | | ввода-вывода и ячейки памяти (зависит от конкретных | | устройств) | -------------------------------------------------------------- Рис. 4.9 Программное обеспечение DOS и BIOS с точки зрения управления и интерфейсного уровня. В частности, системное программное обеспечение обрабатывает все сложности организации интерфейса с отдельными устройствами. Например, для того, чтобы обработать на вашем компьютере IBM PC одно нажатие клавиши, требуется программа в несколько сотен строк на Ассемблере, однако ваша программа может получить символ (код) клавиши с помощью только одной системной функции. Это стало воз- можным с помощью двух основных компонентов системного программно- го обеспечения IBM PC: операционной системы DOS и базовой системы ввода-вывода BIOS. Как можно видеть на Рис. 4.9, системы программного обеспе- чения DOS и BIOS служат управляющим и промежуточным уровнем между прикладным программным обеспечением и аппаратным обеспечением IBM PC. Прикладное программное обеспечение всегда имеет возможность управлять аппаратными средствами непосредственно, но лучше по возможности пользоваться функциями DOS и BIOS. Операционная система DOS ----------------------------------------------------------------- Операционная система DOS (известная также, как PC-DOS или MS-DOS) - это программа, которая управляет вашим компьютером с момента считывания им диска после включения питания и пока вы его не выключите. DOS занимает часть из 640К доступной оперативной памяти, но это малая плата за те трудности, с которыми пришлось бы столкнуться при ее отсутствии. DOS выводит на экране подсказ- ку A> или C> (или другую подсказку, если она задана на вашем компьютере). Именно DOS воспринимает и выполняет такие команды, как DIR. Но это только видимая часть DOS. В операционной системе пре- дусмотрено также большое число функций, которые широко использу- ются любой прикладной задачей. С помощью функций DOS прикладные задачи выполняют чтение из файлов и запись в них данных, получают символы клавиш, или устанавливают и получают текущее время. Нап- ример, фрагмент программы на Ассемблере: . . . mov ah,2 ; функция DOS вывода символа mov dl,'A' ; A - это символ, который ; нужно вывести на экран int 21h . . . вызывает функцию DOS вывода на экран, чтобы вывести символ A в текущей позиции курсора. Функции DOS следует вызывать, где это возможно, для таких операций, как ввод с клавиатуры или из файла, вывод на экран или в файл и печать информации. Поскольку сама операционная система DOS - это не что иное, как программа на Ассемблере, ваши програм- мы на Ассемблере могут делать все то, что делает операционная система, но это нельзя назвать хорошим методом программирования. Не все РС-подобные компьютеры одинаковы, и DOS часто скрывает различия между ними. Таким образом, если вы игнорируете функции DOS и выходите непосредственно на аппаратуру, ваши программы мо- гут не работать на других машинах. Кроме того может оказаться, что программы, работающие в об- ход DOS, не смогут сосуществовать с другими программами, напри- мер, с такими резидентными в памяти программами, как SideKick и SuperKey. К тому же зачем писать лишний код, когда DOS уже сдела- ла для вас эту работу? Короче, если функция DOS может выполнить то, что вам нужно, используйте ее. Основным справочником по функциям DOS может служить "Спра- вочное руководство по DOS". (Имеется также ряд полезных русскоя- зычных и англоязычных справочных программ по DOS, в которых можно найти всю информацию по функциям DOS и BIOS.) В том случае, когда DOS не обеспечивает нужную вам функцию, можно использовать функцию BIOS. Мы кратко расскажем о функциях BIOS, но давайте сначала рассмотрим наиболее существенные функции DOS, выполняющие ввод, вывод и завершение программы. Получение символов с клавиатуры ----------------------------------------------------------------- Ввод информации с клавиатуры - один из основных способов взаимодействия с компьютером IBM PC. DOS обеспечивает ряд функ- ций, с помощью которых программа на ассемблере может обрабатывать нажатия клавиш. Мы обсудим только часть из них. Возможно одним из наиболее простых способов получения симво- лов клавиш является функция "Ввод с клавиатуры", то есть функция DOS номер 1. Функции DOS вызываются путем помещения номера функ- ции в регистр AH и выполнения затем инструкции INT 21h. (Действи- тельная работа инструкции INT несколько более сложна, но сейчас вам требуется только знать, что каждый раз при вызове функции DOS вы должны выполнять инструкцию INT 21h.) Следующий набранный на клавиатуре символ возвращается в регистре AL. Например, когда выполняется код: . . . mov ah,1 int 21h . . . операционная система DOS помещает следующий набранный на клавиа- туре символ в регистр AL. Заметим, что если клавиша не нажата, DOS будет ждать, когда она будет нажата, поэтому для выполнения данной функции может потребоваться неопределенное время. Вывод символов на экран ----------------------------------------------------------------- Если нажатия клавиш означают взаимодействие пользователя с программным обеспечением, то экран является дополнением. IBM PC оснащаются дисплеями различных типов, начиная от цветного тексто- вого до графического с высоким разрешением, но в данный момент мы рассмотрим только вывод символов. Функция DOS с номером 2 обеспечивает наиболее непосредствен- ный путь вывода символа на экран. Для этого нужно просто помес- тить 2 в регистр AH и выводимый символ в регистр DL, а затем вы- звать DOS с помощью INT 21h. Следующий код отображает каждый вве- денный символ на экране: . . . mov ah,1 int 21h ; получить код следующей нажа- ; той клавиши mov ah,2 mov dl,al ; переместить считанный ; символ из AL в DL int 21h ; вывести его на экран . . . Имеется также ряд других функций для считывания и вывода символов и строк символов. Некоторые из них вы найдете в примерах программ данного руководства. Поскольку для описания всех функций DOS потребуется целая книга, мы не можем здесь рассказать обо всех функциях. Однако мы настоятельно рекомендуем вам изучить хотя бы некоторые из соответствующих книг и руководств и узнать о функциях DOS поподробнее, поскольку они являются в программирова- нии на Ассемблере ключевым ресурсом. Есть еще одно замечание, которое нужно сделать относительно клавиатуры, экрана и файлового ввода и вывода на языке Ассембле- ра. Те из вас, кто пользовался функциями scanf и printf в языке Си или функциями Readln n Writeln в Паскале, возможно с удивлени- ем узнают, что в DOS не предусмотрено форматного ввода и вывода. DOS выполняет только посимвольный или построчный ввод-вывод. В Си для печати целой переменной вам требуется сделать следующее: printf("\\d\n",i); Си автоматически преобразует целое значение, которое хранит- ся в 16-битовой ячейке памяти, в строку символов кода ASCII и пе- чатает символы. В Ассемблере ваша программа должна явно преобра- зовывать переменные в строки символов, перед тем, как вывести их на экран. Аналогично, DOS знает только, как считывать символы и строки символов с клавиатуры, поэтому вам придется писать прог- раммы, преобразующие вводимые пользователем строки и символы в другие данные. В конце следующей главы мы покажем вам пример программы, ил- люстрирующий все то, что вам нужно сделать, чтобы напечатать зна- чение переменной. Сейчас запомните только, что функции DOS могут печатать символы или строку символов, и ничего более. Функция по преобразованию данных в символ, с которым может работать DOS, возлагается на вас.