Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОТВЕТЫ ЗЫКОВ.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
678.4 Кб
Скачать

380 '''Проверяем кластер на четность

390 IF CLUSTERNUMBER! MOD 2 <> 0 THEN 420 'уход, если нечетный

400 NEXTCLUSTER$ = RIGHT$(H$,3) 'если четный, то правые 3 цифры

410 GOTO 430

420 NEXTCLUSYER$ = LEFT$(H$,3) 'если нечетный, то левые

430 PRINT NEXTCLUSTER$ 'печатаем результат

Средний уровень.

Функция DOS 1CH дает информацию о таблице размещения файлов,

но не дает саму FAT. Поместите номер накопителя в DL, где 0 =

накопитель по умолчанию, 1 = A, и т.д. При возврате DX содержит

число кластеров в FAT, а CX - число байтов в секторе. DS:BX ука-

зывает на байт, содержащий первый байт FAT, т.е. на код, указы-

вающий тип диска; эти коды перечислены в [1.1.5].

Низкий уровень.

Намного легче получить доступ к FAT в языке ассемблера. Отме-

тим, что умножение номера кластера на 1.5 производится копирова-

нием числа, сдвигом копии вправо на 1 бит для деления пополам и

сложением копии с оригиналом. Этот метод автоматически окгруляет

результат вниз. Код, считывающий сектора FAT в память, обсуждает-

ся в [5.4.2].

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

BUFFER DB 1024 DUP(0) ;отводим место для 2 секторов

;---читаем FAT в память

LEA BX,BUFFER ;указываем на буфер данных

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

MOV CX,2 ;2 сектора

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

Int 25h ;читаем сектора

POP CX ;восстанавливаем стек

;---получаем номер кластера

MOV AX,3 ;номер кластера в AX

MOV CX,AX ;делаем копию

MOV DX,AX ;делаем вторую копию

SHR DX,1 ;делим вторую копию на 2

ADD CX,DX ;складываем между собой

ADD BX,CX ;добавляем как смещение

MOV DX,[BX] ;получаем 2 байта из этого места

TEST AX,1 ;номер кластера нечетный?

JNZ ODD_CLUSTER ;уход, если да

AND DX,0000111111111111B ;получаем номер

JMP SHORT CONTINUE ;уход через обработку нечетного

ODD_CLUSTER: MOV CL,4 ;подготовка к сдвигу вправо

SHR DX,CL ;сдвигаем вниз старшие 12 битов

CONTINUE:

9.Прерывания. Bios прерывания. Dos прерывания. Hаписание собственного прерывания

00h: Деление на ноль.

01h: Пошаговое.

02h: Немаскируемое.

03h: Точка прерыв.

04h: Переполнение.

05h: Печать экрана.

06h: (резерв)

07h: (резерв)

08h: Таймер.

09h: Клавиатура.

0Ah-0dh: (hdwr ints)

0Eh: Дискета.

0Fh: (hdwr int)

10h: Видео сервис.

11h: Список оборудования.

12h: Размер исп.памяти.

13h: Дисковый в/в.

14h: В/в через последовательный порт

15h: Расшир.сервис AT.

16h: В/в клавиатуры.

17h: В/в принтера.

18h: ROM-BASIC.

19h: Загрузка.

1Ah: В/в таймера.

1Bh: Прерывание клавиатуры.

1Ch: Пользовательское прерывание по таймеру

1Dh: Видео параметры

1Eh: Параметры дискет

1Fh: Символы графики

Прерывания DOS

20h: Завершить программу

21h: Сервис DOS

25h/26h: Абсолютные чтение/запись диска

27h: Завершиться, но остаться резидентным

28h: Квант времени DOS (НЕТ В ДОКУМЕНТАЦИИ)

2eh: Выполнить команду DOS (НЕТ В ДОКУМЕНТАЦИИ)

2fh: Мультиплексное прерывание (спулинг печати)