Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!