Лабораторна робота №5
Тема: Запис і читання інформації диска зі зміною чергування секторів.
Мета: Придбання навичок роботи з нестандартними можливостями дисків низькому рівні. Використання зміни чергування секторів на гнучкому диску.
Індивідуальне завдання: Необхідно розробити і налагодити програму, що дозволяє виконати форматування інженерних секторів дискети зі зміною чергування секторів, запис, читання і перевірку якості виконання операції з цими секторами
Номер доріжки 80, сторона 0, розмір сектору 512 байт.
Послідовність секторів 1, 9, 2, 8, 7, 3, 4, 6, 5.
Кількість секторів N = 9.
Сектор, в який виконується запис даних L = 9.
Зміщення для першого запису = 14, для другого = 512-10 = 502.
Метод та алгоритм рішення задачі:
Текст програми:
.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 сектора прошло успешно
Висновок: Ми навчилися писати програму, що форматує інженерний циліндр і записує до нього інформацію.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.