Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
___МЕТОДИЧКИ_2013 / __2_TASM_Копытов.doc
Скачиваний:
30
Добавлен:
15.03.2016
Размер:
154 Кб
Скачать

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. Объектный файл содержит машинные коды команд, но исполняться не может, поскольку не настроен на конкретные адреса памяти.

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

Соседние файлы в папке ___МЕТОДИЧКИ_2013