Теперь мы подошли к наиболее необычному аспекту процессора 8086 сегментации памяти. Основной предпосылкой сегментации является следующее: процессор 8086 может адресоваться к 1 мегабайту памяти. Для адресации ко всем ячейкам адресного пространства в 1 мегабайт необходимы 20разрядные сегментные регистры. Однако процессор 8086 использует только 16разрядные указатели на ячейки памяти. Вспомним, например, что для ссылки на память Читать далее
Category Archives for Ассемблер
Ассемблер
Регистры
Регистр CS Регистр CS указывает на начало блока памяти объемом 64К, или сегмент кода, в котором находится следующая выполняемая инструкция. Следующая инструкция, которую нужно выполнить, находится по смещению, определяемому в сегменте кода регистром IP, то есть на нее указывает адрес (в форме «сегмент:смещение») CS:IP. Процессор 8086 никогда не может извлечь инструкцию из сегмента, отличного от Читать далее
Регистр SS
Регистр SS указывает на начало сегмента стека, которые представляет собой блок памяти объемом 64К, в котором находится стек. Все инструкции, которые неявно используют регистр SP (включая занесение в стек, извлечение из стека, вызовы и возвраты управления), работают с сегментом стека, так как только регистр SP может использоваться для адресации памяти в сегменте стека.
Набор инструкций процессора 8086
Для программиста ключевым ресурсом процессора 8086 является набор инструкций. Как мы уже обсуждали ранее, набор инструкций включает в себя все действия, которые программист может заставить выполнить процессор 8086. Полный набор инструкций Турбо Ассемблера приведен в Таблице 4.1.
Компьютеры IBM PC и XT
Мы сосредоточились на рассмотрении языка Ассемблера процессора 8086, но суть вопроса состоит в том, что процессор 8086 представляет собой часть вычислительной системы, а на программирование на языке Ассемблера в большой степени влияют аппаратная конфигурация и операционная система.
Устройства ввода и вывода
Во всех компьютерах IBM PC имеется клавиатура, дисплейный адаптер и монитор, а также дисковод на гибком диске. Часто также имеются такие устройство, как модемы, принтеры, «мышь» и жесткие диски. Каждое из этих устройств управляется с помощью весьма сложной последовательности обращений к портам вводавывода или памяти (или к тому и другому). Например, выбор нового видеорежима на Читать далее
Системное программное обеспечение для семейства IBM PC
Системное программное обеспечение это такое программное обеспечение, которое служит для управления и используется в качестве промежуточного уровня между прикладным программным обеспечением (например, Турбо Ассемблером или Quattro) и аппаратным обеспечением вашего компьютера (см. Рис. 4.9).
Операционная система DOS
Операционная система DOS (известная также, как PCDOS или MSDOS) это программа, которая управляет вашим компьютером с момента считывания им диска после включения питания и пока вы его не выключите. DOS занимает часть из 640К доступной оперативной памяти, но это малая плата за те трудности, с которыми пришлось бы столкнуться при ее отсутствии. DOS выводит на Читать далее
Получение символов с клавиатуры
Ввод информации с клавиатуры один из основных способов взаимодействия с компьютером IBM PC. DOS обеспечивает ряд функций, с помощью которых программа на ассемблере может обрабатывать нажатия клавиш. Мы обсудим только часть из них.
Вывод символов на экран
Если нажатия клавиш означают взаимодействие пользователя с программным обеспечением, то экран является дополнением. IBM PC оснащаются дисплеями различных типов, начиная от цветного текстового до графического с высоким разрешением, но в данный момент мы рассмотрим только вывод символов.
Вывод символов на экран
Теперь, когда вы немного знаете о чтении и записи в программе, давайте напишем простую программу, которая выполняет просто эхо-отображение строки набранных на клавиатуре символов на экране. Все необходимые для этого функции DOS, кроме одной, вы уже знаете. Эта последняя функция необходима, поскольку у вас нет способа завершить программу, когда она закончит выполнение.
Базовая система ввода-вывода
Иногда функции DOS не отвечают вашим потребностям. Тогда настал момент обратиться к базовой системе ввода-вывода IBM PC BIOS. В отличие от DOS и прикладных программ BIOS не загружается с диска и не занимает место в 640К доступной памяти. Вместо этого BIOS хранится в памяти, доступной только по чтению (ROM или ПЗУ), в той части адресного Читать далее
Выбор режима экрана
Наиболее решающей причиной использования BIOS является управление дисплеем, так как DOS практически не предусматривает поддержки широких возможностей дисплеев IBM PC. Только с помощью вызова функций BIOS вы можете установить режим экрана, управлять цветами, получить информацию о дисплейном адаптере и т.д. Например, следующий код вызывает BIOS и устанавливает экран графического адаптера CGA в четырехцветный графический режим:
Другие ресурсы
Для программиста, работающего на Ассемблере, в IBM PC предусмотрены также другие программные и аппаратные ресурсы. Мы не будем все их рассматривать, приведем только кратко некоторые из них (подробности вы можете найти в справочных материалах):
Основные элементы программы на языке Ассемблера
Теперь, когда вы поняли, почему язык Ассемблера является уникальным, можно заняться деталями программирования на Ассемблере. В этой главе вы узнаете об основных компонентах программы на Ассемблере. Сначала мы расскажем о минимальных требованиях к работающей программе на Ассемблере. Затем мы обсудим различные элементы строки, и как их можно сочетать друг с другом. Попутно мы расскажем много Читать далее
Зарезервированные слова
Зарезервированные или ключевые слова предназначены только для использования Турбо Ассемблером. Их нельзя использовать для определения присваиваний, меток или имен процедур. Ключевые слова следует рассматривать как элементы построения программы на Ассемблере. Эти слова приведены в Таблице 5.1 (включая операции +, *, , директивы .386, ASSUME, MASM, QUIRKS) и предопределенные идентификаторы ??time, ??version, @WordSize).
Формат строки
Строки исходного кода на языке Ассемблера имеют следующий формат: <метка> <инструкция/директива> <операнды> <;комментарий>
Метки
Метка не может совпадать с любым из используемых в выражениях встроенных символов, включая имена регистров (AX, BX и т.д.) и операторы, используемые в выражениях (PTR, BYTE, WORD и т.д.). В качестве меток нельзя также использовать любую из директив IFxxx или .ERRxxx. Несколько других зарезервированных в Турбо Ассемблере идентификаторов могут использоваться только в определенных контекстах. Эти Читать далее
Директива END
Каждая программа должна содержать директиву END, отмечающую конец исходного кода программы. Все строки, которые следуют за директивой END, Турбо Ассемблером игнорируются. Если вы опустите директиву END, то генерируется ошибка. Вы можете посчитать, что концом программы является конец файла, но это не так: всегда требуется указывать директиву END. END является типичной директивой в том смысле, что Читать далее
Операнды
Мнемоники инструкций и директивы сообщают Турбо Ассемблеру, что нужно делать. С другой стороны, операнды указывают Турбо Ассемблеру, какие регистры, параметры, ячейки памяти и т.д. нужно связать с каждым вхождением инструкции или директивы. Инструкция MOV (перемещение данных) сама по себе ничего не означает. Чтобы указать Турбо Ассемблеру, откуда нужно извлечь перемещаемое значение и где его сохранить, Читать далее
Регистровые операнды
Вероятно регистровые операнды являются наиболее часто используемыми в инструкциях операндами. Регистры могут использоваться в качестве источника (исходный операнд) или приемника (целевой операнд) и при некоторых обстоятельствах могут даже содержать адрес, на который нужно выполнить переход. С регистрами можно делать много того, чего нельзя делать с константами, метками или переменными в памяти. С другой стороны, имеются Читать далее
Выражения
Постоянные выражения можно использовать там же, где допускается использование постоянных значений (констант). Турбо Ассемблер поддерживает полное вычисление выражений, включая вложенные скобки, арифметические, логические операции и операции отношения, а также множество операций, предназначенных для таких целей, как выделение для меток сегмента и смещения и определение размера переменных в памяти.
Режимы адресации к памяти
Как при использовании операнда в памяти задать ту ячейку па-мяти, с которой вы хотите работать? Очевидный ответ состоит в том, чтобы присвоить нужной переменной в памяти имя (как мы это делали в последнем разделе). С помощью, например, следующих опе-раторов вы можете вычесть переменную памяти Debts (долги) из пе-ременной памяти Assets (имущество):
