- •Министерство образования и науки Российской Федерации Федеральное государственное бюджетное образовательное учреждение
- •«Комсомольский-на-Амуре государственный технический университет»
- •1 Основные сведения
- •1.1 Структура программы на Ассемблере
- •1.1.1 Программа типа сом
- •1.1.2 Программа типа ехе
- •1.2 Порядок работы с tasm. Создание exe-файла
- •3) Компоновка
- •4) Выполнение
- •1 0000 .Model small
- •1) Редактирование
- •2) Ассемблирование
- •2 Задание к лабораторной работе
1.1.2 Программа типа ехе
ЕХЕ-программы немного сложнее, но для них отсутствует ограничение размера в 64 килобайта, так что все достаточно большие программы используют именно этот формат. Конечно, ассемблер позволяет уместить и в 64 килобайтах весьма сложные и большие алгоритмы, а все данные хранить в отдельных файлах, но ограничение размера все равно очень серьезно, и даже чисто ассемблерные программы могут с ним сталкиваться.
Рассмотрим примерный порядок расположения операторов в ассемблерной программе EXE-формата.
.model small ;модель памяти
.stack 100h ;сегмент стека объемом 256 байт
.data ;сегмент данных
pr1 db 'Пример данных' ;переменная pr1 с байтовыми данными
pr2 dw 1999 ;переменная pr2 с словными данными
pr3 dd 245C27FEh ;переменная pr3 с двойным словом
.code ;сегмент кода
main proc ;начало основной процедуры с именем main
;две команды настройки регистра ds на начало сегмента данных
mov ax, @data ;заносим адрес сегмента данных в рег. ax
mov ds, ax ;пересылка ax в ds
;далее текст программы
mov bx, pr2 ;переслать в регистр bx переменную pr2
call subpr ;вызов подпрограммы с именем subpr
mov ah, 4Ch ;функция DOS завершения программы
mov al, 00h
int 21h ;вызов прерывания с номером 21h
main endp ;конец процедуры main
subpr proc ;подпрограмма с именем subpr
;далее текст подпрограммы
add pr2, 43 ;прибавить к переменной pr2 число 43
ret ;команда возврата из подпрограммы
subpr endp ;завершение подпрограммы subpr
end main ;конец главной программы main
Данный пример программы построен с использованием упрощенных директив сегментации. В общем случае главная программа включает основную процедуру main и подпрограммы.
Рассмотрим исходный текст простой программы типа ЕХЕ hello-2.asm.
.model small
.STACK 100h
.DATA
mess db 'Hello World! ', 0Dh, 0Ah, '$'
.CODE
main proc
mov ax, @DATA
mov ds, ax
mov dx, offset mess
mov ah, 9
int 21h
mov ah, 4Ch
mov al, 00h
int 21h
main endp
end main
В этом примере определяются три сегмента — сегмент стека директивой .STACK, сегмент данных, начинающийся с .DATA и содержащий строку, и сегмент кода, начинающийся с директивы .CODE. При запуске ЕХE-программы регистр DS уже не содержит адреса сегмента со строкой mess (он указывает на сегмент, содержащий блок данных PSP), а для вызова используемой функции DOS этот регистр должен иметь сегментный адрес строки. Команда MOV AX, @DATA загружает в АХ сегментный адрес сегмента данных DATA, a MOV DS, AX копирует его в DS.
И наконец, программы типа ЕХЕ должны завершаться вызовом функции 4Ch DOS: в регистр АН помещается значение 4Ch, в регистр AL помещается код возврата, после чего вызывается прерывание 21h.
1.2 Порядок работы с tasm. Создание exe-файла
Для создания программы необходимо выполнить следующие этапы (рис. 1).
1) С помощью текстового редактора, формирующего текст в ASCII кодах, создать исходный файл с расширением .ASM на языке ассемблера (например, hello-2.ASM). Текст программы желательно сохранить в каталоге ~\TASM\BIN, чтобы не указывать к нему путь.
2) Применить программу TASM.EXE для ассемблирования исходного файла. Для этого нужно ввести и запустить командную строку:
TASM /L hello-2.
Вызывать командную строку удобно, запуская ярлык B32TOOLS из каталога ~\TASM\BIN. Если исходный файл не содержал ошибок, в результате ассемблирования на диске будет создан объектный файл hello-2.OBJ. Объектный файл содержит машинные коды команд, но исполняться не может, поскольку не настроен на конкретные адреса памяти.

Создание новой программы
