Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
программирование и основы алгоритмизации.doc
Скачиваний:
34
Добавлен:
21.08.2019
Размер:
4.84 Mб
Скачать

Обработка прерываний

Прерывание — это временное прекращение основного процесса вычислений для выполнения некоторых запланированных или незапланированных действий, вызванных работой аппаратуры или программы.

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

В зависимости от источника прерывания классифицируют так:

  • аппаратные — возникают как реакция микропроцессора на физический сигнал от некоторого устройства компьютера (клавиатура, системный таймер, жесткий диск и т.д.); по времени возникновения эти прерывания асинхронны, то есть возникают в случайные моменты времени;

  • программные — вызываются искусственно с помощью соответствующей команды из программы (команда int); предназначены для выполнения некоторых действий операционной системы; являются синхронными;

  • исключения — программные, являющиеся реакцией микропроцессора на нештатную ситуацию, возникшую внутри микропроцессора во время выполнения некоторой команды программы.

Создание исполняемого файла

Трансляция модуля на ассемблере проходит две стадии.

Двум стадиям трансляции соответствуют две основные программы MASM: ассемблер ML.EXE и редактор связей LINK.EXE.

Исполняемым форматом в Windows является формат PE. Сокращение PE означает Portable Executable, т.е. переносимый исполняемый формат. Этот формат имеют как ЕХЕ-файлы, так и динамические библиотеки (.DLL). Фирма Microsoft ввела «новый» формат и для объектных модулей - это COFF-формат (COFF - Common Object File Format).

1 стадия

Программа ассемблера ML.EXE имеет синтаксис:

ML [параметры] имя_файла.asm [/link опции_редактора_связей]

Атрибут [параметры] может принимать следующие значения:

Параметр

Комментарий

/?, /help

Вывод помощи.

/AT

Создать файл в формате .СОМ. Для программирования в Windows этот ключ, естественно, бесполезен.

/Bl<linker>

Использовать альтернативный компоновщик. Предполагается автоматический запуск компоновщика.

/c

Компиляция без компоновки.

/Ср

Сохранение регистров пользовательских идентификаторов. Может использоваться для дополнительного контроля.

/Cu

Приведение всех пользовательских идентификаторов к верхнему регистру.

/Сх

Сохранение регистров пользовательских идентификаторов, объявленных PUBLIC и EXTERNAL.

/coff

Создание объектных файлов в стандарте coff. Применение обязательно.

/D<name>=[строка]

Задание текстового макроса. Очень удобен для отладки с использованием условной компиляции.

/ЕР

Листинг: текст программы с включаемыми файлами.

/F <hex>

Размер стека в байтах. Размер стека по умолчанию равен 1 Мб.

/Fe<file>

Имя исполняемого файла. Имеет смысл без параметра /с.

/Fl<file>

Создать файл листинга.

/Fm<file>

Создать map-файл. Имеет смысл без опции /с.

/Fo<file>

Задать имя объектного файла.

/Fpi

Включение кода эмулятора сопроцессора. Начиная с 486-ого микропроцессора, данный параметр потерял актуальность.

/Fr<file>

Включить ограниченную информацию браузера.

/FR<file>

Включить полную информацию браузера.

/G<c|d|z>

Использовать соглашение вызова Паскаль, Си, stdcall.

/H<number>

Установить максимальную длину внешних имен.

/I<name>

Добавить путь для inc-файлов. Допускается до 10 опций /I.

/link <opt>

Опции командной строки компоновщика. Имеет смысл без опции /с.

/nologo

Не показывать заголовочный текст компилятора.

/Sa

Листинг максимального формата.

/Sc

Включить в листинг синхронизацию.

/Sf

Листинг первого прохода.

/Sl<number>

Длина строки листинга.

/Sn

Не включать в листинг таблицу символов.

/Sp<number>

Высота страницы листинга.

/Ss<string>

Текст подзаголовка листинга.

/St<string>

Текст заголовка листинга.

/Sx

Включить в листинг фрагменты условной компиляции.

/Ta<file>

Для компилирования файлов, расширение которых не .asm.

/W<number>

Устанавливает перечень событий компиляции, трактуемые как предупреждения.

/WX

Трактовать предупреждения как ошибки.

/w

Тоже что /W0 /WX.

/X

Игнорировать путь, установленный переменной окружения INCLUDE.

/Zd

Отладочная информация состоит только из номеров строк.

/Zf

Объявить все имена PUBLIC.

/Zi

Включить полную отладочную информацию.

/Zm

Включить совместимость с MASM 5.01.

/Zp<n>

Установить выравнивание структур.

/Zs

Выполнять только проверку синтаксиса.

Параметр [/link опции_редактора_связей] предполагает автоматический запуск редактора связей (2 стадия трансляции) при успешном получении объектного модуля. Компиляция без компоновки осуществляется с использованием параметра /c.

В Visual Studio параметры командной строки ассемблера можно посмотреть в окне Properties проекта после выбора «инструмента» Microsoft Macro Assembler.

2 стадия

Программа LINK.EXE имеет синтаксис:

LINK [параметры] [файлы] [@файл_параметров]

Атрибут [параметры] может принимать следующие значения:

Параметр

Комментарий

/ALIGN:number

Определяет выравнивание секций в линейной модели. По умолчанию 4096.

/BASE:{address|

@filename,key}

Определяет базовый адрес (адрес загрузки). По умолчанию для ЕХЕ-программы адрес 0х400000, для DLL — 0х10000000.

/COMMENT:["]comment["]

Определяет комментарий, помещаемый в заголовок ЕХЕ- и DLL-файлов.

/DEBUG

Создает отладочную информацию для ЕХЕ- и DLL-файлов. Отладочная информация помещается в pdb-файл.

/DEBUGTYPE:{CV|COFF|

BOTH}

CV — отладочная информация в формате Microsoft,

COFF — отладочная информация в формате COFF (Common Object File Format),

BOTH — создаются оба вида отладочной информации.

/DEF:filename

Определяет DEF-файл (файл определений).

/DEFAULTLIB:library

Добавляет одну библиотеку к списку используемых библиотек.

/DLL

Создать DLL-файл.

/DRIVER[:{UPONLY|WDM}]

Используется для создания NT-драйвера (Kernel Mode Driver).

/ENTRY:symbol

Определяет стартовый адрес для ЕХЕ- и DLL-файлов.

/EXETYPE:DYNAMIC

Данная опция используется при создании VxD-драйвера.

/EXPORT:entryname

[=internalname]

[,@ordinal[,NONAME]]

[,DATA]

Данная опция позволяет экспортировать функцию из вашей программы так, чтобы она была доступна для других программ. При этом создается import-библиотека.

/FIXED[:NO]

Данная опция фиксирует базовый адрес, определенный в опции /BASE.

/FORCE[:{MULTIPLE|

UNRESOLVED}]

Позволяет создавать исполняемый файл, даже если не найдено внешнее имя или имеется несколько разных определений.

/GPSIZE:number

Определяет размер общих переменных для MIPS и Alpha платформ.

/HEAP:reserve[,commit]

Определяет размер кучи (HEAP) в байтах. По умолчанию этот размер равен одному мегабайту.

/IMPLIB:filename

Определяет имя import-библиотеки, если она создается.

/INCLUDE:symbol

Добавляет идентификатор к таблице имен.

/INCREMENTAL:{YES|NO}

Если установлена опция /INCREMENTAL:YES, то в ЕХЕ добавляется дополнительная информация, позволяющая быстрее перекомпилировать этот файл. По умолчанию это информация не добавляется.

/LARGEADDRESSAWARE[:NO]

Указывает, что приложение оперирует адресами, большими 2 Гб.

/LIBPATH:dir

Определяет библиотеку, которая в первую очередь разыскивается компоновщиком.

/MACHINE: {ALPHA|ARM|IX86|MIPS|MIPS16|MIPSR41XX|PPC|SH3

|SH4}

Определяет платформу. В большинстве случаев это делать не приходится.

/MAP[:filename]

Дает команду создания МАР-файла.

/MAPINFO:{EXPORTS|FIXUPS|LINES}

Указывает компоновщику включить соответствующую информацию в МАР-файл.

/MERGE:from=to

Объединить секцию "from" с секцией "to" и присвоить имя "to".

/NODEFAULTLIB[:library]

Игнорирует все или конкретную библиотеку.

/NOENTRY

Необходимо для создания DLL-файла.

/NOLOGO

Не выводить начальное сообщение компоновщика.

/OPT:{ICF[,iterations]

|NOICF|NOREF|NOWIN98|REF|

WIN98}

Определяет способ оптимизации, которую выполняет компоновщик.

/ORDER:@filename

Оптимизация программы путем вставки определенных инициализированных данных (COMDAT).

/OUT:filename

Определяет выходной файл.

/PDB: {filename|NONE}

Определить имя файла, содержащего информацию для отладки.

/PDBTYPE:{CON[SOLIDATE]|

SEPT[YPES]}

Определяет тип РDВ-файла.

/PROFILE

Используется для работы с профайлером (анализатором работы программы).

/RELEASE

Помещает контрольную сумму в выходной файл.

/SECTION:name,[E][R][W][S][D]

[K][L][P][X]

Данная опция позволяет изменить атрибут секции.

/STACK:reserve[,commit]

Определяет размер выделяемого стека. Commit — определяет размер памяти, интерпретируемый операционной системой.

/STUB:filename

Определяет STUB-файл, запускающийся в системе MS DOS.

/SUBSYSTEM:{NATIVE

|WINDOWS|CONSOLE|

WINDOWSCE|POSIX}

[,#[.##]]

Определяет, как запускать ЕХЕ-файл.

CONSOLE — консольное приложение,

WINDOWS — обычные WINDOWS-приложения,

NATIVE — приложение для Windows NT,

POSIX — создает приложение в POSIX-подсистеме WINDOWS NT.

/SWAPRUN:{CD|NET}

Сообщает операционной системе скопировать выходной файл в swap-файл (WINDOWS NT).

/VERBOSE[:LIB]

Заставляет выводить информацию о процессе компоновки.

/VERSION:#[.#]

Помещает информацию о версии в ЕХЕ-заголовок.

/VXD

Создать VXD-драйвер.

/WARN[:warninglevel]

Определяет количество возможных предупреждений, выдаваемых компоновщиком.

/WS:AGGRESSIVE

Несколько уменьшает скорость выполнения приложения (Windows NT). Операционная система удаляет данное приложение из памяти в случае его простоя.

В Visual Studio параметры командной строки редактора связей можно посмотреть в окне Properties проекта.

Пусть файл с текстом программы на языке ассемблера называется PROG.ASM, тогда две стадии трансляции будут выглядеть следующим образом:

c:\masm32\bin\ml /c /coff PROG.ASM - в результате появляется модуль PROG.OBJ,

c:\masm32\bin\link /SUBSYSTEM:WINDOWS PROG.OBJ - в результате появляется исполняемый модуль PROG.EXE.