Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_2011.doc
Скачиваний:
65
Добавлен:
09.12.2018
Размер:
1.15 Mб
Скачать
  1. Особенности com-программы

COM- программа – односегментная программа.

  • Отсутствует стек.

  • Отсутствует сегмент данных.

  • Данные располагаются в сегменте кода.

Для обхода данных внутри кодового сегмента используется команда jmp. В начале программы должна присутствовать директива org 100h. Эта директива загружает регистр ip адресом 100h для обхода префикса программного сегмента (в момент загрузки программы в ОП регистр CS загружается адресом PSP).

Пример программы типа .Com

codesg segment para 'code'

assume cs:codesg, ds:codesg, ss:codesg

org 100h

begin:

jmp main

flda dw 250

fldb dw 125

fldc dw ? ; неинициализированные данные

main proc

mov ax, flda

add ax, fldb

mov fldc,ax

mov ax,4C00h

int 21h

main endp

codesg ends

end begin

Создание объектного модуля:

tasm/zi <имя>,,

Создание файла с расширением .com:

tlink /t <имя>,,

  1. Резидентные программы

DOS – однозадачная ОС, позволяет загружать на выполнение только одну программу, которая занимает все свободное адресное пространство. Загрузка очередной программы приводит к стиранию ранее загруженной программы.

Для сохранения программы в ОП необходимо оформить её по правилам написания резидентной программы. Тогда очередная загружаемая программа не будет стирать ранее загруженную.

Формат резидентной программы

Формат резидентной программы содержит три смысловые части:

  1. Собственно программу.

  2. Функцию записи в оп адреса точки входа программы для последующего вызова.

  3. Функцию, которая оставляет программу резидентной.

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

Резидентная программа может быть представлена в формате .exe-файла, или .com-файла.

Исполняемая часть программы должна заканчиваться директивой IRET.

  1. Пример резидентной программы типа .Com

cseg segment

org 100h

assume cs:cseg, ds:cseg, ss:cseg

; процедура

begin: jmp short setup

routine proc far

push ds ; сохранение регистров

; здесь тело процедуры

pop ds ; восстановление регистров

Iret ;возврат из процедуры

finish equ $ ; определение размера программы

routine endp ; конец процедуры

; установка вектора прерывания

setup:

mov dx, offset routine ; в dx загружается адрес процедуры

ds записан адрес сегмента

mov al, 70h ; выбранный номер прерывания

mov ah, 25h ; номер функции прерывания 21

int 21h

;оставляем программу резидентной

mov dx, finish ; размер программы

Int 27h ; оставляем программу резидентной

cseg ends

end begin

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

Для вызова резидентной программы достаточно ввести в нужное место кода транзитной программы команду int 70h.

Размещение векторов прерывания в оперативной памяти

Таблица векторов прерываний Обработчик прерывания

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]