Запис і читання інформації диска зі зміною чергування секторів

Страницы работы

Содержание работы

Лабораторна робота №5

Тема: Запис і читання інформації диска зі зміною чергування секторів.

Мета: Придбання навичок роботи з нестандартними можливостями дисків низькому рівні. Використання зміни чергування секторів на гнучкому диску.

            Індивідуальне завдання: Необхідно розробити і налагодити програму, що дозволяє виконати форматування інженерних секторів дискети зі зміною чергування секторів, запис, читання і перевірку якості виконання операції з цими секторами

            Номер доріжки 80, сторона 0, розмір сектору 512 байт.

            Послідовність секторів       1, 9, 2, 8, 7, 3, 4, 6, 5.

            Кількість секторів N = 9.

            Сектор, в який виконується запис даних L = 9.

            Зміщення для першого запису = 14, для другого = 512-10 = 502.

            Метод та алгоритм рішення задачі:

  1. Створення таблиці форматування інженерного циліндру для контролера дисководів за допомогою переривання 1Eh (80 циліндр, 0 сторона, 9 секторів, довжина сектору 512 байт)
  2. Виконання форматування потрібного циліндру (ah=05h,int 13h).
  3. Запис до нього індифікаційної інформації та перевірка якості запису.
  4. Читання отриманої інформації.

            Текст програми:

.286

.model small

;------------------------------------------------------------------------

sts      segment stack

         dw 256 dup(1)

tos      label   word

sts      ends

;------------------------------------------------------------------------

data     segment

;          д  г с  дс

fmtinfo db 80,0,01,2

        db 80,0,09,2

        db 80,0,02,2

        db 80,0,08,2

        db 80,0,07,2

        db 80,0,03,2

        db 80,0,04,2

        db 80,0,06,2

        db 80,0,05,2

DCP     db 0dfh

        db 002h

        db 025h

        db 002h         ; код длины сектора (512)

        db 09h          ; длина дорожки

        db 01bh

        db 0ffh

        db 054h

        db 0f6h

        db 00fh

        db 008h

f_error_msg db 'ошибка при выполнении форматирования',13,10,7,'$'

w_error_msg db 'ошибка при выполнении записи',13,10,7,'$'

r_error_msg db 'ошибка при выполнении чтения',13,10,7,'$'

f_ok       db 'Форматирование 9 сектора прошло успешно',13,10,7,'$'

w_ok       db 'Запись в 9 сектор прошла успешно',13,10,7,'$'

r_ok       db 'Чтение 9 сектора прошло успешно',13,10,7,'$'

buf_msg1   db 'Буфер перед чтением:',13,10,7,'$'

buf_msg2   db 'Буфер после чтения:',13,10,7,'$'

w_buffer db  14 dup ('▒'), '  Moroz Sanya  ', 474 dup('▒')

         db 'KIT-12b', 3 dup('▒'),13,10,'$'

r_buffer db  512 dup('r'),13,10,'$'

olddcp  dd     ?        ; старый адрес таблицы параметров дисковода

data    ends

;------------------------------------------------------------------------

code    segment

        assume cs:code,ds:data,es:data,ss:sts

start:

        mov ax,data

        mov ds,ax

        mov es,ax

        mov ax,sts

        mov ss,ax

        lea sp,tos

        push es                 ; настройка таблицы параметров дисковода

        mov ah,35h

        mov al,1eh

        int 21h

        mov word ptr [olddcp], bx

        mov word ptr [olddcp + 2], es

        pop es

        mov ah,25h

        mov al,1eh

        lea dx,DCP

        int 21h

        drv equ 0 ; 1

        mov ah,05h              ; форматирование

        lea bx,fmtinfo          ; информация для форматирования

        mov cx,5000h            ; номер дорожки

        mov dl,drv              ; номер устройства

        mov dh,0                ; номер головки

        int 13h

        mov dx,offset f_error_msg

        jc  dsk_error

        lea dx,f_ok

        mov ah,09

        int 21h

        mov ah,03h              ; запись

        mov al,1                ; 1 сектора

        mov bx,offset w_buffer  ; буфер, содержащий данные

        mov ch,50h              ; номер дорожки

        mov cl,9                ; номер сектора

        mov dl,drv              ; номер устройства

        mov dh,0                ; номер головки

        int 13h

        mov dx,offset w_error_msg

        jc  dsk_error

        lea dx,w_ok

        mov ah,09

        int 21h

        mov ah,1

        int 21h

        mov dx,offset buf_msg1

        mov ah,09

        int 21h

        mov dx,offset r_buffer

        int 21h

        mov ah,1

        int 21h

        mov ah,02h              ; чтение

        mov al,1                ; 1 сектора

        mov bx,offset r_buffer  ; буфер для прочитанных данных

        mov ch,50h              ; номер дорожки

        mov cl,9                ; номер сектора

        mov dl,drv              ; номер устройства

        mov dh,0                ; номер головки

        int 13h

        mov dx,offset r_error_msg

        jc  dsk_error

        mov dx,offset buf_msg2

        mov ah,09

        int 21h

        mov dx,offset r_buffer

        int 21h

        mov dx,offset r_ok

        int 21h

        mov ah,1

        int 21h

        jmp exit

dsk_error:

        mov ah,09h

        int 21h

exit:

        push ds

        mov dx, word ptr [olddcp]

        mov ax, word ptr [olddcp+2]

        mov ds, ax

        mov ah,25h

        mov al,1eh

        int 21h

        pop ds

        mov ah, 0

        int 13h

        mov ah,4ch

        int 21h

code    ends

end     start

Результати роботи програми:

Форматирование 9 сектора прошло успешно    

Запись в 9 сектор прошла успешно

Буфер перед чтением:

rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr

Буфер после чтения:

▒▒▒▒▒▒▒▒▒▒▒▒▒▒      

▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒KIT-14v▒▒▒

Чтение 9 сектора прошло успешно

Висновок: Ми навчилися писати програму, що форматує інженерний циліндр і записує до нього інформацію.

Похожие материалы

Информация о работе