48218 (608501)

Файл №608501 48218 (Програми – аналоги DOS-програм ren, xcopy)48218 (608501)2016-07-30СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла

Міністерство освіти та науки України

Кіровоградський Державний Технічний університет

Кафедра програмного забезпечення

Курсова робота

з дисципліни “Програмування на мові ASM-86” на тему:

Програми – аналоги DOS-програм ren, xcopy

Зміст

  1. Вступ

  2. Постановка задачі

  3. Обґрунтування вибору методів розв’язку задачі

  4. Алгоритм програми

  5. Реалізація програми

  6. Системні вимоги

  7. Інструкція для користувача

  8. Висновки.

  9. Використана література

Лістинг програми

1. Вступ

З файлами на диску можна проводити певні операції – зокрема перейменовувати та копіювати. У даній роботі розглянуті програми, які дозволяють перейменувати файл і скопіювати задані файли та каталоги. Програми написані на мові ASM-86.

2. Постановка задачі

Необхідно написати програми для перейменування файлів та копіювання файлів і підкаталогів (аналоги REN, XCOPY).

3. Обґрунтування вибору методів розв’язку задачі

Для роботи з файлами в можна використовувати його системний сервіс, який зосереджено в перериванні 21h. Зокрема, використовуються такі функції:

56h – перейменувати файл

3ch – створити файл

3dh – відкрити файл

3eh – закрити файл

40h – читати з файла блок

41h – записати блок у файл

Для перегляду дерева підкаталогів зручно використовувати рекурсивну функцію, яку викликати при вході в підкаталог. Для пошуку будемо використовувати функції 4eh (findfirst) I 4fh (findnext).

4. Алгоритм програми

Алгоритм перейменування файла

1. Занести в пам’ять комадний рядок

2. Викликати функцію 56h

3. Якщо була помилка, то вивести повідомлення.

Алгоритм копіювання файлів

1. Проаналізувати командний рядок

2. Знайти всі файли в поточному каталозі, які відповідають заданій масці

3. Для кожного файла викликати функцію copy_file

4. Якщо не було задано ключ /s, то закінчити перегляд

5. Знайти всі підкаталоги

6. Зайти в кожен підкаталог диску і рекурсивно перейти в п. 2.

7. При завершенні повернутися у вихідний каталог

8. Кінець

5. Реалізація програми

Програма складається з функцій. Після запуску програми викликається функція process_commandline для аналізу командного рядка. Потім відбувається виклик функції process_files, яка копіює всі файли в заданому каталозі в заданий. Копіювання здійснюється за допомогою функції copy_file.

Якщо було задано параметр копіювання підкаталогів, викликається функція process_directory, яка шукає всі підкаталоги в даному і для кожного рекурсивно викликає функцію process_files.

Після обробки всіх файлів і каталогів виконання програми завершується. При копіюванні файлів виводиться ім’я кожного.

6. Системні вимоги

Операційна система DOS

CPU INTEL 8086 або ст.

RAM 640 K

VIDEO CGA або старший

7. Інструкція для користувача

Для використання програми перейменування файлів треба вказати:

k_ren letter.doc letter.txt

Якщо не виникне помилок, то файл буде перейменовано.

Для копіювання треба вказати такий рядок:

k_xcopy *.com c:\utils [/s]

де *.com – маска для файлів, які треба копіювати, c:\utils – каталог, куди треба копіювати, а необов’язковий ключ /s вказує на те, що в копіювання треба включити також підкаталоги даного підкаталогу. При копіюванні буде створено точну копію частини дерева.


8. Висновки

Завдяки виконанню курсового проекту створені програми для перейменування файлів та копіювання групи файлів. Вони є прикладом роботи з файловою системою засобами MS-DOS і демонструє елементи системного програмування для IBM PC.

9. Використана література

1. Майко Г. В. Assembler для IBM PC. М., 1997

2. Лекції з дисципліни “Програмування на мові ASM-86”

Додаток. ЛІСТИНГ ПРОГРАМИ

K_XCOPY.ASM

.model tiny

.code

org 100h

start:

jmp begin

mem_errmsg db 'Memory allocation error.$'

file_errmsg db 'Files error!$'

param_err db 'Parameters error! Example: k_xcopy c:\*.* d: [/s]$'

all_dirs db '*.*',0

up_dir db '..',0

handle_1 dw 0

handle_2 dw 0

orig_date dw 0

orig_time dw 0

process_dirs db 0 ;вкл. пiдкаталоги

filename_1 db 100 dup(0) ;1 параметр _xcopy

filename_2 db 100 dup(0) ;2 параметр _xcopy

targetname db 100 dup(0) ;сюди буде формуватися iм`я файла призначення

;;;;;;;;;;;;;;;;

;копiювання файла

;ds:si - ASCIIZ старий файл

;ds:di - ASCIIZ новий файл

;;;;;;;;;;;;;;;;

copy_file proc

;видiлити пам`ять

mov ah,48h

mov bx,2048

int 21h

jnc mem_ok

jmp mem_err

mem_ok:

mov es,ax ;сегмент видiлений для копiювання

;open file for read

mov ah,3dh

xor al,al

mov dx,si

int 21h

jc file_error

mov word ptr handle_1,ax

;get date

mov bx,ax

mov ax,5700h

int 21h

mov word ptr orig_time,cx

mov word ptr orig_date,dx

;open file for write

mov ah,3ch

xor cx,cx

mov dx,di

int 21h

jc file_error

mov word ptr handle_2,ax

push ds

push es

pop ds

xor dx,dx

;read block

next_block:

mov ah,3fh

mov bx,word ptr cs:handle_1

mov cx,32768

int 21h

cmp ax,0 ;eof

je stop_copy

;write to file

mov cx,ax

mov ah,40h

mov bx,word ptr cs:handle_2

int 21h

jmp next_block

stop_copy:

pop ds

;set date

mov ax,5701h

mov bx,word ptr handle_2

mov cx,word ptr orig_time

mov dx,word ptr orig_date

int 21h

;close files

mov ah,3eh

mov bx,word ptr handle_1

int 21h

mov ah,3eh

mov bx,word ptr handle_2

int 21h

;attrib

mov ah,43h

xor al,al

mov dx,offset filename_1

int 21h

mov ah,43h

mov al,1

mov dx,offset filename_2

int 21h

;звiльнити

mov ah,49h

int 21h

jc mem_err

ret

file_error:

mov ah,9

mov dx,offset file_errmsg

int 21h

mov ah,4ch

int 21h

mem_err:

mov ah,9

mov dx,offset mem_errmsg

int 21h

mov ah,4ch

int 21h

copy_file endp

;;;;;;;;;

;end copy_file

;;;;;;;;;

;;;;;;;;;;

;process_dirs

;;;;;;;;;;

process_directory proc

;взнати адресу DTA

mov ah,2fh

int 21h ;es:bx - DTA

;findfirst

mov ah,4eh

mov cx,10h

mov dx,offset all_dirs ;*.*

int 21h

dfindnext:

jnc zzz

jmp dstop_search ;кiнець пошуку

zzz:

cmp byte ptr [bx+15h],10h

jne not_dir

cmp byte ptr [bx+1eh],'.'

je not_dir

;отже,знайдено пiдкаталог

;1) до filename_2 додати його назву

mov di,offset filename_2

mov cx,100

xor ax,ax

repnz scasb

dec di

mov si,bx

add si,1eh

mov cx,13

rep movsb

;2) створити каталог filename_2

mov ah,39h

mov dx,offset filename_2

int 21h

;3) до filename_2 додати \

mov di,offset filename_2

mov cx,100

xor ax,ax

repnz scasb

dec di

mov byte ptr [di],'\'

mov byte ptr [di+1],0

push di

;4) перейти в знайдений каталог

mov ah,3bh

mov dx,bx

add dx,1eh

int 21h

jc skip_thisd

;5) зберегти DTA

sub sp,2bh

cld

mov di,sp

mov si,bx

mov cx,2bh

rep movsb

;6) call process_files

call process_files

;7) вiдновити DTA

mov di,bx

mov si,sp

mov cx,2bh

rep movsb

add sp,2bh

;8) chdir ..

mov ah,3bh

mov dx,offset up_dir

int 21h

skip_thisd:

;9) вiд filename_2 вiдняти назву

pop di

sub di,2

std

mov al,'\'

mov cx,13

repnz scasb

mov byte ptr [di+2],0

cld

not_dir:

;робимо findnext

mov ah,4fh

int 21h

jmp dfindnext

dstop_search: ;стоп пошуку

ret

process_directory endp

;;;;;;;;;;;;

;process_dirs

;;;;;;;;;;;;

;;;;;;;;

;process_files

;;;;;;;;

;копiювання файлiв в 1 каталозi

process_files proc

;взнати адресу DTA

mov ah,2fh

int 21h ;es:bx - DTA

;findfirst

mov ah,4eh

xor cx,cx

mov dx,offset filename_1

int 21h

findnext:

jc stop_search ;кiнець пошуку

;;copy

;побудувати targetname

push es

;копiюємо path

mov si,offset filename_2

mov di,offset targetname

push ds

pop es

fil0: lodsb

cmp al,0

je stop_fil0

stosb

loop fil0

stop_fil0:

;додати filename

mov si,bx

add si,1eh

fil1:

lodsb

cmp al,0

je stop_fil1

stosb

loop fil1

stop_fil1:

mov byte ptr [di],0

mov si,bx

add si,1eh

mov di,offset targetname

push bx

call copy_file

pop bx

pop es

;видати iм`я файла

mov si,bx

add si,1eh

cont_inc:

mov al,[si]

cmp al,0

je stop_inc

inc si

jmp cont_inc

stop_inc:

mov byte ptr [si],10

mov byte ptr [si+1],13

mov byte ptr [si+2],'$'

mov dx,bx

add dx,1eh

mov ah,9

int 21h

;;copy

;робимо findnext

mov ah,4fh

int 21h

jmp findnext

stop_search: ;стоп пошуку

cmp byte ptr ds:[process_dirs],1

jne no_dirs

;

;виклик пошуку каталогiв

;

call process_directory

no_dirs:

ret

process_files endp

;;;;;;;;

;process_files

;;;;;;;;

;;;;;;;;

;process_commandline

;;;;;;;;

process_commandline proc

mov si,80h

mov al,[si]

cmp al,0

je params_error

add si,2

mov di,offset filename_1

name_1:

lodsb

cmp al,20h

je stop_name1

cmp al,13

je params_error

stosb

jmp name_1

stop_name1:

mov di,offset filename_2

name_2:

lodsb

cmp al,20h

je stop_name2

cmp al,13

je stop_name2

stosb

jmp name_2

stop_name2:

mov byte ptr [di],'\'

cmp al,13

je stop_cmdl

name_s:

lodsb

cmp al,20h

je stop_names

cmp al,13

je stop_names

cmp al,'s'

jne name_s

mov byte ptr [process_dirs],1

stop_names:

stop_cmdl:

ret

params_error:

mov dx,offset param_err

mov ah,9

int 21h

mov ah,4ch

int 21h

process_commandline endp

;;;;;;;;

;process_commandline

;;;;;;;;

begin:

;decrease memory size

cld

mov bx,4096

mov ah,4ah

int 21h

mov ax,bx

shl ax,4

dec ax

mov sp,ax

call process_commandline

call process_files

.exit 0

end start

K_REN.ASM

;перейменування файла

;k_ren name1.ext1 name2.ext2

.model tiny

.code

org 100h

start:

jmp go

old_name db 50 dup(0)

new_name db 50 dup(0)

;old_name db 'autoexec.bat',0

;new_name db 'ccc.xxx',0

em db 'Error!$'

go:

push cs

pop ax

mov ds,ax

mov es,ax

;names

mov bx,80h

mov dl,byte ptr cs:[bx] ;length

cmp dl,0

je error

;old name

xor ax,ax

mov si,82h

mov di,offset old_name

next_sym:

mov al,[si]

cmp al,' '

je stop

mov [di],al

inc si

inc di

inc ah

cmp ah,dl

ja error

jmp next_sym

stop:

;new name

mov di,offset new_name

inc si

next_sym1:

mov al,[si]

cmp al,13

je stop1

mov [di],al

inc si

inc di

inc ah

cmp ah,dl

ja error

jmp next_sym1

stop1:

;перейменовуємо

mov dx, offset old_name

mov di, offset new_name

mov ah,56h

int 21h

jnc no_error

error:

mov ah,9

mov dx,offset em

int 21h

no_error:

.exit 0

end start

Характеристики

Тип файла
Документ
Размер
61,91 Kb
Тип материала
Учебное заведение
Неизвестно

Тип файла документ

Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.

Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.

Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.

Список файлов курсовой работы

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7021
Авторов
на СтудИзбе
260
Средний доход
с одного платного файла
Обучение Подробнее