Предлагаю попробовать написать программу для чтения сектора с диска в реальном режиме. Она также пригодится, когда мы будем учиться форматировать флешки и диски.
Вариантов реализации подобных программ много, но я выбрал свой с двумя буферами - один для "сырых" данных, другой для подготовленных для вывода на экран. Данные сектора не помещаются на консольный экран 80х25, поэтому, должна быть возможность смещения строк вверх-вниз. В общем, сами все поймете, когда будете разбирать программу.
Если что-то будет непонятно почитайте другие мои статьи: "регистры", "условные и безусловные переходы", "как работает стек" и др., не хочу повторяться в каждой статье.
Считываем сектор при помощи функции 02h прерывания биос int 13h, эта функция позволяет считывать сектора в адресном пространстве до 8.4 гигабайт, работает в формате CHS т.е., цилиндр-головка-сектор. Для чтения секторов в большем адресном пространстве следует использовать расширенную функцию 42h прерывания int 13h, она использует пакет данных, который должен храниться в определенном секторе оперативной памяти, реализация этой функции немного сложнее, ее я тоже планирую описать в следующих статьях.
Тех, кто боится трудностей, должен предупредить сразу: программа работает в реальном режиме, т.е., из DOS-подобных ОС (FreeDOS, MSDOS и др.) установленных, например, на флешку.
начнем
первый буфер заполняем нулями, второй пробелами и атрибутами символа ярко-зеленый на черном, на них будем накладывать наши данные.
Программа читает первый сектор диска, тот, на который установлена MBR, для чтения других секторов измените ch, cl, dh, для смены диска измените dl (80h- 87h), 80h у меня читает тот диск, на который установлена программа, у вас может иметь другое значение.
считывание таких клавиш как F1, F2, PGUP происходит в два этапа: сначала в буфер клавиатуры заносится 0, предупреждающий о том, что далее следует функциональная клавиша, затем код самой клавиши
в начале строки выводим "0х0000", затем, смещаем di влево (это в "line" происходит), di будет указывать на второй "0" если считать справа, на его место записываем номер строки.
думаю, здесь из комментариев все понятно
если здесь что-то не понятно прочитайте статью "прямой доступ к текстовой видеопамяти".
в сх мы считаем количество циклов, сначала в большую сторону, а при записи в меньшую
Для компиляции воспользуйтесь FASM, для проверки DosBox.
#ассемблер #чтение с диска #int 13h функции #чтение сектора диска