Федеральное агентство по образованию
Государственное образовательное учреждение высшего профессионального образования
“Московский государственный университет приборостроения и информатики”
Филиал Сергиев Посад специальность 230101
Кафедра ИТ4 “Персональные компьютеры и сети”
Дисциплина Системное программное обеспечение
Пояснительная записка
к курсовому проекту
Вариант №3
Студент А.Н.
Группа ИТ4-2006-01Д шифр 06022
Проект защищён на оценку
Руководитель проекта (работы)
Члены комиссии
Сергиев Посад 2009
Содержание
Постановка задачи. 3
Блок схема. 4
Описание интерфейса программы. 5
Листинг программы. 6
Написать программу на языке assembler, которая будет реализовывать функции команды copy в ms-dos, включая возможность слияния двух файлов в один.
Для запуска программы необходимо запустить командный файл start.bat, в котором заранее прописаны команды, необходимые для компилирования, создания исполняемого файла и его запуска с передачей необходимых параметров.
Внешний вид окна программы.
|
Формат записи в командной строке программы:
1. Имя_файла_источника имя_нового_файла - если необходимо скопировать данные из старого файла в новый.
2. Имя_файла_источника1 имя_файла_источника2 имя_нового_файла – если необходимо скопировать и объединить данные из двух файлов в один новый.
Между именами файлов обязательно должен стоять один пробел.
Имена файлов могут быть произвольными.
.model small ; модель памяти "small"
.stack 100h ; стэк размером 256 байт
.data ; сегмент данных
source1 db 128 dup(0) ; массив байт, строка, в ктоторую бдет записан путь источника №1
source2 db 128 dup(0) ; массив байт, строка, в ктоторую бдет записан путь источника №2
destination db 128 dup(0) ; массив байт, строка, в ктоторую бдет записан путь назначения
buffer db 1024 dup (0) ; буфер для копирования файлов
.code ; сегмент кода
_start: ; точка входа
mov bp, 0 ; признак того, что копируем только один файл
cld ; сбрасываем флаг направления, чтобы все строковые операции выполнялись в прямом порядке
; копируем из командной строки путь источника и назначения
; параметры, переданные в командную строку расположены по смещению 80h
; ищем пробел, разделяющий пути источника и назначения
mov al, ' ' ; заносим в AL то, что будем искать, то есть пробел
xor ch, ch ; обнуляем CH
mov cl, byte ptr ds:[80h] ; в CL заносим количество символов в командной строке
mov di, 82h ; в DI заносим адрес начало командной строки
repne scasb ; ищем
; как только пробел будет найден DI будет указывать на следующий после пробела символ
mov bx, di ; сохраним в регистр BX значение DI
; копируем в строку source1 символы, находящиеся до пробела
mov cx, di ; заносим в CX адрес следующего за пробелом символа
sub cx, 83h ; корректируем CX так, чтобы получилось количество символов до пробела
mov si, 82h ; в SI адрес начала копируемой строки
mov ax, @data ; заносим в AX адрес начала сегмента данных
mov es, ax ; и из AX помещаем его в ES
mov di, offset source1 ; в DI адрес строки куда копировать
rep movsb ; копируем
; ищем второй пробел
xor ch, ch ; обнуляем CH
mov cl, byte ptr ds:[80h] ; в CL заносим количество символов в командной строке
add cx, 82h ; корректируем CX так, чтобы получилось количество символов после пробела до конца строки
sub cx, bx
inc si ; в SI адрес начала строки после первого пробела
mov ax, ds ; копируем DS в ES
mov es, ax
mov al, ' ' ; заносим в AL то, что будем искать, то есть проел
mov di, si ; копируем его в DI
repne scasb ; ищем
jne _no_second_source ; копируем символы после пробела в строку destination, если не нашли второй пробел
mov bp, 1 ; признак того, что будем сливать два файла в один
mov dx, di ; сохраним в регистр DX значение DI
; копируем в строку source2 символы, находящиеся до второго пробела
mov cx, di ; заносим в CX адрес следующего за пробелом символа
sub cx, bx ; корректируем CX так, чтобы получилось количество символов до пробела
dec cx
mov si, bx ; в SI адрес начала копируемой строки
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.