- •Федеральное агентство по образованию Брянский государственный технический университет
- •1.Постановка задачи.
- •2.Краткое введение. Головки, цилиндры, сектора дискеты.
- •Загрузочная запись boot
- •3. Структура программы.
- •Title.Asm
- •Menu.Asm
- •Dump.Asm
- •4. Работа программы.
- •4. При выборе «Дамп» программа запрашивает ввод информации
Dump.Asm
Является главным модулем программы к которой подключены модули меню программы (Menu.asm) и титульного листа (Title.asm).
Содержит процедуры:
1. Запроса информации у пользователя о расположение сектора на дискете который необходимо дампировать.( название дисковода, номер цилиндра, головки и сектора) и проверяет корректность выполнения программы.
GetDupmParam proc
pusha
mov ax, 0003h
int 10h
;отображаем строку
mov ax, offset sInputFile
call ShowString
;запрашиваем строку
mov ax, offset bufFile
call InputString
;дописываем 0 в конец файла
xor bx, bx
mov bl, bufFile[1]
mov bufFile[bx + 2], 00h
mov ax, offset sInputDisk
call ShowString
mov ax, offset bufDisk
call InputString
;переводим букву на номер диска
mov al, byte ptr bufDisk[2]
cmp al, 'A'
jb @@jExit_ErrDisk
cmp al, 'B'
ja @@jExit_ErrDisk
sub al, 'A'
mov Disk, al
mov ax, offset sInputCylinder
call ShowString
mov ax, offset bufCylinder
call InputString
mov ax, word ptr bufCylinder[2]
call CharToHex
mov Cylinder, al
mov ax, offset sInputHead
call ShowString
mov ax, offset bufHead
call InputString
mov ax, word ptr bufHead[2]
call CharToHex
mov Head, al
mov ax, offset sInputSector
call ShowString
mov ax, offset bufSector
call InputString
mov ax, word ptr bufSector[2]
call CharToHex
mov Sector, al
call DumpToFile
mov ax, offset sDumpComplete
call ShowString
jmp @@jExit
@@jExit_ErrDisk:
mov ax, offset sErrorDisk
call ShowString
@@jExit:
mov ah, 00h
int 16h
popa
ret
GetDupmParam endp
2. Организующую запись в файл дампированный сектор в виде таблицы содержащей смешение в секторе, байтов информации в Hexформате и соответствующие им символы в форматеASCII
proc DumpToFile
pusha
mov ax, offset bufSectorData
call ReadSector
jc @@jExit_ReadError
mov ax, offset bufFile[2]
call CreateFile
jc @@jExit_FileError
mov ax, offset bufSectorData
mov cx, 512
call Dump
call CloseFile
jmp @@jExit
@@jExit_ReadError:
mov ax, offset sReadSectorErr
call ShowString
jmp @@jExit
@@jExit_FileError:
mov ax, offset sFileErr
call ShowString
jmp @@jExit
@@jExit:
popa
ret
endp
3. Производящую непосредственно дамп сектора дискеты , преобразует адрес в текстовый вид и сохроняет в буфер, записывает байта в ASCII и в Hex, а также производит проверку на неотображаемые символы и в формате ASCII заменяет пробелами.
proc Dump
pusha
mov si, ax
mov di, offset DumpBuffer
xor dx, dx
mov ax, offset FileHeader1
call WriteString
mov ax, offset FileHeader2
call WriteString
mov ax, offset FileHeader3
call WriteString
jNextParag:
xor di, di
;преобразуем адрес в текстовый вид и сохроняем в буфер
mov al, dh
call HexToChar
mov word ptr DumpBuffer[3], ax
mov al, dl
call HexToChar
mov word ptr DumpBuffer[5], ax
jNextByte:
;запись байта в ASCII
mov al, [si]
mov ah, ' '
cmp al, 09h
je jBadOutChar
cmp al, 0Ah
je jBadOutChar
cmp al, 0Dh
je jBadOutChar
mov ah, al
jBadOutChar:
mov DumpBuffer[di + 60], ah
; запись байта в Hex
call HexToChar
mov bp, di
shl bp, 1 ;битовый сдвиг (*2)
add bp, di
mov word ptr DumpBuffer[bp + 10], ax
inc si
inc di
inc dx
cmp di, 10h
jb jNextByte
mov ax, offset DumpBuffer
call WriteString
cmp dx, cx
jb jNextParag
mov ax, offset FileHeader4
call WriteString
jExit:
popa
ret
endp
4. А также содержит процедуры перевода строки в 16-фомат(proc CharToHex) и обратно(proc HexToChar). Открытие или создание(proc CreateFile) и закрытия файла(proc CloseFile). Ввод строки(proc InputString), отображение строки(proc ShowString) и запись строки в файл(proc WriteString)