Виконав:
студент групи АП-30б
Шпіка П. М.
Перевірив:
Межерицький С. Г.
1. Тема роботи: Завантаження.
2. Мета роботи: Освоїти принципи завантаження програм на виконання в системі MS DOS, вивчити структуру виконуваних файлів (COM, EXE).
3. Постановка задачі для лабораторної роботи: Для даної лабораторної роботи необхідно розробити програму, що завантажує в пам'ять на виконання модуль, що виконується (COM чи EXE), не використовуючи EXEC.
4. Текст програми завантажника LOADER.ASM:
stack segment stack
dw 0fffh
stack ends
data segment
str3 db "Управление вернулось...",7,10,13,'$'
str2 db 10,13,"Память освободилась...",10,13,'$'
str1 db 10,13,"Память не выделяется !!!",10,13,"$"
str4 db 10,13,"Ошибка открытия файла !!!",10,13,"$"
str5 db 10,13,"usage: load1 filename",10,13,"$"
file dw ?
data ends
code segment
assume ds:data,cs:code,ss:stack,es:code
usage: mov dx,offset str5
mov ah,09H
int 21H
mov ax,4CFFH
int 21H
begin:
mov ax,data
mov ds,ax
mov sp,400h
mov ah,4AH
mov bx,400H
int 21H
mov di,0080H
search: inc di
cmp byte ptr es:[di],0DH
jz usage
cmp byte ptr es:[di],20H
jz search
mov [file],di
mov bx,0081H
add bl,es:[bx-1]
mov byte ptr es:[bx],00H
mov ax,3d00h ;открытие
mov dx,file ;файла
push ds
push es
pop ds
int 21h ;на чтение
pop ds
jnc isopen
jmp notopen
isopen:
xor dx,dx ;определение
xor cx,cx ;размера
mov bx,ax ;открытого
mov ax,4202h ;файла
int 21h ;в байта
push ax ;сохранение возвращенного размера файла
push ax ;сохранение еще раз
mov ax,3e00h ;закрытие
int 21h ;файла
pop ax ;вычисление
push ax ;размера
mov bx,10h ;памяти
div bx ;который
sub bx,dx ;надо
pop ax ;выделить
add ax,100h ;в параграфах
add ax,bx ;по
mov bx,10h ;формуле:
div bx ;(ax+100h+ax%10h)/10h
xor ah,ah ;или (ax+256+ax%16)/16
mov bx,ax ;выделение памяти
mov ah,48h ;размером bx параграфов
int 21h ;в ах возвращается начало участка ax:0000
jc exit ;если неt памяти выход
push ax ;сохранение начала выделенной памяти
mov ax,3d00h ;открытие
mov dx,file ;файла
push ds
push es
pop ds
int 21h ;на чтение
pop ds
jc notopen
mov bx,ax ;описатель в bx
pop ax ;чтение из
pop cx ;
push ds
push ax ;
mov ah,3fh ;com-файла
pop ds ;числа байт сх
mov dx,100h ;по адресу
int 21h ;ds:100h
mov dx,ds
pop ds
mov ah,3eh ;закрытие
int 21h ;файла
int 3
;ПОДГОТОВКА К ПЕРЕДАЧЕ УПРАВЛЕНИЯ
cli
push ss
pop ax
push es
pop bx
push ds
pop cx
push dx
pop ss
mov sp,4
push ax ;save old ss
push bx ;save old es
push cx ;save old cs
push cs
lea bx,return
push bx
mov es,dx
mov ds,dx
sti
push dx
push 100h
xor ax,ax
xor bx,bx
xor dx,dx
xor cx,cx
int 3h
retf
notopen:
lea dx,str4
mov ah,9
int 21h
jmp endo
exit:
lea dx,str1
mov ah,9
int 21h
jmp endo
return:
mov ax,es
pop ds ;восстановление
pop es ;сегментных
pop ss ;регистров
mov es,ax ;освобождение
mov ah,49h ;выделеного
int 21h ;блока памяти
jc s
lea dx,str2
mov ah,9H
int 21h
s:
lea dx,str3
mov ah,9
int 21h
endo:
mov ah,4ch ;выход из
int 21h ;ДОС
code ends
end begin
5. Висновки: У процесі виконання даної лабораторної роботи був освоєний механізм завантаження операційною системою MS DOS дочірніх процесів, вивчена структура виконуваних модулів.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.