Разработка программы записи информации на гибкий диск

 

Содержание


1. Постановка задачи

. Описание программы

. Теория вопроса

. Описание используемых функций

. Блок-схема программы

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

Список литературы


1. Постановка задачи


Разработать программу, осуществляющую запись информации в указанное место (головка, дорожка, сектор) гибкого диска.


2. Описание программы


После запуска программа спрашивает оператора о номере головки, дорожки и сектора гибкого диска, куда нужно произвести запись. При указании неправильного номера выводится сообщение об ошибке. При удачном вводе программа запрашивает текстовую информацию, которая вводится с клавиатуры. При нажатии клавиши Enter программа закрывается.


3. Теория вопроса


Метод доступа к дисковой памяти, поддерживающий использование оглавления, "блокирование" и "разблокирование" записей, обеспечивается прерыванием DOS 21H. Более низкий уровень, обеспечивающий абсолютную адресацию дисковых секторов, также через DOS, выполняется посредством прерываний 25H и 26H. Самый низкий уровень обеспечивается прерыванием BIOS 13H, которое позволяет выполнить произвольную адресацию в дисковой памяти по номеру дорожки и сектора Для дисковых операций можно программировать непосредственно на уровне BIOS, хотя BIOS и не обеспечивает автоматически использование оглавления или блокирование/деблокирование записей. Дисковая операция BIOS INT 13H рассматривает все "записи", как имеющие размер сектора, а адресацию диска осуществляет в терминах действительных номера дорожки и номера сектора.

Для дисковых операций чтения, записи и верификации необходима инициализация следующих регистров:Определяет тип операции: чтение, запись, верификация или форматирование.Определяет число секторов.Определяет номер дорожки.Определяет номер начального сектора.Номер головки (стороны) : 0 или 1 для дискеты.Номер дисковода: 0=A, 1=B и т.д.:BX Адрес буфера ввода/вывода в области данных (за исключением операции верификации).


4. Описание используемых функций

дисковый верификация память адресация

Функция 03h прерывания 13h - запись на диск.

Функция 08h прерывания 13h - получить информацию о носителе.

Функция 00h прерывание 16h - ожидание нажатия клавиши.

Функция 08h прерывание 21h - Ввод с клавиатуры без эха с проверкой Ctrl/Break.

Функция 09h прерывание 21h - Вывод строки символов на экран.

Функция 4сh прерывание 21h - Завершение подпроцесса с возвратом управления.


5. Блок-схема программы


Блок-схема программы представлена на рис.1


Рис. 1. Блок-схема программы


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


model small

.stack

.data1 db 'номер головки, 0 или 1',13,10,'$'

headdb 0

mes2 db 'номер дорожкиб максимум 80',13,10,'$'db 0db 'номер сектораб максимум 18',13,10,'$'0db 'неправильное значение',13,10,'$'db 'неизвесный тип дискеты',13,10,'$'db 'неизвестная ошибка',13,10,'$'db 'дисск защищен от записи',13,10,'$'db 'Сектор не найден',13,10,'$'db 'повреждена таблица параметров дисковода',13,10,'$'a db 'обнаружен дефектный сектор',13,10,'$'b db 'обнаружена дефектная дорожка',13,10,'$'c db 'нестандартный формат носителя или дорожки',13,10,'$'db 'всё нормально',13,10,'$'db 'не мешало бы вставить дискету!!!',13,10,'$'

meseos db '',13,10,'$'db 'write please:',13,10,'$'

message db 512 dup (0)

.code

.startupah, 08h ; 8-я функция 13-го прерывания - получить информацию о носителеdl, 0 ; в dl - номер диска (0-A, 1-B b и т.д.)13h ; прерывание 13 - дисковый ввод-выводal, 4 ; если дискета 1.44 Mb - идем дальше, если любая другая - выдаем сообщение об ошибкеnextah, 9h ; выдается сообщение о том, что дискета "неправильная"

mov dx, offset derror21h

mov ah, 0 ; сразу завершение и выход, чтобы не использовать far jump21h:ah, 9h ; 9-я функция 21-го прерывания - вывод строки на экран

mov dx, offset mes1 ; в dx - адрес строки "number of head, 0 or 1"

int 21h ; прерывание 21 - функции DOSah, 08h ; 8-я функция 21-го прерывания - ждать символ, считать его в al21h ; прерывание 21 - функции DOSal, 30h ; al=al-30h, 30h - смещение в ASCII, чтобы взять значение цифрыhead, al ; значение - в переменную head, тут будет храниться номер головки флоппикаah, 9h ; 9-я функция 21-го прерывания - вывод строки на экран

mov dx, offset mes2 ; в dx - адрес строки "number of way, max 80"

int 21h ; прерывание 21 - функции DOSah, 08h ; считываем первый символ

int 21h ;al, 30h ; al=al-30h

mov bx, 10 ; в bx - основа десятичной системыah, 0 ; в ah - 0, чтобы не было ошибокbx ; умножаем al на 10 - получаем значение старшего десятичного разрядаway, al ; полученное значение - в переменную way, тут будет храниться номер дорожкиah, 08h ; считываем второй символ21h ;al, 30h ; также получаем значение младшего разрядаway, al ; добавляем его к старшему, получаем число дорожек (напр. 5*10+8=58)way, 80 ; смотрим, не превышает ли оно максимума для дискеты 1.44Mbnext2ah, 9h ; если были ошибки в процессе ввода - выдаем сообщение

mov dx, offset inperr ;21h ;ah, 8h21hah, 4ch

int 21h:ah, 9h ; следующее сообщение - ввод номера сектора

mov dx, offset mes3 ;21h ;

mov ah, 08h ; аналогично считываем и получаем номер сектора

int 21h ;al, 30h ;bx, 10 ;ah, 0 ;bx ;sect, al ;ah, 08h ;21h ;al, 30h ;

add sect, al ; номер сектора находится в переменной sectsect, 18 ; максимальное значение для дискеты 1.44Mb - 18next3ah, 9h ; если были ошибки в процессе ввода - выдаем сообщение

mov dx, offset inperr ;21h ;ah, 8h21hah, 4ch21h:ah, 9h

mov dx, offset welkome ; приглашение к набору записываемых символов

int 21hcx, 0:

mov ah, 8h ; читаем символ21hsi, cxmessage[si], al ; пишем символ в массивdl, alah, 02h ; выводим символ на экран21hcx ; сx - счетчик для массива messagedl, 0Dh ; если нажата кнопка ENTER, прекращаем запись массива символов, идем дальше.nextMFcx, 64 ; если превышена емкость массива - идем дальшеintxt:ah, 03h ; получить текущую позицию курсораbh, 0 ; экран №010h ; прерываниеch, 1h ; увеличим номер строки курсора на 1dh, ch ;dl, 0 ; столбец тот жеah, 02h ; установить положение курсора10h

чтения с диска - 02hdx, ds ; в dx - содержимое сегмента данныхes, dx ; из dx содержимое ds в es, напрямую работать с сегментными регистрами нельзяdl, 0 ; в dl - 0, это номер дискаdh, head ; в dh - номер головкиch, way ; в ch - номер дорожкиcl, sect ; в cl - номер сектораal, 64 ; в al - объем считываемой информацииbx, offset message ; в bx - адрес буфера данных, [es]:[bx]ah, 03h ; 3-я функция 13-го прерывания - запись на диск13h ;ah, 0 ; ищем ошибки, при удачном завершении в ah остается 0noer ;ah, 03h ; 03 - диск защищен от записиerr03 ;ah, 04h ; 04 - сектор не найденerr04 ;ah, 07h ; 07 - повреждена таблица параметров дисководаerr07 ;ah, 0ah ; 0А - дефектный секторerr0a ;ah, 0bh ; 0В - дефектная дорожкаerr0b ;ah, 0ch ; 0С - нестандартный формат носителя

je err0c ;ah, 80herr80

mov ah, 9h ; Если какая-то неизвестная ошибка

mov dx, offset xzerror ;21h ;

jmp exit ; на выход:ah, 9hdx, offset noerr ; ошибок нет

int 21hexit:ah, 9hdx, offset err0321hexit:ah, 9hdx, offset err0421hexit:ah, 9hdx, offset err0721hexita:ah, 9hdx, offset err0a21hexitb:ah, 9hdx, offset err0b21hexitc:ah, 9hdx, offset err0c21hexit:

mov ah, 9hdx, offset errnd ; нет диска (превышен таймаут обращения)21hexit: ; выход из программыah, 0 ; ждем нажатия любой кнопки клавиатуры16hax, 3h ; очистка экрана

int 10hah, 4Ch ; выход в DOS21h

end ; конец :)


Список литературы


1.Питер Абель. Ассемблер. Язык и программирование для IBM PC: пер. с англ. - К.: Век+, М.: ЭНТРОП, К.: НТИ, 2003 - 736 с.

.Джордан. Программирование на ассемблере. М.:

.Ризаев И.С. Лекционный курс по дисциплине: «Системное программное обеспечение». Казань: КАИ, 2004.

.Кулаков В. Программирование на аппаратном уровне. Специальный справочник. Питер, 2003.


Содержание 1. Постановка задачи . Описание программы . Теория вопроса . Описание используемых функций . Блок-схема программы . Текст прогр

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ