Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Программа типа com на макроассемблере



1.В программах, предназначенных для создания исполняемых модулей типа.COM, должен быть только один сегмент – сегмент кода. Начальная загрузка сегментного регистра DS не требуется. Применяется дополнительная директива org 100h. С ее помощью выделяется память для программного префикса – области памяти объемом в 100h байт, которая используется для хранения служебной информации о программе.

Исполняемый модуль программы типа.COM в десятки раз короче исполняемого модуля типа.EXE для программы, выполняющей те же действия. Поэтому программы типа.COM часто используют для постоянно загруженных в память компьютера программ (резидентных программ).

Преобразуем программу z1_pr1.asm в программу типа.СОМ. Скопируйте файл z1_pr1.asm (без стирания) в другой файл, например z1_pr2.asm, и преобразуйте последний в программу типа.COM в соответствии с приведенным ниже текстом.

;=================================================================

title Програма 2 (типа COM);имя текстового файла - z1_pr2.asm

;------------------------------------------------------------------------------------------------------------

text segment 'code';начало сегмента, содержащего текст;программы – сегмент кода с именем text

org 100h;выделение области памяти в начале

;сегмента размером в 100h для служебной

;информации

assume cs:text, ds:text, es:text, ss:text;регистры cs, ds, es, ss

;связаны здесь с единственным сегментом

;------------------------------------------------------------------------------------------------------------

;Определения

stdout equ 1

lf equ 10; код ASCII перевода строки

cr equ 13;код ASCII возврата каретки

;------------------------------------------------------------------------------------------------------------

myproc proc;начало процедуры по имени myproc

;Вывод на экран строки текста " Работаешь на ПК – изучи ассемблер "

mov AH,40h;номер функции вывода в байт AH

mov BX,stdout;дискриптор монитора в регистр BX

mov CX,meslen;длину сообщения в регистр CX

mov DX,offset mes;адрес (смещение) mes в регистр DX

int 21h;прерывание MS DOS, которое при

;наличии функции 40h в байте AH

;выводит строку на экран

;Завершение программы – возвращение в родительский процесс

outprog: mov AH,4Ch;номер функции завершения в AH

mov AL, 00h;код завершения

int 21h;прерывание MS DOS, которое при

;наличии функции 4Сh в байте AH

;обеспечивает возврат в систему

myproc endp;конец тела процедуры

;------------------------------------------------------------------------------------------------------------

;Поля данных

mes db ' Работаешь на ПК – изучи ассемблер ',cr,lf

meslen equ $-mes;в meslen длина выводимого сообщения

;------------------------------------------------------------------------------------------------------------

text ends;конец сегмента кода

;------------------------------------------------------------------------------------------------------------

end myproc;конец программы

;=================================================================

2.Проведите трансляцию программы. Если есть сообщения об ошибках, исправьте их.

3.Компоновка объектного должна быть произведена с опцией /t, с помощью которой создается файл типа.com: команда tlink /t z1_pr2,z1_pr2

4.Запустите программу для выполнения.

5.Сравните объемы памяти, занимаемые исполняемыми модулями программ: z1_pr1.exe и z1_pr2.com.

Контрольные вопросы

1.Перечислите сегменты, которые входят в состав ассемблерной программы. Обязательно ли наличие всех сегментов в ней? Чем отличаются структуры текстов программ типа.EXE и типа.COM?

2.Какова роль в программе директивы assume? Почему ее написание различно для программ типа.exe и программ типа.COM?

3.Зачем необходима двухстрочная комбинация

mov AX,data

mov DS,AX

для программ типа.exe и почему ее нет в программах типа.COM?

4.Объясните, как следует понимать фразу: «…функция 40h прерывания 21h»? Что выполняют функции 40h и 4ch прерывания 21h? Необходима ли для их работы дополнительная информация? Если да, то какая?

5.На какой адрес указывает значок $ в команде: meslen equ $-mes? Можно ли написать так: meslen=$-mes?

Литература

1. Юров В., Хорошенко С. Assembler:учебный курс – СПб: Питер Ком, 1999. – 672 с.:ил.

2. Абель П. Язык Ассемблера для IBM PC и программирования / Пер. с англ. Ю.В.Сальникова.- М.: Высш. шк., 1992.- 447 с.:ил.

3. Майко Г.В. Ассемблер для IBM PC: - М.: «Бизнес-Информ», «Сирин», 1997. – 212 с.

4. Финогенов К.Г. Самоучитель по системным функциям MS-DOS. – Изд.2, перераб. и дополн.- М.: Радио и связь, Энтроп, 1995. – 382 с., ил.

5. Данкан Р. Профессиональная работа в MS-DOS: Пер. с англ. – М.: Мир, 1993. – 509 с., ил.

6. Джордейн Р. Справочник программиста персональных компьютеров типа IBM PC, XT и AT: Пер. с англ. / Предисл. Н.В.Гайского. – М.: Финансы и статистика, 1992.- 544 с.: ил.





Дата публикования: 2014-12-10; Прочитано: 622 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...