Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
14 / 14 / 8
Регистрация: 26.09.2007
Сообщений: 919

Чтение диска (int 13h ah=02h) - как определить входные параметры?

14.06.2023, 16:31. Показов 1226. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Я читаю флоппи диск прерыванием 13h AH=2 есть исходный код. Вопрос- какой там алгоритм преобразовать логический сектор который мы хотим прочитать в вид CHS (Цилиндр-Головка-Сектор) т.е. как там эти значения CHS (Цилиндр-Головка-Сектор) вычисляються на базе логического сектора? Заранее спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.06.2023, 16:31
Ответы с готовыми решениями:

Параметры при вызове int 10h ah=13h
Здравствуйте в видеорежиме есть функция, которая выводит строку в назначенном положении курсора. Не могу разобраться,es:bp, что туда...

Чтение CD Rom функцией ah=42h int 13h
Добрый день. Есть такой код на TASM и не хочет компилироваться в двух строках (я отметил). Как исправить? Заранее спасибо. .MODEL...

DOS виснет на int 13h при чтении MBR жесткого диска
читаю MBR жесткого диска, досю гружу с флешки, как доходит до инт 13 - встает. masm .model small .stack 256 .data mboot db 512...

6
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
14.06.2023, 17:13
kurlyak,
ОС на Assembler https://www.cyberforum.ru/cgi-bin/latex.cgi?\to закрепленная тема Пишем загрузочный сектор
1
14 / 14 / 8
Регистрация: 26.09.2007
Сообщений: 919
15.06.2023, 12:43  [ТС]
Я еще не очень разбираюсь в ассемблере там сложный очень код по ссылке. Я нашел код попроще и прокоментировал.

Мой код.

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
logical2chs:    ;calculate head, track and sector settings for int 13h
                ;INPUT: logical sector in AX
                ;OUTPUT: registers for int 13h
    push bx
    push ax
 
    ;first calculate which start phisical sector on disk
    ;start phisical sector CL = start logical sector % SectorsPerTrack
 
    mov bx, ax          ;start logical sector for reading in AX
 
    mov dx, 0           ;first the sector
    div word [SectorsPerTrack] ;AX = AX div SectorsPerTrack
    add dl, 01h         ;physical sectors start at 1
    mov cl, dl          ;physical sector in CL for int 13h
 
    ;next calculate which head and track
 
    mov ax, bx  ;AX = start logical sector for reading
 
    mov dx, 0           
    div word [SectorsPerTrack]  ;AX = AX div SectorsPerTrack
    mov dx, 0
    div word [NumHeads]         ;AX = AX div NumHeads
    mov dh, dl                  ;which head/side
    mov ch, al                  ;which track
 
    pop ax
    pop bx
 
    mov dl, byte [bootdev]      ; Set correct device
 
    ret
Мой расчет

Code
1
2
3
sector CL = start logical sector % SectorsPerTrack
head DH = (start logical sector / SectorsPerTrack) % NumHeads
track CH = (start logical sector / SectorsPerTrack) / NumHeads
Кто может сказать ошибки нету в расчете?
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
15.06.2023, 14:12
Цитата Сообщение от kurlyak Посмотреть сообщение
Assembler
1
2
add dl, 01h         ;physical sectors start at 1
mov cl, dl          ;physical sector in CL for int 13h
sector CL = start logical sector % SectorsPerTrack
Секторы на дорожке для int 19 нумеруются от 1.
Цитата Сообщение от kurlyak Посмотреть сообщение
еще не очень разбираюсь в ассемблере
попробуйте воспользоваться для экспериментов тем, в чём лучше разбираетесь.
1
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6812 / 2052 / 238
Регистрация: 14.12.2014
Сообщений: 4,305
Записей в блоге: 12
15.06.2023, 14:42
kurlyak, зачем 2 раза производить одно и то же деление на SectorsPerTrack?
К тому же, стоит заметить, что номер дорожки записывается не просто в CH, но ещё и в 2 старших бита CL.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
logical2chs:    ; calculate head, track and sector settings for int 13h
                ; INPUT: logical sector in AX (starting from 0)
                ; OUTPUT: registers for int 13h
 
        xor     dx,dx           ; 'cwd' can be used here to save a byte if AX < 8000h
        div     word [SectorsPerTrack]
        inc     dx
        mov     cl,dl           ; sector
 
        xor     dx,dx           ; 'cwd' can be used here to save a byte if SectorsPerTrack > 1 or input AX < 8000h
        div     word [NumHeads]
        mov     ch,al           ; track
        shr     ax,2            ;*
        and     al,11000000b    ;* bits 8..9 of track number
        or      cl,al           ;* track high bits
        mov     dh,dl           ; head
        mov     dl,[Device]
        ret
; * requires only if track number can be more than 255
Секторов на дорожку не бывает 1, поэтому во втором случае можно смело использовать cwd.
Да и дискет на 16+ МБ тоже не бывает, так что и в первом случае тоже

Вообще, надо сказать, что проще использовать функции ah = 4?h, т.к. с ними не надо возиться с конвертацией. И они не поддерживаются только на очень-очень старых машинах.

Цитата Сообщение от politoto Посмотреть сообщение
Секторы на дорожке для int 19 нумеруются от 1.
У него там add dl,1 есть.
P.S. int 19 выглядит необычно, новичок не сразу сообразит, что это int 13h
3
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
15.06.2023, 15:51

Не по теме:

Цитата Сообщение от Jin X Посмотреть сообщение
int 19 выглядит необычно, новичок не сразу сообразит, что это int 13h
Автор вопроса показал, что хорошо разбирается в десятичной системе.



Добавлено через 2 минуты

Не по теме:

Цитата Сообщение от Jin X Посмотреть сообщение
проще использовать функции ah = 4?h,
Для ретро-кодинга это не важно.

PS Некоторые современные симуляторы не разрешают использовать логическую адресацию для виртуальных дискет.

1
16.06.2023, 16:13

Не по теме:

politoto, ну симуляторы/эмуляторы – это вообще отдельные платформы :D

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.06.2023, 16:13
Помогаю со студенческими работами здесь

Чтение сектора CD-ROM функцией BIOS (ah=42h int 13h)
.MODEL SMALL .STACK 5000h .DATA debug_found db &quot;debug found!&quot;, 13, 10, 0 drive_not_ready db &quot;Drive not ready!&quot;, 0 ...

Непонятна работа функции ah=42h int 13h (чтение CD ROM) в фрагменте кода
mov ax, 16 ;start read at sector mov dh, 01h ;Number of sectors to read mov bx, buffer mov , ds call read_sectors ...

Про то как DIV подрезает работу функции 42h int 13h
Привет, ребята! Хочу на Fasm'e сделать загрузчик с флешки, который использует FAT 16. Сам разбираюсь и людям хочу помочь. Хоть тема не...

Как записать данные в загрузочный сектор без использования int 13h
Подскажите, пожалуйста, как записать данные в загрузочный сектор без помощи 13h прерывания.

Как проверить поддержку расширенного режима работы с int 13h из-под Windows?
Всем привет. Необходимо из-под Windows (включая x64) проверить - поддерживает ли BIOS'овский int 13h расширенные функции работы с дисками...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru