Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
KPiYaP_Shpory.doc
Скачиваний:
46
Добавлен:
11.05.2015
Размер:
309.76 Кб
Скачать

Int 13h ;

Прерывания DOS 25H и 26H читают и записывают абсолютные сектора диска, соответственно. Надо поместить логический номер стартового сектора в DX, а DS:BX должны указывать на буфер. CX содержит число секторов для чтения или записи, а AL - номер накопителя, где 0 = A, 1 = B и т.д.

Процедуры портят все регистры, кроме сегментных. При возврате регистр флагов остается на стеке, оставляя стек невыровненным. Не забудьте вытолкнуть это значение со стека сразу после возврата (в примере это значение выталкивается в CX).

;---в сегменте данных

BUFFER DB DUP 5000(?) ;создаем буфер

;---читаем сектора

PUSH DS ;сохраняем регистры

MOV AX,SEG BUFFER S:BX должны указывать на буфер

MOV DS,AX ;

MOV BX,OFFSET BUFFER ;

MOV DX,63 ;логический номер сектора

MOV CX,9 ;читаем всю дорожку

MOV AL,0 ;накопитель A

Int 25h ;функция чтения секторов

POP CX ;выталкиваем со стека флаги

POP DS ;восстанавливаем регистры

JNC NO_ERROR ;если нет ошибки, то на продолжение

CMP AH,3 ;проверка возможных ошибок

.

.

NO_ERROR: ;продолжение программы

Если при возврате флаг переноса равен 1, то произошла ошибка и в этом случае AH и AL содержат два отдельных байта статуса ошибки. Если AH = 4, то указанный сектор не найден, а если AH = 2, то диск неверно отформатирован. Если AH = 3, то была попытка записи на дискету, защищенную от записи. Все остальные значения AH говорят об аппаратной ошибке.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]