Вход

Язык Ассамблер

Рекомендуемая категория для самостоятельной подготовки:
Реферат*
Код 149674
Дата создания 2007
Страниц 14
Источников 3
Мы сможем обработать ваш заказ (!) 19 марта в 12:00 [мск]
Файлы будут доступны для скачивания только после обработки заказа.
690руб.
КУПИТЬ

Фрагмент работы для ознакомления

Поскольку программные циклы используются часто, желательно эффективное управление циклом.
Команды цикла LOOP используют регистр CX в качестве счетчика цикла. Все эти команды неявно рассматривают регистр CX как счетчик итераций цикла. Простейшая команда среди них - команда LOOP. Команда LOOP уменьшает регистр CX и передает управление на метку, если содержимое регистра CX не равно 0. Если вычитание единицы из регистра CX не привело к нулевому результату, команда LOOP не делает перехода, и выполняется следующая команда.
3.1 СЕГМЕНТЫ И .EXE-ПРОГРАММ
Текст программы на языке ассемблер при помощи компилятора преобразуется в исполняемый машинный код. Однако до того момента, когда наша программа сможет выполняться процессором, еще далеко. Для того, чтоб это могло произойти, нам необходимо собрать при помощи линковщика наши отдельные куски исполняемого в кода исполняемый файл, понятный операционной системе. В различных операционных системах существуют различные конвенции и стандарты для исполняемых файлов. Например, в ОС MS DOS существуют форматы исполняемых файлов .com, .exe, .sys. Эти различные форматы используются в зависимости от того, каков тип исполняемой программы. Так, к примеру, .exe и .com представляют собой самостоятельные исполняемые программы, которые мы можем запустить из командной строки DOS, обычно имеющие явно заданную точку начала и точку окончания выполнения программы, в то время как .sys файлы представляют чаще всего драйверы – отдельные модули исполняемого кода, загружаемые в систему и выполняемые по мере вызова. В этом разделе мы будем говорить только о .exe файлах.
Мы упомянули о том, что исполняемый файл должен быть понятен операционной системе. Поясним, что под этим подразумевается. Обычная операционная система обладает таким программным средством, как загрузчик. В обязанности загрузчика входит считать исполняемый файл с диска, загрузить его в память, разделяя данные и исполняемый код, прописать в сегментные регистры (а также в специальные переменные) базовые адреса тех сегментов, в которые загрузчик поместил те сегменты, которые мы определили в файле, и по окончании совей работы передать исполнение нашей программе. В разделе 2.3 мы уже рассказали о сегментах, при помощи которых производится адресация памяти. Теперь поговорим о том, как информация о сегментах сохраняется в файле .exe., и рассмотрим работу загрузчика.
При загрузке программ в оперативную память DOS (дисковая операционная система) инициализирует как минимум три сегментных регистра: CS, DS и SS. Кодовый сегмент (CS) должен обязательно описываться в программе, все остальные сегменты могут отсутствовать. В этом случае загрузчик DOS при загрузке программы в оперативную память инициирует регистры DS и ES значением адреса префикса программного сегмента PSP (Program Segment Prefix) – специальной области оперативной памяти размером 256 (100h) байт.
PSP может использоваться в программе для определения имен файлов и параметров из командной строки, введенной при запуске программы на выполнение, объема доступной памяти, переменных окружения системы и т.д. Регистр SS при этом инициализируется значением сегмента, находящегося сразу за PSP, т.е. первого сегмента программы.
После инициализации в регистре IP находится смещение первой команды программы относительно начала кодового сегмента, адрес которого помещен в регистр CS. Процессор, считывая эту команду, начинает выполнение программы, постоянно изменяя содержимое регистра IP и при необходимости CS для получения кодов очередных команд до тех пор, пока не встретит команду завершения программы. DS после загрузки программы установлен на начало PSP, поэтому для его использования в первых двух командах программы выполняется загрузка DS значением сегмента данных.
Файл формата .exe содержит специальный заголовок, при помощи которого загрузчик выполняет настройку ссылок на сегменты в загруженном модуле.
Перед загрузкой .com или .exe-программы DOS определяет сегментный адрес, называемый префиксом программного сегмента (PSP), как базовый для программы. Затем DOS выполняет следующие шаги:
создает копию текущего окружения DOS (область памяти, содержащая ряд строк в формате ASCIIZ, которые могут использоваться приложениями для получения некоторой системной информации и для передачи данных между программами) для программы;
помещает путь, откуда загружена программа, в конец окружения;
заполняет поля PSP информацией, полезной для загружаемой программы (количество памяти, доступное программе; сегментный адрес окружения DOS; текущие векторы прерываний INT 22H INT 23H и INT 24H и т.д).
Программы в формате .exe могут иметь любое количество сегментов команд и сегментов данных.
Файл .exe-формата содержит специальный заголовок, при помощи которого операционная система выполняет настройку ссылок на сегменты во время загрузки программы.
4 РАСШИРЕННЫЕ ВОЗМОЖНОСТИ АССЕМБЛЕРА
4.1 МАКРОКОМАНДЫ
До настоящего момента мы говорили главным образом о командах ассемблера, которые соответствуют конкретным директивам процессора. Однако, рассматривая листинг любой программы на языке ассемблер, легко заметить, что в коде встречаются также псевдокоманды. Такими псевдокомандами являются, к примеру, уже упомянутые нами команды выделения памяти: DB, DW или ключевые слова. Впрочем, расширенные возможности ассемблера не ограничиваются этими простыми командами; язык ассемблера предоставляет программисту мощный аппарат макросов, значительно упрощающий написание программы и зачастую делающий ее удобочитаемой.
Что представляет собой макрокоманда? Макрокоманда - это программный инструмент, который позволяет программисту создавать собственные операции ассемблера. На самом деле макроопределения относятся к механизму препроцессора. Макропроцессор позволяет определять новые коды операций для процессора. В этом определении программист, в частности, сообщает ассемблеру текст выполняемой операции. Когда ассемблер встречает в тексте программы этот определенный программистом код операции, он обращается к сохраненному определению макрокоманды и помещает в транслируемый участок программы текст из этого определения. Например, в программе могут быть определены в качестве макрокоманд часто используемые последовательности команд. Вместо того, чтоб каждый раз повторять в тексте программы эту последовательность, программист может определить ее отдельно как макрокоманду, а потом ссылаться на нее по тому названию, которое он дал ей в этом определении.
В использовании макрокоманды можно выделить два шага. На первом шаге макрокоманда определяется в программе. Программист присваивает ей имя и определение. Определение состоит из операций ассемблера и команд, которые будут генерироваться каждый раз при появлении имени макрокоманды. Синтаксис определения может отличаться в разных компиляторах; типичным является, например, такой синтаксис:
<MACRO_NAME> MACRO
operators list
ENDM
Второй шаг - применение макрокоманды. Это происходит, когда ассемблер встречает ее имя в качестве кода операции. Ассемблер заменяет это имя указанными в определении командами.
Макрокоопределение также может содержать аргументы, которые можно использовать в теле макрокоманды. При ссылке на макрокоманду подставляется фактический аргумент, которым препроцессор заменяет все вхождения условного аргумента в макрокоманде.
Макрокоманды схожи с подпрограммами тем, что позволяют переиспользовать одиножды написанный код, однако отличаются от них тем, что в случае подпрограмм исполняемый код подпрограммы записан в одном месте программы, и при его вызове исполнение передается подпрограмме, т.е. в регистр IP записывается тот адрес, по которому находится этот код. В то же время при трансляции программы, которая использует макрокоманду, оттранслированный код макрокоманды, заданный в определении, вставляется во все те места, где на него существует ссылка. Вопрос, в каких случаях предпочтительно использовать макрокоманды, а в каких – подпрограммы, не имеет однозначного ответа, но вообще можно указать следующие соображения. Вызов подпрограммы, в особенности FAR-вызов, занимает больше процессорного времени и прерывает целостность конвейера. Макрокоманды же вставляются всюду в код; если мы имеем дело с большими и часто используемыми последовательностями команд, определение их в качестве макрокоманд сделает код очень большим по объему. Ещё один недостаток макрокоманд – их нельзя вызывать из сторонней программы.
4.2 УСЛОВИЯ ТРАНСЛЯЦИЯ
Еще один мощный инструмент, предоставляемый большинством ассемблеров с расширенными функциями – это ассемблирование по условию. Эта возможность позволяет нам выделить некоторый блок кода и обусловить его трансляцию выполнением некоторого условия. В зависимости от того, удовлетворено или нет условие, ассемблер транслирует или не транслирует этот код. Эта возможность используется, например, в тех случаях, когда необходимо работать одновременно с несколькими версиями одной программы, имея возможность легко переключаться между ними. Такая необходимость может возникнуть, если мы работаем c debug- и release-версиями программы. Полезна условная трансляция и в тех случаях, когда программист желает создать универсальные макрокоманды, применимые при разных параметрах.
4.3 СТРУКТУРНЫЙ АССЕМБЛЕР
Ещё одна заслуживающая упоминания возможность, которую предоставляет ассемблер расширенной функциональности посредством макрокоманд – это фактически использование структурного стиля программирования в ассемблере. Под структурным стилем мы понимаем наличие условных операторов и операторов цикла наподобие блоков IF … THEN … ELSE … ENDIF или WHILE. Используя эту возможность, мы делаем код программы более удобным для чтения, чётко определяем его структуру, как это делается в языках высокого уровня, сохраняя при этом все преимущества ассемблерной программы.

Список литературы [ всего 3]

1.Д. Брэдли – Программирование на языке ассемблера для IBM PC.
2.С.В. Зубков – Assembler. Язык неограниченных возможностей.
3.Сайт http://ru.wikipedia.orrg
Очень похожие работы
Пожалуйста, внимательно изучайте содержание и фрагменты работы. Деньги за приобретённые готовые работы по причине несоответствия данной работы вашим требованиям или её уникальности не возвращаются.
* Категория работы носит оценочный характер в соответствии с качественными и количественными параметрами предоставляемого материала. Данный материал ни целиком, ни любая из его частей не является готовым научным трудом, выпускной квалификационной работой, научным докладом или иной работой, предусмотренной государственной системой научной аттестации или необходимой для прохождения промежуточной или итоговой аттестации. Данный материал представляет собой субъективный результат обработки, структурирования и форматирования собранной его автором информации и предназначен, прежде всего, для использования в качестве источника для самостоятельной подготовки работы указанной тематики.
bmt: 0.00487
© Рефератбанк, 2002 - 2024