Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прогр_на_ассембл_для_WINLOWS.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
908 Кб
Скачать
☆
    1. . Компиляция

Файл с текстом на языке ассемблера должен иметь расширение asm. Компиляция как консольных, так и графических программ осуществляется программой tasm32.exe. Для системы программирования, представляющую собой совокупность консольных программ, существуют многочисленные графические оболочки. Мы сознательно в учебных целях будем пользоваться командной строкой, а разработка оболочки на ассемблере будет заданием, завершающим знакомство с ассемблером для программирования под Windows. Командную строку удобно держать в командном файле (расширение bat) в своем рабочем каталоге. Допустим, что мы вызываем компилятор, который находится на диске С в каталоге tasm5. Командная строка для того и другого приложения будет иметь вид:

C:\tasm5\bin\tasm32 /ml /zi /l <имя_файла>

где bin – подкаталог в каталоге tasm5

tasm32 – имя компилятора

/ml – обязательный ключ, заставляющий компилятор различать верхний и нижний регистры

/zi – необязательный ключ, заставляющий компилятор сохранять отладочную информацию

/l - необязательный ключ, заставляющий компилятор сохранить листинг трансляции в файле с расширением lst.

В результате компиляции, если в тексте не было ошибок, будет получен файл с расширением obj.

3.2. Компоновка

Для компоновщика исходным файлом является объектный файл. Командная строка будет содержать разные ключи в зависимости от характера приложения. По умолчанию получится консольное приложение.

C:\tasm5\bin\tlink32 /v <имя_файла>,,, C:\tasm5\lib\import32

Для графического приложения приведем командный файл для программы 2, т.е. для приложения с файлом ресурсов:

c:\tasm500\bin\tlink32 /v/aa Mymenu2,,,c:\tasm500\lib\ import32, ,Mymenu2

где bin – подкаталог в каталоге tasm5

tasm32 – имя компилятора

/v - необязательный ключ, заставляющий компоновщик сохранять отладочную информацию

/aa - ключ, заставляющий компоновщик получить графическое приложение

Mymenu2- имя объектного файла

Вторая и третья запятые означают, что мы согласны с тем, что имя исполняемого файла(exe) и файла карты загрузки(map) будет таким, как и у объектного файла.

Следующая затем часть командной строки указывает путь к библиотеке импорта. Пустое место между запятыми означает, что мы проигнорировали файл проекта. На последнем месте стоит имя файла ресурсов, который должен иметь расширение res и может быть получен с помощью компилятора ресурсов brcc32 из подкаталога bin.

В результате компоновки получится исполняемый файл с расширением exe.

Библиографический список

1. Пирогов В. Ю. Ассемблер для Winlfws. - СПб.: БХВ-Петербург, 2005. 864с.

  1. Петзолд Ч. Прогаммирование для Windows 95. Том Санкт-Петербург. BVH, 1997. 752 с.

  2. Текстовый и графический интерфейсы пользователей в операционной системе общего назначения: Методические указания к лабораторному практикуму по дисциплине "Системное программное обеспечение" /В.П. Кулюкин.- Екатеринбург: изд. УГТУ-УПИ, 2005.-88 с. Екатеринбург: изд. ИПК УГТУ, 2000. 52 с.

  3. Юров В. Assembler: Специальный справочник. 2-е изд. СПб.: Питер, 2004. 412 с.

  4. Управление памятью: Методические указания к лабораторному практикуму по дисциплинам "Операционные системы", "Системное программное обеспечение" /В.П. Кулюкин.- Екатеринбург: изд. УГТУ-УПИ, 2009.-64 с.

  5. Рудаков П.И. Язык ассемблера: уроки программирования /П.И. Рудаков, К.Г. Финогенов. – М.: ДИАЛОГ-МИФИ, 2001. 640 с.

  6. Чекатков А.А. Использование Turbo Assembler для разработки программ. – Киев: "Диалектика", 1995. 288 с.

Приложение 2

Директивы ассемблера

Синтаксис

Описание

.186

Допустимы команды 8086, 80186

.286С

Допустимы команды 80286, 8086

.286Р

Допустимы привелегированные команды 80286

.287

Допустимые команды 8087, 80287

.8086

Допустимые команды 8086

.8087

Допустимые команды 8087

<имя>=<выражение>

присваивает значению выражения символическое имя

ASSUME segreg:segname,...

описание содержимого регистровсегментов по умолчанию

COMMENT <ограничитель> <текст> <ограничитель>

указанный текст трактуется как комментарий

.CREF

формировать файл перекрестныхссылок

[<имя>] DB <значение>

распределение и инициализация байта памяти

[<имя>] DW <значение>

распределение и инициализация 2х байтов памяти

[<имя>] DD <значение>

распределение и инициализация 4хбайтов памяти

[<имя>] DQ <значение>

распределение и инициализация 8 байтов памяти

[<имя>] DT <значение>

распределение и инициализация 10 байтов памяти

ELSE

начало условного альтернативного блока

END [<имя>]

конец модуля и определение адреса точки входа

ENDIF

конец условного альтернативного блока

ENDM

конец макроопределения

<имя> ENDP

конец процедуры

<имя> ENDS

конец сегмента или описания шаблона структуры

<имя> EQU <выражение>

присваивает значению выражения символическое имя

.ERR

генерация ошибки

.ERR1

генерация ошибки 1-го прохода

.ERR2

генерация ошибки 2-го прохода

.ERRB<аргумент>

генерация ошибки, если аргументом является пробел

.ERRDEF <имя>

генерация ошибки, если имя было ранее определено как метка или переменная

.ERRE <выражение>

генерация ошибки, если выражение ложно (0)

.ERRDIF <стр1>.<стр2>

генерация ошибки, если строки различны

Продолжение приложения 2

.ERRIDN <стр1>.<стр2>

генерация ошибки, если строки идентичны

.ERRNB<аргумент>

генерация ошибки, если аргументом не является пробел

.ERRNDEF <имя>

генерация ошибки, если имя не было ранее определено

.ERRNZ <выражение>

генерация ошибки, если выражение истино

EVEN

установка указателя позиции на четный адрес

EXITM

выход из текущего макроопределения

EXTRN <имя>:<тип>

определение внешних имен

<имя> GROUP <имя сегм.>

определение имени группы сегментов

IF <выражение>

ассемблировать, если выражение истино

IF1

ассемблировать при 1-м проходе

IF2

ассемблировать при 2-м проходе

IFB

ассемблировать, если аргументом является пробел

IFDEF <имя>

ассемблировать, если имя было ранее определено как метка

IFDIF <арг.1>,< арг.2 >

ассемблировать, если аргументы различны

IFE <выражение>

ассемблировать, если выражение истино

IFIDN <арг.1>,< арг.2 >

ассемблировать, если аргументы идентичны

IFNB <аргумент>

ассемблировать, если аргументом не является пробел

IFNDEF <имя>

ассемблировать, если имя еще не определено

INCLUDE <имя файла>

Включить при ассемблировании текст файла

IRP<форм.имя>,<параметры>

блок повторения: формальное имя последовательно принимает значения параметров

IRC<форм.имя>,<параметры>

блок повторения: формальное имя последовательно принимает значения символьных параметров

<имя> LABEL <тип>

создать в текущей позиции новую переменную или метку

.LALL

печатать макрорасширения

.LFCOND

восстановить листинг условных блоков

.LIST

восстановить листинг программы

LOCAL <форм.имя>,….

объявление формальных имен в макро

<имя>MAKRO<форм.парам.>

начало макроопределения

NAME <имя>

изменить имя текущего модуля

PURGE <имя макро>

удалить макро

ORG <выражение>

установить указатель позиции

%OUT<текст>

выдать текст на терминал

Продолжение приложения 2

<имя> PROC <тип >

начало процедуры

PAGE <длина>,<ширина>

установка параметров листинга

PAGE+

переход на новую секцию листинга

PAGE

переход на новую страницу листинга

PUBLIC <имя>

определение общих имен

.RADIX <выражение>

установить систему исчисления по умолчанию

<имя> RECORD <поле>,…

описание шаблона записи для 8 или 16 – битовых записей

REPT

начало блока повторения

.SALL

подавить вывод макрорасширений

<имя> SEGMENT <атриб.>

начало сегмента

.SFCOND

подавить вывод условных блоков с ложными условиями

<имя> STRUC

начало шаблона структуры

SUBTTL <текст>

установить подзаголовок листинга

.IFCOND

установить режим печати условных блоков

TITLE <текст>

установить заголовок листинга

.XALL

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

.XCREF

подавить таблицу перекрестных ссылок

.XLIST

подавить листинг исходного файла

Приложение 3