Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
49
Добавлен:
15.04.2015
Размер:
104.96 Кб
Скачать

Тексты программ

TITLE PRER (COM)

CSEG SEGMENT

ORG 100H

ASSUME CS:CSEG, DS:CSEG, SS:CSEG, ES:CSEG

BEGIN PROC FAR

JMP INIT

MAS DB 'Резидентная программа сработала',0Ah,0Dh,24h

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

;Вход в секцию резидентной программы

ENTRY:

PUSH DS ;Программа сохраняет

PUSH AX ;содержимое

PUSH DX ;регистров в стеке.

PUSH CS ;Настройка регистра

POP DS ;сегмента данных.

MOV AH,9 ;Вывод

MOV DX,OFFSET MAS ;сообщения

INT 21H ;на экран.

POP DX ;Восстанавливаем

POP AX ;содержимое

POP DS ; регистров.

IRET ;Возврат в транзитную программу

FINISH: ;Конец резидентной части программы

BEGIN ENDP

;Инициализация резидентной программы

INIT:

MOV DX,OFFSET ENTRY ;адрес точки входа

MOV AL,60h ;номер прерывания

MOV AH,25h ;номер функции

INT 21h ;установить вектор прерывания

; Программа остается резидентной

MOV DX,OFFSET FINISH ;размер резидентной части программы

INT 27h

CSEG ENDS

END BEGIN

Рис. 1. Резидентная программа PRER.ASM

TITLE START (EXE)

SSEG SEGMENT PARA STACK 'STACK'

DB 60 DUP (0)

SSEG ENDS

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

DSEG SEGMENT

TMAS DB 'О Т Л И Ч Н О !!!!',0AH,0DH,24H

DSEG ENDS

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

CSEG SEGMENT PARA 'CODE'

BEGIN PROC FAR

ASSUME SS:SSEG, CS:CSEG, DS:DSEG

MOV AX, DSEG

MOV DS, AX

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

MOV AH,9 ;Вывод сообщения

MOV DX, OFFSET TMAS ;на экран.

INT 21H

MOV AX,4C00h ;Выход в систему

INT 21h

BEGIN ENDP

CSEG ENDS

END BEGIN

Рис. 2. Стартовая программа START.ASM

TITLE PRER1(COM)

CSEG SEGMENT

ORG 100H

ASSUME CS: CSEG,DS: CSEG,SS: CSEG, ES:CSEG

BEGIN PROC FAR

JMP INIT

MAS DB 'РЕЗИДЕНТНАЯ ПРОГРАММА ЗАПУЩЕНА',0ah,0dh,24h

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

;начало резидентной программы

ENTRY:

PUSH DS ;Программа сохраняет

PUSH AX ;содержимое регистров

PUSH DX ;в стеке

PUSH CS ;Загрузка сегментного

POP DS ;регистра данных

;Вывод собственного сообщения mas на экран

MOV AH,9

MOV DX,OFFSET MAS

INT 21H

MOV AX, 40H ;Читаем адрес строки

MOV ES, AX ; TEXT в стартовой программе

MOV DX, ES:0F4H

MOV AX, ES:0F6h

MOV DS, AX ; Вывод строки TEXT

MOV AH, 9 ; на экран

INT 21h

POP DX ;Восстановление

POP AX ;содержимого

POP DS ;регистров

RET ;Выход в транзитную программу

FINISH: ;Конец резидентной части программы

BEGIN ENDP

; Инициализация резидентной части программы

INIT:

MOV AX, 40H ;Начало сегмента области межзадачных связей

MOV ES, AX

MOV ES:0f0h, OFFSET ENTRY ;Загрузка адреса программы

MOV ES:0f2h, CS ;в область межзадачных связей

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

; Программа остается резидентной

MOV DX, OFFSET FINISH

INT 27h

CSEG ENDS

END BEGIN

Рис. 3. Резидентная программа PRER1.ASM

TITLE START1 (EXE)

SSEG SEGMENT PARA STACK 'STACK'

DB 60 DUP (0)

SSEG ENDS

DSEG SEGMENT

MAST DB ’СТАРТОВАЯ ПРОГРАММА ЗАВЕРШЕНА, $’

TEXT DB ‘ИНФОРМАЦИЯ ИЗ СТАРТОВОЙ ПРОГРАММЫ, $’

DSEG ENDS

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

CSEG SEGMENT PARA 'CODE'

BEGIN PROC FAR

ASSUME SS:SSEG, CS:CSEG, DS:DSEG

MOV AX, DSEG

MOV DS, AX

MOV AX, 40H ; Адрес сегмента области межзадачных

MOV ES, AX ;связей в регистр ES

MOV AX, OFFSET TEXT

MOV ES: 0F4H, AX ;загружаем адрес

MOV ES: 0F6H, DS ; строки TEXT

CALL DWORD PTR ES: 0F0H ;Вызов резидентной программы

MOV AH, 9 ;Вывод на экран строки MAST

MOV DX, OFFSET MAST

INT 21H

MOV AX, 4C00h ;Выход в систему

INT 21h

BEGIN ENDP

CSEG ENDS

END BEGIN

Рис. 4. Стартовая программа START1.ASM

12

Соседние файлы в папке Резидентные_программы