Приведите пример применения команды для 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 (метка для повторной попытки чтения)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д