Сортировка строк в текстовом файле
Проектирование пользовательского интерфейса. Выбор формата представления данных, используемые переменные. Список процедур и макросов, их назначение. Используемые в программе функции. Тестирование и отладка правильной работы программы, схема листинга.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 17.05.2013 |
Размер файла | 28,6 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru
Размещено на http://www.allbest.ru
Московский Энергетический Институт
Институт автоматики и вычислительной техники
Кафедра ВМСС
Курсовая работа
по дисциплине «Системное программное обеспечение»
Сортировка строк в текстовом файле
Студент: Филюк Андрей
Группа: А-8-07
Проверил: Гольцов А.Г.
Москва 2010
Оглавление
сортировка строка файл программа
Введение
1. Анализ задания
2. Проектирование пользовательского интерфейса
3. Выбор формата представления данных
4. Список процедур и их назначение
5. Используемые в программе функции
6. Тестирование и отладка программы
Заключение
Список литературы
Приложение. Листинг программы
Введение
Данная программа служит для сортировки строк в текстовом файле.
Текстовый файл представляет из себя последовательность символов (принадлежащих некому набору символов). Символы сгруппированы в строки. В современных системах строки разделяются разделителями строк, хотя в прошлом применялось хранение строк в виде записей постоянной или переменной длины.
Иногда конец текстового файла, особенно если в файловой системе не хранится информация о размере файла, также отмечается одним или более специальными знаками, известными как маркеры конца файла.
Различные операционные системы придерживаются своего представления перевода строки и конца файла. В UNIX перевод строки состоит из одного символа LF (0x0A), в Mac OS -- из символа CR (0x0D), а в DOS и Microsoft Windows перевод строки кодируется последовательностью двух символов CR LF. В DOS и Microsoft Windows конец файла кодируется символом 0x1A, а в UNIX символ конца файла не употребляется.
Под сортировкой строк понимается посимвольное сравнение строк с помощью таблицы ASCII.
Программа может быть очень полезна, например когда необходимо отсортировать файлы с большим количеством строк, для быстрого наглядного поиска нужного элемента в файле. Легко найдет применение везде, где так или иначе нужна сортировка.
1. Анализ задания
Разобьем нашу задачу на подзадачи:
Ввести пути к файлам, с которыми будем работать: путь к файлу, который необходимо отсортировать (в программе обозначен как Input file) и путь к файлу, в который сохраним результат (в программе - Output file).
Ввод будет осуществляться прямо из программы. Для этого нам понадобятся функции 07h* и 02h* - ввод с клавиатуры без ЭХО и вывод символа на экран соответственно. Именно эти функции нам позволят обработать введенный символ, прежде чем он отобразится на экране. Это нам позволит корректно использовать клавишу BackSpace. Функцию 01h* (ввод символа с клавиатуры с ЭХО) использовать нежелательно, так как некоторые символы нам ненужно отображать и тем более записывать в строку (например, Enter).
Ввести тип сортировки (в программе Input key [D/A]).
Для выбора типа сортировки: по возрастанию необходимо вести A, по убыванию - D. При воде необходимо учитывать верхний регистр вводимого символа. Дается две попытки на правильный ввод, потом программа осуществляет выход.
Подготовка файлов для работы.
Нам необходимо открыть один и создать второй файл, для этого мы будем использовать функции 3dh* и 3ch*, так как это единственные функции для работы с файлами, то выбор очевиден.
Сортировка.
Для этого необходимо, во-первых, считать блок данных из файла (с помощью функции 3fh*). Сортировать сами строки в памяти слишком нерационально, поэтому для сортировки нам понадобится массив с адресами начала строк. Потом необходимо отсортировать адреса строк соответствии с выбранным типом сортировки. Создать массив, в котором будут храниться данные о количество символов в уже отсортированных строках. Потом записать полученный результат в файл (с помощью функции 40h*).
*Функции относятся к прерыванию 21h.
2. Проектирование пользовательского интерфейса
Интерфейс программы очень прост и удобен, пользователю достаточно запустить ЕХЕ файл и он увидит приглашение на ввод информации. Это будут последовательно 3 приглашения: на ввод пути к файлу, который надо закодировать (Input file), на ввод пути к файлу в который сохранится результат работы (Output file) и приглашение на ввод типа сортировки (Input key [D/A]).
После завершения на экране появится сообщение «Done», информирующее о том, что программа успешно завершила свою работу.
Если в процессе работы произошла какая либо ошибка, то тут же выведется соответствующее сообщение, и программа завершит свою работу.
3. Выбор формата представления данных
Для определения переменных в программе используются метки db и dw (byte и word), а так же для некоторых переменных используется директива EQU для более гибкого написания кода.
В таблице 1 перечислены все переменные, использующиеся в программе.
Таблица 1
Список переменных
Имя |
Метка |
Примечание |
|
msg0 |
db |
Сообщение. Информация о курсовом проекте. |
|
msg1 |
db |
Сообщение. Приглашение на ввод файла (Input file). |
|
msg2 |
db |
Сообщение. Приглашение на ввод файла (Output file). |
|
msg3 |
db |
Сообщение. Сообщение. Информация о том, что надо ввести для сортировки по возрастанию или убыванию |
|
msg4 |
db |
||
msg5 |
db |
Сообщение. Появляется перед завершением работы программы, для того что бы сообщить пользователю, что необходимо нажать любую клавишу, что бы программ завершилась (Press any key) |
|
msg6 |
db |
Сообщение. «Готово» сообщает о том, что процесс кодирования завершен (Done) |
|
msg7 |
db |
Сообщение. Информация о неправильном вводе символа выбора типа сортировки. |
|
msg8 |
db |
Сообщение. Количество попыток превышено, выход |
|
err_0 |
db |
Сообщение об ошибке. Открытие файла. |
|
err_1 |
db |
Сообщение об ошибке. Создание файла. |
|
err_2 |
db |
Сообщение об ошибке. Чтение из файла. |
|
err_3 |
db |
Сообщение об ошибке. Записи в файл. |
|
err_4 |
db |
Сообщение об ошибке. Закрытие файла. |
|
err_5 |
db |
Сообщение об ошибке. Файл имеет только нулевую строку. |
|
num1 |
EQU |
Ограничение на длину, вводимой строки |
|
file1 |
db |
Путь к файлу для сортировки |
|
file2 |
db |
Куда сохранить отсортированный файл |
|
flag |
db |
Флаг, отвечающий за тип сортировки. |
|
num2 |
EQU |
Ограничение на длину данных |
|
handle1 |
dw |
Заголовок файла, который надо отсортировать |
|
handle2 |
dw |
Заголовок файла,в который записываем отсортированные строк |
|
len_file |
dw |
Кол-во символов в файле |
|
num_str |
dw |
Кол-во строк в файле |
|
D |
dw |
Зарезервируем блок для хранения данных |
|
mas |
dw |
Зарезервируем блок для массива адресов начала строк |
|
mas_num |
dw |
Зарезервируем блок для массива кол-ва символов в строках |
4. Список процедур, макросов и их назначение
В таблице 2 указан список процедур, макросов и их назначение.
Таблица 2
Список процедур, макросов и их назначение
Имя |
Назначение |
|
|
Макрос вывода строки на экран. В качестве параметра - имя выводимой структуры, это должна быть строка, оканчивающаяся символом `$'. |
|
input_line |
Процедура, осуществляющая ввод пути к файлу. Перед вызовом в регистре di, должен храниться адрес структуры, куда будет записан путь. |
|
delete_char |
Процедура, стирающая с экрана последний введенный символ, вызывается внутри процедуры INPUT_LINE при нажатии клавиши BackSpace. |
|
reception_type |
Процедура получения типа сортировки. |
|
clear |
Процедура очистки экрана. |
|
open_file |
Процедура открытия файла. Путь к файлу в file1, номер открытого файла сохранится в handle1. |
|
read_file |
Процедура чтения. Считывание происходит из файла file1, данные в структуру D. |
|
make_mas |
Процедура создания массива адресов строк. |
|
sort |
Процедура сортировки. |
|
make_mas_num |
Процедура создания массива длин отсортированных строк |
|
create_file |
Процедура создания файла. Путь к файлу в file2, номер созданного файла сохранится в handle2. |
|
write_file |
Процедура записи. Запись происходит в файл file2. На входе в регистре cx должно храниться количество байт для записи из структуры D. |
|
close_file |
Процедура закрытия файла. File1 закроется если он был открыт, а File2 закроется если он был создан. |
|
exit |
Завершение программы. Внутри вызывается процедура CLOSE_FILE, выводится сообщение «Press any key..» и ожидается ввод с клавиатуры символа, после этого программа завершает свою работу. |
5. Используемы в программе функции
Функция 02h прерывания 21h. Вывод символа на экран.
Вход: ---
Выход: DL = символ, который необходимо вывести.
(используется для отображения вводимой строки в процедуре input_line).
Функция 07h прерывания 21h. Ввод с клавиатуры без ЭХО.
Вход: ---
Выход: AL = считанный символ.
(используется для считывания кода символа в процедуре input_line).
Функция 0Ah прерывания 21h. Буферизованный ввод с клавиатуры.
Вход: адрес входного буфера (смотри ниже)
Выход: ---
Первый байт буфера должен содержать максимальную длину на входе; второй байт содержит фактическую длину предыдущей линии, которая может будьте отозваны с командами редактирования линии DOC по возвращению второй байт содержит фактическую длину, третий и последующие байты содержат входную линию
(используется для считывания кода символа в процедуре reception_type).
Функция 0003h прерывания 10h.Установка видео режима.
Вход: AL =03h (Режим текст 80x25 формат 8x8 цвета 16)
Выход: ---
(используется для считывания кода символа в процедуре clear).
Функция 09h прерывания 21h. Вывод строки.
Вход: DS:DX = адрес строки, заканчивающейся `$'.
Выход: ---
(используется в программе для вывода информации о проекте, приглашения на ввод строки, а так же для вывода сообщений об ошибках).
Функция 3dh прерывания 21h. Открыть файл.
Вход:AL = код доступа (0 - чтение, 1 - запись, 2 - чтение запись).
DS:DX = адрес на строку в формате ASCIZ.
Выход:CF = 1 - есть ошибка, AX = код ошибки.
CF = 0 - нет ошибки, AX = номер файла.
Функция 3сh прерывания 21h. Создать файл.
Вход:СХ = атрибут.
DS:DX = адрес на строку в формате ASCIZ.
Выход:CF = 1 - есть ошибка, AX = код ошибки.
CF = 0 - нет ошибки, AX = номер файла.
Функция 3eh прерывания 21h. Закрыть файл.
Вход:BX = номер файла.
Выход:CF = 1 - есть ошибка, AX = код ошибки.
Функция 3fh прерывания 21h. Чтение из файла.
Вход:BX = номер файла.
CX = количество байт, которые необходимо считать.
DS:DX = адрес буфера.
Выход:CF = 1 - есть ошибка, AX = код ошибки.
CF = 0 - нет ошибки, AX = количество считанных байт.
Функция 40h прерывания 21h. Запись в файла.
Вход:BX = номер файла.
CX = количество байт, которые необходимо записать.
DS:DX = адрес буфера.
Выход:CF = 1 - есть ошибка, AX = код ошибки.
CF = 0 - нет ошибки, AX = количество записанных байт.
Функция 4ch прерывания 21h. Завершение программы.
Вход:AL = код завершения.
Выход: ---
6. Тестирование и отладка
Тестирование на ошибочный ввод параметров.
Ввод несуществующего файла в качестве Input file.
Ввод некорректного пути к создаваемому фалу Output file.
Тестирование правильной работы.
Для тестирования правильной работы программы был выбран текстовый документ 1.txt с различными строками, сортировка была произведена в файл 2.txt сначала по возрастанию, потом по убыванию.
Результат тестирования на ошибочный ввод параметров.
Программы выполнила все тесты, выводя соответствующие сообщения об ошибках, тесты не привели к критическому завершению программы.
Результат тестирования правильной работы.
После сортировки файла 1.txt в 2.txt строки были отсортированы в зависимости от выбранного типа сортировки.
Заключение
Программа работоспособна и соответствует предъявленным требованиям. Проделано тестирование программы и соответствующая отладка по устранению ошибок.
Список литературы
1. П. Абель Язык ассемблера для IBM PC и программирования - М.: ЭНТРОП, 2007. -447с.
2. Файл руководства по системным функциям - interrup.lst
Приложение А
«Листинг программы»
;Курсовой проект
;Выполнил:Филюк Андрей
;Группа:А-8-07
;Тема:Сортировка строк в текстовом файле
;макрос вывода строки, заканчивающейся $
printmacro str;в str - адрес выводимой структуры
mov ah, 09h;выбор функции вывода строки, заканчивающейся $
lea dx, str;сохраняем адрес в dx
int 21h;выводим строку
endm
.model small
.stack 100h
.data
msg0 db 13,10,'Filuk Andrew A-8-07 ',' File sorting ',13,10,'$'
msg1db13,10,'Input file: $'
msg2db13,10,'Output file: $'
msg3 db 13,10,'For descending sort need enter key D',13,10,'For ascending sort need enter key A',13,10,'$'
msg4 db 13,10,'Input key [D/A]:? $'
msg5db13,10, 'Press any key.. $'
msg6db13,10, 'Done$'
msg7db13,10, 'Incorrect input, please try again $'
msg8db13,10, 'Sorry, try next time $'
;сообщения об ошибках
err_0db13,10, ' Error 0: Can not open file $'
err_1db13,10, ' Error 1: Can not create file $'
err_2db13,10, ' Error 2: Can not read file $'
err_3db13,10, ' Error 3: Can not write file $'
err_4db13,10, ' Error 4: Can not close file $'
err_5db13,10, ' Error 5: File have only null string $'
num1 EQU 80h
file1dbnum1 DUP(0);путь к файлу, который надо отсортировать
file2dbnum1 DUP(0);куда сохранить отсортированный файл
flag db 2;флаг
num2 EQU 1000h
handle1 dw 0;заголовок файла, который надо отсортировать
handle2 dw 0;заголовок файла,в который записываем отсортированные строки
len_file dw 0;кол-во символов в файле
num_str dw 0;кол-во строк в файле
D db num2 DUP('D') ;данные
mas dw 100h DUP('#');массив адресов начала строк
mas_num dw 100h DUP('*');массив кол-ва символов в строках
.code
Start:
mov ax, @data;сохраним адрес на сегмент данных в AX
mov ds, ax;инициализация сегмента данных
mov es, ax;инициализация сегмента дополнительных данных
call clear;процедура очистки экрана
print msg0;вывод сообщенияо о проекте
print msg1 ;вывод сообщения на ввод пути вх. файла
lea di, file1;сохраним адрес на структуру file1 в di
call input_line;вызываем процедуру ввода строки
print msg2;вывод сообщения на вывод пути вых. файла
lea di, file2;сохраним адрес на структуру file2 в di
call input_line;вызываем процедуру ввода строки
call reception_type;процедура определения типа сортировки(по озрастанию или убыванию)
call open_file;открытие файла, который надо отсортировать
call read_file;чтение файла
call make_mas;создание массива начала адресов строк
call sort;сортировка
call make_mas_num;создание массива кол-ва символов в уже отсортированном массиве адресов строк
call create_file;создание файла для вывода
call write_file;запись в файл
print msg6;вывод сообщения
call exit;выход с закрытием файлов
;------------------Получение типа сортировки------------------------
reception_type proc
push ax;ах в стек
print msg3;вывод сообщения
mov cx,2;кол-во попыток неправильного ввода
k0:
print msg4;вывод сообщения
lea dx, flag ;dx указывает на первый байт буфера
mov ah,0ah;буферизованный ввод с клавиатуры
int 21h
mov ah,02h ;ывод символа на экран
mov dl,0dh;символ возврата коретки (для буфера)
int 21h
cmp flag+2, 65;введена клавиша A?
jne k1;нет, переход по метке сравнения с клавишей D
mov flag,0 ;иначе устанавливаем флаг в 0
jmp k3 ;на выход
k1: cmp flag+2, 68 ;введена ли клавиша D?
jne k2;нет, переход по метке k2
mov flag,1;иначе устанавливаем флаг в 1
jmp k3 ;переход по метке
k2:
print msg7;вывод сообщения
loop k0
print msg8;вывод сообщения
call exit2 ;Не введено ни A, ни D, - выход
k3:
pop ax;возврат значения из стека
ret
endp
;------------------------------ Очистка экрана ------------------------------
clear proc
mov ah,00h; Установка видеорежима дисплея
mov al,03h; Номер видеорежима
int 10h
ret
clear endp
;--------------------------------Ввод строки----------------------------------
input_line proc
mov cx, 0;в CX будет храниться количество введенных символов
m0:
mov ah, 07h;выбор функции ввод с клавиатуры без ЭХО
int 21h;ждем
cmp al, 08h;проверяем на BackSpace
jne m2;если да - переходим на m2
cmp cx, 0;если нет - проверяем есть ли что удалять
je m0;если строка пуста - возвращаемся на начало и ждем ввода
call delete_char;если строка не пуста - стираем с экрана последний введенный символ
dec di;уменьшаем адрес, где сохранен путь на 1
dec cx;уменьшаем количество введенных символов на 1
jmp m0;возвращаемся на начало и ждем ввода
m2:
mov ah, 02h;выбор функции вывода символа на экран
mov dl, al;считанный ранее символ хранится в al - записываем его в dl
int 21h;выводим его
mov [di], al;сохраняем по адресу di
inc di;переходим на следующую ячейку
inc cx;увеличиваем количество введенных символов на 1
cmp cl, num1;огранисчение на 80 символов
je m1;если ввели 80 символом, то считаем что строка введена
cmp al, 0dh;проверяем не нажат ли Enter
jne m0
dec di;возвращаемся в предыдущую ячейку
m1:
mov al, 00h;что бы записать символ конца строки - 0
mov [di], al;записываем
ret
endp
;---------Стереть символ с экрана---------------
delete_charproc
;при работе испортится регистр ax
push ax;сохраним его в стек
mov ah, 02h;функция вывода символа на экран
mov dl, 08h;символ - Backspace
int 21h;выводим, тем самым переместим курсор влево на 1
mov dl, 20h;символ - space
int 21h;выводим, тем самым сотрем с экрана символ на котором находится курсор
;и сместим курсор вправо на 1
mov dl, 08h;символ - Backspace
int 21h;выводим, тем самым вернем курсор обратно влево
pop ax;восстановим регистр ax
ret
endp
;-----------------Открытие файла-----------------------
open_fileprocnear
mov ah, 3dh;функция открытия файла
mov al, 00; 00 - для чтения
lea dx, file1;путь к файлу в file1
int 21h ;открываем
jnc m3;если не было ошибки - то на метку m3
print err_0;если была ошибка - выводим соотв. сообщение
call exit2;завершаем работу
m3:
mov handle1, ax;сохраняем номер файла в handle1
ret
endp
;-----------------Чтение из файла----------------------
read_fileproc
mov ah, 3fh;функция чтения из файла
mov bx, handle1;номер файла - откуда считать
mov cx, num2;количество байт, которые надо считать
lea dx, D;буфер для данных
int 21h;считываем
mov len_file, ax
jnc m4;если не было ошибки - то на метку m4
print err_2;если была ошибка - выводим соотв. сообщение
call exit;завершаем работу
m4:
ret
endp
;-----------------Создание массива адресов строк-------
make_mas proc
push ax;сохраним его в стек
mov ax, len_file;в ах кол-о символов в файле
or ax,ax;сравнение на нулевой файл
jnz m51;нет -> идем по метке создания массива
print err_5;если была ошибка - выводим соотв. сообщение
call exit;на выход
m51:
xor bx,bx;обнуляем bx
xor dx,dx;обнуляем dx
lea di,D;в di адрес начала первой строки
mov mas[bx],di;заносим её адрес в массив
mov al,0Ah ;поиск ведем по символу конца строки
mov cx,len_file;загрузим кол-во символов в файле
cld;сканирование осуществляем вперед
m5:repne scasb;сканирование в поиcке заданного символа, пока счетчик не обнулиться, остановиться когда найдет символ 0, записанный в al
add bx,2;организация перехода на след. элемент массива
mov mas[bx],di;заносим адрес начала след. строки в массива
inc dx;+1
inc cx;+1
loop m5
mov num_str, dx;в переменную num_str сохраняем кол-во строк
mov byte ptr [di],0Dh;добавляем концевой символ
mov byte ptr [di+1],0Ah;добавляем концевой символ
pop ax;восстановим регистр ax
ret
endp
;-----------------Сортировка строк--------------------
sort proc
push ax;заносим ах стек
sort1:
xor si,si;обнуляем si
mov bh, 0;используем bh как флаг, если строки перемещались, то флаг установился в 1
mov cx,num_str;в сх кол-во строк для организации цикла
dec cx;-1
cmp cx,0;если в файле одна строка, то сортировка не нужна
jnz sort2;если нет -> сортируем
jmp end_sort;иначе выход
sort2:
xor ax,ax;обнуляем ах
push cx;сх стек
mov ax,mas[si];адрес начала строки в ax
mov dx,mas[si+2];адрес начала след. строки в dx
push si;si в стек
mov si,ax;в si адрес начала строки
mov di,dx;в di адрес начала след. строки
dec si;-1
dec di;-1
compare_string:
mov cl,byte[si];в cl заносим символ строки
mov ch,byte[di];в ch заносим символ след. строки
cmp flag,0;определяем тип сравнения. по возрастанию?
jz increase;да -> переход на алгоритм сортировки по возрастанию, иначе по убыванию
cmp ch,0Dh;сравниваем символ строки с адресом конца строки
jz next_string;если равен -> перех к сравнению след. строк
cmp cl,0Dh;сравниваем символ след строки с адресом конца строки
jz change;если да -> меняем
cmp cl,ch;производим сравнение символов находящихся не в концах строк
je next_simbol;равны следовательно переход по метке к сравнению след символа в строках
cmp cl,ch;сравниваем какой из них "больше"
ja next_string;переход если сl > сh
jmp change;иначе меняем строки
increase:
cmp cl,0Dh;сравниваем символ след строки с адресом конца строки
jz next_string;если равен -> перех к сравнению след. строк
cmp ch,0Dh;сравниваем символ строки с адресом конца строки
jz change;если да -> меняем
cmp cl,ch;производим сравнение символов находящихся не в концах строк
je next_simbol;равны следовательно переход по метке к сравнению след символа в строках
cmp cl,ch;сравниваем какой из них "больше"
jb next_string;переход если сl < сh
jmp change;иначе меняем строки
change:
xchg ax,dx;меняем адреса строк
mov bh,1;устанавливаем флаг
jmp next_string;переход к след. строке
next_simbol:
inc si;переход к след символу строки
inc di;переход к след символу строки
jmp compare_string;на метку сравнения строк
next_string:
pop si;возращаем из стека si
mov mas[si],ax;заносим адреса отсортированных строк в массив
mov mas[si+2],dx;заносим адреса отсортированных строк в массив
pop cx;возращаем из стека сх
add si,2;организация перехода к след. строке
loop sort2
cmp bh,0;сравниваем флаг на перемещение строк.
jz end_sort;если не было перемещений -> выход
jmp sort1;иначе продолжаем сравнивать
end_sort:
pop ax;возращаем из стека ах
ret
endp
;-----Создание массива длин отсортированных строк-------
make_mas_num proc
push ax;заносим ах в стек
xor si,si;обнуляем si
mov cx, num_str;в сх заносим кол-во строк для организации цикла
m6:
push cx;заносим сх в стек
mov di,mas[si];адрес начала строки в ax
push di;заносим адрес начала в стек
mov al,0Ah ;в al заносим символ который ищем
mov cx,len_file;загрузим максимальный объем
cld;сканирование осуществляем вперед
repne scasb;сканирование в поиcке заданного символа, пока счетчик не обнулиться, останоиться когда найдет символ 0, записанный в al
pop ax;возвращаем из стека
sub di,ax ;вычитаем из di адрес начала строки для получения длины строки
mov mas_num[si],di;заносим длину строки в массив
add si,2;организация перехода к след элементу
pop cx;возращаем изз стека сх
loop m6
pop ax;возвращаем из стека ах
ret
endp
;------------------Cоздание файла----------------------
create_file proc
mov ah, 3ch;функция создания файла
mov cx, 00h;файл - обычный
lea dx, file2;file2 - путь к файлу
int 21h;создаем
jnc m7;если не было ошибки - то на метку m7
print err_1;если была ошибка - выводим соотв. сообщение
call exit;завершаем работу
m7:
mov handle2, ax;сохраняем номер файла в handle2
ret
endp
;------------------Запись в файл-----------------------
;при входе в процедуру в cx - количество байт для записи
write_file proc
xor si,si;обнуляем si
mov cx, num_str;в сх заносим кол-во строк для организации цикла
m8:
push cx;заносим сх в стек
mov ah,40h;функция записи в файл
mov bx, handle2 ;номер открытого файла
mov cx,mas_num[si] ;количество символов которые надо
mov dx,mas[si]
int 21h ;записываем
jnc m9;если не было ошибки - то на метку m9
print err_3;если была ошибка - выводим соотв. сообщение
call exit;завершаем работу
m9:
add si,2;переход к след. элементу
pop cx;возвращаем из стека сх
loop m8;пока сх не равен нулю возврат по метке m8
ret
endp
;------------------Закрытие файлов-----------------------
close_file proc
cmp handle1, 0;проверяем был ли открыт файл
je m10;если нет - закрывать нечего, переходим на m10
mov ah, 3eh;функция закрытия файла
mov bx, handle1;номер файла
int 21h;закрываем
jnc m10;если не было ошибки - то на метку m10
print err_4;если была ошика - выводим соотв. сообщение
call exit;завершаем работу
m10:
cmp handle2, 0;проверяем был ли создан файл
je m11;если нет - закрывать нечего, переходим на m11
mov ah, 3eh;функция закрытия файла
mov bx, handle2;номер файла
int 21h;закрываем
jnc m11;если не было ошибки - то на метку m11
print err_4;если была ошибка - выводим соотв. сообщение
call exit;завершаем работу
m11:
ret
endp
;------------------Выход------------------------------
exit proc
call close_file;вызров процедуры закрытия файлов
exit2:
print msg5;вывод сообщения "Press any key.."
mov ah, 07h;функция ввода с клавиатуры бех ЭХО
int 21h;ждем нажатия клавиши
mov ax, 4c00h;выход из программы с кодом возврата 0
int 21h;выходим
ret
endp
End Start
Размещено на http://www.allbest.ru
Подобные документы
Проектирование пользовательского интерфейса программы, осуществляющей шифрование и дешифрование файлов. Выбор формата представления данных. Список процедур, макросов и их назначение. Описание используемых в программе функций, ее тестирование и отладка.
курсовая работа [29,3 K], добавлен 17.05.2013Поиск вредоносных программ по средствам программ антивирусных. Выбор формата представления данных. Интерфейс программы, ее тестирование и отладка. Список процедур, их назначение. Поиск как средство для облегчения, удобства, надежности работы на ПК.
курсовая работа [22,4 K], добавлен 17.05.2013Описание логической и модульной структуры разрабатываемой программы, используемые в данном процессе основные технические средства. Организация хранения данных в программе, проектирование интерфейса. Тестирование и отладка, листинг готовой программы.
курсовая работа [494,5 K], добавлен 20.06.2012Аппаратные характеристики системы, использованной для разработки информационного ресурса "Сортировка слиянием". Проектирование логической и физической структуры ресурса, реализация его интерфейса. Основные функции программы, ее тестирование и отладка.
курсовая работа [2,1 M], добавлен 26.11.2012Отличие исконных слов от заимствованных и установление времени, причины заимствований и их роль для развития языка. Алгоритм подсчета обработанных слов приложением "Подсчет частоты введенных слов в текстовом файле". Отладка и тестирование программы.
курсовая работа [1,1 M], добавлен 13.06.2012Типы данных, использованные при создании базы данных. Структура программы, используемые переменные, выражения и указатели. Концептуальное (инфологическое), логическое (даталогическое) и физическое проектирование. Тестирование программы и описание полей.
курсовая работа [398,4 K], добавлен 16.07.2012Проектирование системы управления базами данных. Особенности реализации в MS SQL. Разработка пользовательского интерфейса. Тестирование и отладка приложения. Руководство пользователя и системного администратора. Анализ и методы разработки приложений.
курсовая работа [867,9 K], добавлен 16.07.2013Задача зеркального отражения изображения как одна из подзадач многих программ. Анализ создания программы, выполняющей зеркальное отображение изображения, который хранится в файле формата .pcx (256 цветов). Проектирование пользовательского интерфейса.
курсовая работа [625,6 K], добавлен 17.05.2013Разработка программы на языке Pascal. Описание переменных. Действия, которые должна выполнить программа согласно выбранного алгоритма. Детализация графической части программы. Листинг и тестирование программы. Вывод массива данных на экран монитора.
контрольная работа [360,4 K], добавлен 13.06.2012Особенности работы с процедурами и двумерными массивами, последовательность вызова процедур. Способы описания и использования многомерных массивов, назначение процедур, их описание и обращение к ним. Набор программы, ее отладка и тестирование данных.
лабораторная работа [112,1 K], добавлен 03.10.2010