Приведите пример применения команды для BIOS INT, выполняющей чтение одного сектора - Assembler
Формулировка задачи:
Добрый день!
Помогите, пожалуйста, с задачей в tasm..
Напишите команды для BIOS INT 13H, выполняющие чтение одного сектора, в области памяти INDISK с диска A, головки 0, дорожка 6, сектора 3
товарищи, кто в силах.. очень прошу помочь
Решение задачи: «Приведите пример применения команды для BIOS INT, выполняющей чтение одного сектора»
textual
Листинг программы
- .model tiny
- .code
- .startup
- Drive = 0 ; диск A:
- Head = 0
- Track = 6
- Sec = 3
- Attempts = 3 ; кол-во попыток чтения
- mov cx,Attempts
- TryAgain:
- push cx
- mov ah,2 ; ah = 2 (функция)
- mov al,1 ; al = 1 (кол-во секторов для чтения)
- mov ch,Track and 0FFh ; ch = младшие 8 бит дорожки
- mov cl,Sec or ((Track shr 2) and 0C0h) ; cl = номер сектора + биты 8 и 9 номера дорожки в старших 2-х битах (6 и 7) cl
- mov dh,Head ; dh = головка
- mov dl,Drive ; dl = диск
- lea bx,Buffer ; es:bx = адрес буфера
- int 13h ; читаем!
- pop cx
- jnc Ok
- xor ah,ah
- int 13h ; делаем сброс
- loop TryAgain
- Error:
- ; ошибка чтения, попытки исчерпаны
- Ok:
- ; всё хорошо, результат в es:bx
- int 20h ; выход
- Buffer db 512 dup (?)
- end
Объяснение кода листинга программы
Этот код на языке Assembler использует функцию BIOS INT 13h для чтения одного сектора с жёсткого диска на адрес буфера. Если чтение не удалось, происходит сброс и попытка повторяется. Если сектор успешно прочитан, результат сохраняется в буфере и процесс завершается. Номер сектора, с которого начинается чтение, указан в переменной Sec, а номер дорожки — в переменной Track. Головка диска — в переменной Head, а диск, с которого начинается чтение, — в переменной Drive. Список переменных и их значений:
- Drive = 0
- Head = 0
- Track = 6
- Sec = 3
- Attempts = 3
- cx (счётчик попыток чтения)
- ah (регистр функции) = 2
- al (регистр количества секторов для чтения) = 1
- ch (регистр, содержащий номер дорожки)
- cl (регистр, содержащий номер сектора)
- dh (регистр, содержащий головку диска)
- dl (регистр, содержащий номер диска)
- bx (регистр, содержащий адрес буфера)
- Buffer (буфер для данных)
- Error (ошибка чтения, попытки исчерпаны)
- Ok (всё хорошо, результат в es:bx)
- int 13h (чтение сектора с жёсткого диска)
- int 20h (выход)
- Loop (цикл повторения попыток чтения)
- TryAgain (метка для повторной попытки чтения)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д