На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> int 13h
    Люди! Кто-нибудь знает, как через int 13h обращаться к диску, у которого > 1024 циллиндров? (для благих намерений).
    И если есть доки/примеры для работы с дисками через порты (IDE,SCSI и др), буду очень рад. Так же неплохо бы "заиметь" описание разных файловых систем (NTFS, например). И узнать, чем отличается FAT32 от FAT16 (кроме битности).
    - Спасибо!
    eujin@mailru.com
      Если память мне не изменяет, то поддержка больших дисков есть в INT 25h/26h. Про INT 13h ничего не слышал.
      Описание есть в xview.
        У меня есть крохотная утиля , с пом. которой я вручную разбивал большие диски (такой гемморой). Намылю в субботу (ее еще найти надо). Если хочешь сам узнать, как через int 13h работать с большими хардами, продизасми (я так и сделал :))) ) виндовый bootsector (то есть первый из трех) - там есть алгоритм (смысл в том, что используешь как параметры не CHS харда, а абсолютный сектор !!!!!!!!)
          Упс, поправочка, дизасмить надо Master boot record :)
            2 devilray: А мысль ведь неплохая :) . Хотя я уже нашёл. Для LBA есть функции 4xh / int 13h. Но утилитку всё-равно пришли :)
            2 upaul: int 25h/26h поддерживает партишаны для 2Gb. К тому же, int 25h/26h - это не int 13h :))) . Для больших дисков есть ax=7305h/cx=0ffffh/int 21h
            Хотелось бы ещё описание систем и работы через порты.
              Высылаю тебе свою простенькую программку определения параметров устройств IDE/ATAPI, а также любопытную информацию по CD/ATAPI.
              Может пригодится!?
              Вообще же рекомендую скачать спецификацию по IDE.
              Она валяется на сайте
              http://www.halyava.ru/document/
                Боюсь, что затея дизассемблировать MBR окажется бесполезной, так как партиция, начало которой располагается дальше 1023-го цилиндра не грузится.
                Попробуй в Partition Magic'е создать такую партицию, он тебе напишет что-то в таком духе
                  Вобщем утилиту я не на нашел (диск 60 Гб - я там однажды HalfLife потерял :))) ). Но я вспомнил как это (в смысле по int 13h лазить по большим хардам, не подумайте чего другого)делается:
                  ; make command: "ml.exe s.asm /AT"
                  .model tiny
                  .386
                  .code
                  org 100h
                  sst:
                  ; Read from absolute sector - <=> function 2 (absolute sector 0 <=> C=0, H=0, S=1)
                  push 0 ; HZ
                  push 0 ; HZ
                  push 0 ; Low 16 bit of absolute sector
                  push 0 ; High 16 bit of absolute sector
                  push ds ; Segment to read from
                  push offset data ; Offset to read from
                  push 1 ; Number of sectors to from
                  push 10h ; HZ
                  mov ah,42h ; Function number
                  mov dl,80h ; HDD C:
                  mov si,sp ; HZ
                  int 13h
                  popa ; ballance stack
                  ; Write to absolute sector - <=> function 3
                  push 0
                  push 0
                  push 131h
                  push 0AE1Fh
                  push ds
                  push offset data
                  push 1
                  push 10h
                  mov ah,43h
                  mov dl,80h
                  mov si,sp
                  ;int 13h ; Commented to prevent disaster :-)
                  popa
                  mov ax,4C00h
                  int 21h
                  data db 1024 dup(0)
                  last db '$'
                  end sst
                    И еще на счет всяктх там int 24h, 25h, 21h - все это, на сколько я помню, интерфейсы к int 13h (то есть в конце концов используют для физ. доступа к диску int 13h), т.к. int 20h - 30h - ДОСОВЫЕ прерывания, а int 13h - биос.
                      2 devilray: You're quite right!!!
                      2 ritina: Посмотрел я сегодня MBR. Есть там 41h/42h int 13h, значит грузиться должен. Там ещё прикол такой, что если этот сервис (42h) не поддерживается, то используется функция 2 (для чтения). А т.к. загрузочный раздел обычно первый, то грузиться должен и такой :)
                      2 devilray: Не знаю, откуда ты (и, кстати, по-моему ещё кто-то говорил) взял 3 сектора (MBR+2), я нашёл только один. У меня хоть винт и < 8Gb, но, думаю, разницы не должно быть.
                      А в общем, всем спасибо и с наступающим!...
                      Но если найдёте ещё - буду очень рад!!!
                        3 сектора - это в Win98 за место одного bootsectora.
                          2 devilray: Всё, нашёл (на диске с FAT32). Только второй сектор почти пустой :)
                            Народ, а может, кто знает, как из-под 9х прочитать сектор, а? Стандартный VxDшный интерфейс винды этого не делает, если кто не знает :-) Зато требует (вроде) чтоб все только им и пользовались. Если кто подскажет, как это обойти, буду очень благодарен.
                              Читай напрямую через порты, команды 20h и 21h (если не путаю)
                              В чем собственно проблема?
                                Sorry, не понял. Наверно, тормоз.
                                Команды 20h 21h чего? Номера портов, досовские команды, или еще что?
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0416 ]   [ 16 queries used ]   [ Generated: 16.04.24, 19:05 GMT ]