Разработка программы записи информации на гибкий диск
Особенности инициализации регистров для дисковых операций чтения, записи и верификации. Анализ метода доступа к дисковой памяти, поддерживающей использование оглавления, блокирование и разблокирование записей. Обеспечение адресации дисковых секторов.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | русский |
Дата добавления | 20.11.2012 |
Размер файла | 43,4 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://allbest.ru/
Размещено на http://allbest.ru/
Содержание
- 1. Постановка задачи
- 2. Описание программы
- 3. Теория вопроса
- 4. Описание используемых функций
- 5. Блок-схема программы
- 6. Текст программы
- Список литературы
1. Постановка задачи
Разработать программу, осуществляющую запись информации в указанное место (головка, дорожка, сектор) гибкого диска.
2. Описание программы
После запуска программа спрашивает оператора о номере головки, дорожки и сектора гибкого диска, куда нужно произвести запись. При указании неправильного номера выводится сообщение об ошибке. При удачном вводе программа запрашивает текстовую информацию, которая вводится с клавиатуры. При нажатии клавиши Enter программа закрывается.
3. Теория вопроса
Метод доступа к дисковой памяти, поддерживающий использование оглавления, "блокирование" и "разблокирование" записей, обеспечивается прерыванием DOS 21H. Более низкий уровень, обеспечивающий абсолютную адресацию дисковых секторов, также через DOS, выполняется посредством прерываний 25H и 26H. Самый низкий уровень обеспечивается прерыванием BIOS 13H, которое позволяет выполнить произвольную адресацию в дисковой памяти по номеру дорожки и сектора Для дисковых операций можно программировать непосредственно на уровне BIOS, хотя BIOS и не обеспечивает автоматически использование оглавления или блокирование/деблокирование записей. Дисковая операция BIOS INT 13H рассматривает все "записи", как имеющие размер сектора, а адресацию диска осуществляет в терминах действительных номера дорожки и номера сектора.
Для дисковых операций чтения, записи и верификации необходима инициализация следующих регистров:
AH Определяет тип операции: чтение, запись, верификация или форматирование.
AL Определяет число секторов.
CH Определяет номер дорожки.
CL Определяет номер начального сектора.
DH Номер головки (стороны) : 0 или 1 для дискеты.
DL Номер дисковода: 0=A, 1=B и т.д.
ES:BX Адрес буфера ввода/вывода в области данных (за исключением операции верификации).
4. Описание используемых функций
дисковый верификация память адресация
Функция 03h прерывания 13h - запись на диск.
Функция 08h прерывания 13h - получить информацию о носителе.
Функция 00h прерывание 16h - ожидание нажатия клавиши.
Функция 08h прерывание 21h - Ввод с клавиатуры без эха с проверкой Ctrl/Break.
Функция 09h прерывание 21h - Вывод строки символов на экран.
Функция 4сh прерывание 21h - Завершение подпроцесса с возвратом управления.
5. Блок-схема программы
Блок-схема программы представлена на рис.1
Рис. 1. Блок-схема программы
6. Текст программы
model small
.stack
.data
mes1 db 'номер головки, 0 или 1',13,10,'$'
headdb 0
mes2 db 'номер дорожкиб максимум 80',13,10,'$'
way db 0
mes3 db 'номер сектораб максимум 18',13,10,'$'
sectdb 0
inperr db 'неправильное значение',13,10,'$'
derror db 'неизвесный тип дискеты',13,10,'$'
xzerror db 'неизвестная ошибка',13,10,'$'
error03 db 'дисск защищен от записи',13,10,'$'
error04 db 'Сектор не найден',13,10,'$'
error07 db 'повреждена таблица параметров дисковода',13,10,'$'
error0a db 'обнаружен дефектный сектор',13,10,'$'
error0b db 'обнаружена дефектная дорожка',13,10,'$'
error0c db 'нестандартный формат носителя или дорожки',13,10,'$'
noerr db 'всё нормально',13,10,'$'
errnd db 'не мешало бы вставить дискету!!!',13,10,'$'
meseos db '',13,10,'$'
welkome db 'write please:',13,10,'$'
message db 512 dup (0)
.code
.startup
mov ah, 08h ; 8-я функция 13-го прерывания - получить информацию о носителе
mov dl, 0 ; в dl - номер диска (0-A, 1-B b и т.д.)
int 13h ; прерывание 13 - дисковый ввод-вывод
cmp al, 4 ; если дискета 1.44 Mb - идем дальше, если любая другая - выдаем сообщение об ошибке
jne next
mov ah, 9h ; выдается сообщение о том, что дискета "неправильная"
mov dx, offset derror
int 21h
mov ah, 0 ; сразу завершение и выход, чтобы не использовать far jump
int 21h
next:
mov ah, 9h ; 9-я функция 21-го прерывания - вывод строки на экран
mov dx, offset mes1 ; в dx - адрес строки "number of head, 0 or 1"
int 21h ; прерывание 21 - функции DOS
mov ah, 08h ; 8-я функция 21-го прерывания - ждать символ, считать его в al
int 21h ; прерывание 21 - функции DOS
sub al, 30h ; al=al-30h, 30h - смещение в ASCII, чтобы взять значение цифры
mov head, al ; значение - в переменную head, тут будет храниться номер головки флоппика
mov ah, 9h ; 9-я функция 21-го прерывания - вывод строки на экран
mov dx, offset mes2 ; в dx - адрес строки "number of way, max 80"
int 21h ; прерывание 21 - функции DOS
mov ah, 08h ; считываем первый символ
int 21h ;
sub al, 30h ; al=al-30h
mov bx, 10 ; в bx - основа десятичной системы
mov ah, 0 ; в ah - 0, чтобы не было ошибок
mul bx ; умножаем al на 10 - получаем значение старшего десятичного разряда
mov way, al ; полученное значение - в переменную way, тут будет храниться номер дорожки
mov ah, 08h ; считываем второй символ
int 21h ;
sub al, 30h ; также получаем значение младшего разряда
add way, al ; добавляем его к старшему, получаем число дорожек (напр. 5*10+8=58)
cmp way, 80 ; смотрим, не превышает ли оно максимума для дискеты 1.44Mb
jna next2
mov ah, 9h ; если были ошибки в процессе ввода - выдаем сообщение
mov dx, offset inperr ;
int 21h ;
mov ah, 8h
int 21h
mov ah, 4ch
int 21h
next2:
mov ah, 9h ; следующее сообщение - ввод номера сектора
mov dx, offset mes3 ;
int 21h ;
mov ah, 08h ; аналогично считываем и получаем номер сектора
int 21h ;
sub al, 30h ;
mov bx, 10 ;
mov ah, 0 ;
mul bx ;
mov sect, al ;
mov ah, 08h ;
int 21h ;
sub al, 30h ;
add sect, al ; номер сектора находится в переменной sect
cmp sect, 18 ; максимальное значение для дискеты 1.44Mb - 18
jna next3
mov ah, 9h ; если были ошибки в процессе ввода - выдаем сообщение
mov dx, offset inperr ;
int 21h ;
mov ah, 8h
int 21h
mov ah, 4ch
int 21h
next3:
mov ah, 9h
mov dx, offset welkome ; приглашение к набору записываемых символов
int 21h
mov cx, 0
intxt:
mov ah, 8h ; читаем символ
int 21h
mov si, cx
mov message[si], al ; пишем символ в массив
mov dl, al
mov ah, 02h ; выводим символ на экран
int 21h
inc cx ; сx - счетчик для массива message
cmp dl, 0Dh ; если нажата кнопка ENTER, прекращаем запись массива символов, идем дальше.
je nextMF
cmp cx, 64 ; если превышена емкость массива - идем дальше
jne intxt
nextMF:
mov ah, 03h ; получить текущую позицию курсора
mov bh, 0 ; экран №0
int 10h ; прерывание
add ch, 1h ; увеличим номер строки курсора на 1
mov dh, ch ;
mov dl, 0 ; столбец тот же
mov ah, 02h ; установить положение курсора
int 10h
чтения с диска - 02h
mov dx, ds ; в dx - содержимое сегмента данных
mov es, dx ; из dx содержимое ds в es, напрямую работать с сегментными регистрами нельзя
mov dl, 0 ; в dl - 0, это номер диска
mov dh, head ; в dh - номер головки
mov ch, way ; в ch - номер дорожки
mov cl, sect ; в cl - номер сектора
mov al, 64 ; в al - объем считываемой информации
mov bx, offset message ; в bx - адрес буфера данных, [es]:[bx]
mov ah, 03h ; 3-я функция 13-го прерывания - запись на диск
int 13h ;
cmp ah, 0 ; ищем ошибки, при удачном завершении в ah остается 0
je noer ;
cmp ah, 03h ; 03 - диск защищен от записи
je err03 ;
cmp ah, 04h ; 04 - сектор не найден
je err04 ;
cmp ah, 07h ; 07 - повреждена таблица параметров дисковода
je err07 ;
cmp ah, 0ah ; 0А - дефектный сектор
je err0a ;
cmp ah, 0bh ; 0В - дефектная дорожка
je err0b ;
cmp ah, 0ch ; 0С - нестандартный формат носителя
je err0c ;
cmp ah, 80h
je err80
mov ah, 9h ; Если какая-то неизвестная ошибка
mov dx, offset xzerror ;
int 21h ;
jmp exit ; на выход
noer:
mov ah, 9h
mov dx, offset noerr ; ошибок нет
int 21h
jmp exit
err03:
mov ah, 9h
mov dx, offset err03
int 21h
jmp exit
err04:
mov ah, 9h
mov dx, offset err04
int 21h
jmp exit
err07:
mov ah, 9h
mov dx, offset err07
int 21h
jmp exit
err0a:
mov ah, 9h
mov dx, offset err0a
int 21h
jmp exit
err0b:
mov ah, 9h
mov dx, offset err0b
int 21h
jmp exit
err0c:
mov ah, 9h
mov dx, offset err0c
int 21h
jmp exit
err80:
mov ah, 9h
mov dx, offset errnd ; нет диска (превышен таймаут обращения)
int 21h
jmp exit
exit: ; выход из программы
mov ah, 0 ; ждем нажатия любой кнопки клавиатуры
int 16h
mov ax, 3h ; очистка экрана
int 10h
mov ah, 4Ch ; выход в DOS
int 21h
end ; конец :)
Список литературы
1. Питер Абель. Ассемблер. Язык и программирование для IBM PC: пер. с англ. - К.: Век+, М.: ЭНТРОП, К.: НТИ, 2003 - 736 с.
2. Джордан. Программирование на ассемблере. М.:
3. Ризаев И.С. Лекционный курс по дисциплине: «Системное программное обеспечение». Казань: КАИ, 2004.
4. Кулаков В. Программирование на аппаратном уровне. Специальный справочник. Питер, 2003.
Размещено на Allbest.ru
Подобные документы
Твердотельный накопитель SSD, его виды: на основе микросхем памяти и флеш-памяти. Сравнение производительности HDD и SDD в рабочих условиях. Способы записи информации на винчестер. Технология структурированного носителя. Суперпарамагнитный предел.
курсовая работа [53,3 K], добавлен 15.05.2012Дисковод (FDD) - это устройство, предназначенное для чтения информации с гибких магнитных дисков, а также записи на них (как правило, используется для переноса информации с одного компьютера на другой). Информация записывается на гибкий магнитный диск.
контрольная работа [502,1 K], добавлен 28.02.2004Проектирование микропроцессорного устройства для записи и чтения данных из памяти flash-типа и осуществления взаимодействия с персональным компьютером посредством универсальной последовательной шины (USB). Программное обеспечение для устройства.
курсовая работа [868,3 K], добавлен 23.12.2012Внутренние и внешние устройства персонального компьютера. Особенности смешанной и разделенной кэш-памяти. Технология перпендикулярной записи на жестком диске. Основные устройства лазерной записи и их функции. Назначение источника бесперебойного питания.
курсовая работа [410,0 K], добавлен 05.12.2012Сущность и виды компакт-привода (оптического привода), история его появления. Формат хранения данных на диске. Считывание информации с диска. Скорость чтения/записи CD. Суть технологии записи высокой плотности. Технические особенности CD и DVD дисков.
контрольная работа [26,1 K], добавлен 04.10.2011Средства машинного хранения данных, используемые в персональных компьютерах. Особенности механизмов чтения-записи. Контроль достоверности хранимых в памяти данных. Уровни кэш-памяти. Политика записи при кешировании, сравнение производительности.
презентация [2,7 M], добавлен 10.08.2013Первая оптико-цифровая система записи и воспроизведения, изобретенная Расселом. Физические характеристики и конструкция компакт-диска. Особенности оптического способа считывания информации. Что находится внутри кадра. Принципы доступа к информации.
реферат [71,7 K], добавлен 26.03.2010Предназначение дисковых накопителей, схема устройства жесткого диска. Критерии эффективности физической организации файлов. Схема адресации кластеров файла, используемая в стандартной на сегодняшний день для UNIX файловой системе ufs. Функции флэш-памяти.
реферат [4,0 M], добавлен 09.12.2009Анализ работы параллельных вычислений на видеокарте GeForce GT 540M с использованием текстурной памяти. Рассмотрение специфических особенностей по адресации текстурной памяти. Изучение основ чтения и записи данных. Описание примеров данных программ.
лабораторная работа [3,1 M], добавлен 04.12.2014Физическая и логическая структура жёстких дисков персонального компьютера. Методы организации файлов. Процесс форматирования жёсткого диска. Разработка программы, реализующей функции файлового обмена, чтения и записи с образом файловой системы FAT16.
курсовая работа [166,3 K], добавлен 09.06.2015