Size: a a a

pro.osdev - os development

2021 July 10

E

Entusiast in pro.osdev - os development
Добрый день, немного не понимаю, как работает прерывание 0x13 - дисковой в\в

Допустим, мне нужно просто прочитать жёсткий диск побайтно, до конца, или записать туда что-то побайтно - как это будет выглядеть?
источник

d

disba1ancer in pro.osdev - os development
читать диски только блоками можно
источник

E

Entusiast in pro.osdev - os development
А, ну вот поэтому и не понимал - искал то, чего нет
источник
2021 July 11

DF

Dollar Føølish in pro.osdev - os development
Ну точнее секторами
источник

DF

Dollar Føølish in pro.osdev - os development
Блок понятие широкое
источник

BD

Berkus Decker in pro.osdev - os development
Ну да, чтение документации на 0x13 где все говорит про сектора должно было натолкнуть на мысль.
источник

DF

Dollar Føølish in pro.osdev - os development
Хех
источник

E

Entusiast in pro.osdev - os development
Непривычно как-то. Теперь уже понял, что читается по 512 байт (1-й сектор, 2-й сектор +512 и т.д) (в зависимости от настроек, может 128, больше или меньше).
Всё встало на свои места
источник

d

disba1ancer in pro.osdev - os development
а это ты какими функциями пользуешься?
источник

E

Entusiast in pro.osdev - os development
int 0x13 / 0x2
int 0x13 / 0x3
источник

d

disba1ancer in pro.osdev - os development
а про это старьё
источник

E

Entusiast in pro.osdev - os development
Почему старьё? А есть что-то получше?
источник

d

disba1ancer in pro.osdev - os development
да, есть 0x42 и 0x43
источник

d

disba1ancer in pro.osdev - os development
только там размер сектора надо проверять через 0x48
источник

E

Entusiast in pro.osdev - os development
И чем они лучше?
источник

E

Entusiast in pro.osdev - os development
А, понял... LBA
источник

E

Entusiast in pro.osdev - os development
Не могу понять, почему так выдаёт.
Читаю первый сектор в память, вывожу, и вижу, что всё правильно считалось - память равна коду первого сектора
Потом пишу туда нули (пытался через 0x5 - форматировать, всё равно тот же результат), снова читаю, и всё равно совпадает!
источник

E

Entusiast in pro.osdev - os development
Вот код:
;Read 512 bytes
   mov     ax, 0x0201
   mov     dx, 0x0080
   mov     cx, 0x0001
   mov     bx, result
   int     0x13

   push    word[result+2]  ; Equal
   call    print_hex

   push    new_line
   call    print_str

   push    word[start]     ; Equal
   call    print_hex

   ;Write nulls to 3rd sector
   mov     ax, 0x0301
   mov     dx, 0x0080
   mov     cx, 0x0003
   mov     bx, buf
   int     0x13

   ;Read sector
   mov     ax, 0x0201
   mov     dx, 0x0080
   mov     cx, 0x0003
   mov     bx, result
   int     0x13

   push    new_line
   call    print_str

   push    word[result+2]  ;Why not null?
   call    print_hex
источник

E

Entusiast in pro.osdev - os development
buf - содержится в втором секторе, и равен просто массиву из нулей
источник

BD

Berkus Decker in pro.osdev - os development
попробуй push [buf]; call print_hex
источник