Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Demon's Souls |#13| Storm King
Demon's Souls |#11| Мaneater part 2
Demon's Souls |#10| Мaneater (part 1)
Demon's Souls |#9| Heart of surprises

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Различные авторы Весь текст 2311.07 Kb

Программирование и кодирование

Предыдущая страница Следующая страница
1 ... 148 149 150 151 152 153 154  155 156 157 158 159 160 161 ... 198
         FAT_ID    db     ?                     ; байт идентификации
                                                ; (ID) из таблицы FAT
         .CODE

                   mov    al,byte ptr es:[di]   ; получить элемент О
                                                ; таблицы FAT
                   mov    byte ptr FAT_ID,at    ; и сохранить его как байт
                   call   memfree               ; освободить сегмент
                                                ; таблицы FAT
                                                ; (адрес находится в ES)
                   jnc    comp_byte_id          ; продолжить, если не
                                                ; было ошибок
                   call   mem_err_handler       ; иначе вывести на экран
                                                ; сообщение  об ошибке
                   jmp    terminate             ; выход в операционную
         ;                                      ; систему DOS
         comp_byte_id:
                   mov    ax,word ptr BootSeg   ; указать на сегмент
                                                ; начальной загрузки
                   mov    es,ax                 ; ES:0 указать на
                   xor    di,di                 ; запись  начальной
                                                ; загрузки
                   mov    al,byte ptr FAT_ID    ; получить идентифика-
                                                ; тор (ID) таблицы FAT
                   cmp    al,byte ptr es:[di].MediaDescrip ; и сравнить
                                                ; с битом ID
                                                ; в записи  начальной
                                                ; загрузки
                   jne    chk_dos1_fmt          ; если иначе, то решить
                   jmp    end_read_fat          ; иначе, продолжить
         chk_dos1_fmt:
                   cmp    al,0FEh               ; это  160-Кбайтный
                                                ; гибкий диск?
                   je     init_dos1_fmt         ; да, инициализировать
                                                ; запись начальной
                                                ; загрузки
                   cmp    al,0FFh               ; иначе, это 320-Кбайт-
                                                ; ный  гибкий  диск?
                   je     init_dos1_fmt         ; да, инициализировать
                                                ; запись начальной
                                                ; загрузки

                                     - 11-18 -
         .DATA
         UnknownMedia db "Невозможно определить формат диска."
                      db  "Возможно, это диск не "
                      db  "операционной системы MS-DOS.",CR,LF,"$"
         .CODE
                   @DisStr UnknownMedia        ; вывести на экран
                                               ; сообщение об ошибке
                   jmp     terminate           ; выход в операционную
                                               ; систему DOS
         init_dos1_fmt:
                ; Инициализировать элементы  формата, которые одинаковы
                ; для 160-Кбайтных и 320-Кбайтных форматов дисков:
                   mov     word ptr es:[di+3],"D"   ; передать по буквам
                                                    ; "DOS  1.X"
                   mov     word ptr es:[di+4],"O"   ; в поле ОЕМ и
                   mov     word ptr es:[di+5],"S"   ; версии DOS записи
                   mov     word ptr es:[di+6]," "   ; начальной загрузки
                   mov     word ptr es:[di+7],"1"
                   mov     word ptr es:[di+8],"."
                   mov     word ptr es:[[b]di].SectorBytes,512 ; коли-
                                              ; чество байтов в секторе
                   mov     word ptr es:[di].ReservedSec,1   ; зарезер-
                                                  ; вированные секторы
                   mov     word ptr es:[di[.FATcopies,2     ; количест-
                                                  ; во копий таблицы FAT
                   mov     word ptr es:[di].FATsectors,1    ; количество
                                                  ; секторов таблицы  FAT
                   mov     word ptr es:[di].TrackSectors,8  ; количество
                                                  ; секторов в треке
                   mov     word ptr es:[di].HiddenSectors,0 ; количество
                                                  ; скрытых секторов
                   cmp     al,0FEh      ; это гибкий 160-Кбайтный диск?
                   je      init_160K    ; да, инициализировать запись
                                        ; начальной загрузки
                   cmp     al,0FFh      ; иначе, это гибкий 320-Кбайтный
                                        ; диск?
                   je      init_320K    ; да, инициализировать запись
                                        ; начальной загрузки
         ;
         init_160K:
                   mov word ptr es:[di.9],"0"          ; это версия
                                                       ; "DOS 1.0"?
                   mov     word ptr es:[di.10],"?"          ;
                   mov     byte ptr es:[di].ClusterSec,1    ; количество
                                                            ; секторов в
                                                            ; кластере
                   mov     word ptr es:[di].DirEntries,64   ; количество
                                                            ; элементов
                                                            ; в каталоге
                   mov     word ptr es:[di].TotalSektors,320 ; общее ко-
                                                             ; личество
                                                             ; секторов
                                                             ; на диске
                   mov     byte ptr es:[di].MediaDescrip,0FEh ; описатель
                                                              ; носителя
                   mov     word ptr es:[di].Heads,1  ; количество головок
                   jmp          end_read_fat

                                     - 11-19 -
         ;
         init_320K:
                   mov     word ptr es:[di.9],"1"      ; это версия
                                                       ; "DOS 1.1"?
                   mov     word ptr es:[di.10],"?"
                   mov     byte ptr es:[di].ClusterSec,2    ; количество
                                                            ; секторов в
                                                            ; кластере
                   mov     word ptr es:[di].DirEntries,112  ; количество
                                                            ; элементов
                                                            ; в каталоге
                   mov     word ptr es:[di].TotalSektors,640 ; общее ко-
                                                             ; личество
                                                             ; секторов
                                                             ; на диске
                   mov     byte ptr es:[di].MediaDescrip,0FFh ; описатель
                                                              ; носителя
                   mov     word ptr es:[di].Heads,2  ; количество головок
                   jmp          end_read_fat
         ;
         end_read_FAT:
         ;
         ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
         ;      Вычислить величины, отсутствующие в  блоке  параметров
         ; BIOS.  Примечание:  ES:DI  (смещение 0) должен указывать на
         ; начало записи начальной загрузки, считанной в  память.  Все
         ; расчетные значения сохраняются в сегменте данных.
         ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
         get_new_values:
                    xor    di,di    ; очистить DI
         ;
         ; Рассчитать общее количество секторов, используемых для всех
         ; копий таблицы  FAT.
                xor    ah,ah                          ; очистить AH
                mov    al,byte ptr es:[di].FATcopies  ; получить копии
                                                      ; таблицы FAT
                xor    dx,dx                          ; очистить DX
                mov  bx,word ptr es:[di].FATsectors   ; получить число
                                                      ; секторов таблицы
                                                      ; FAT
                mul    bx                             ; умножить на
                                                      ; это число
                mov    word ptr TotalFATSec,ax      ; сохранить ре-
                                                    ; зультат в 1 слове
         ;
         ; Рассчитать общее  количество  секторов,  используемых всеми
         ; элементами  каталога
                mov    ax,word ptr es:[di].DirEntries ; получить общее
                                                      ; количество эле-
                                                      ; ментов корневого
                                                      ; каталога

                    mov    bx,word ptr DirEntBytes    ; получить размер
                                                      ; в байтах эле-
                                                      ; ментов каталога
                    xor    dx,dx                      ; очистить  DX
                    mul    bx                         ; умножить

                                     - 11-20 -
                    mov    bx,word ptr                ;
         es:[di].SectorBytes     ; получить количество байтов в секторе
                    xor    dx,dx                      ; очистить  DX
                    div    bx                         ; разделить
                    mov    word ptr DirSectors,ax     ; сохранить ре-
                                                      ; зультат в 1 слове
         ;
         ; Вычислить  общее  количество цилиндров
               mov    ax,word ptr es:[di].TotalSectors  ; получить общее
                                                   ; количество секторов
               mov    bx,word ptr es:[di].TrackSectors   ; получить ко-
                                            ; личество секторов в  треке
               xor    dx,dx                          ; очистить  DX
               div    bx                           ; и разделить на него
               mov    bx,word ptr es:[di].Heads ; получить число головок
               xor    dx,dx                        ; очистить  DX
               div    bx                           ; и разделить на него
               cmp    word ptr es:[di].HiddenSectors ; скрытые сектора?
               je     store_cyl                      ; нет, теперь мы
                                     ; имеем общее количество цилиндров
               mov    cx,word ptr es:[di].HiddenSectors ; иначе, скрытые
                                                         ; сектора = 1
               cmp    cx,word ptr es:[di].TrackSectors    ; цилиндр?
               je     add_cyl              ; да
               mov    ax,0                 ; иначе, произошла ошибка
               jmp    short store_cyl      ;
         add_cyk:
                     add   ax,1     ; добавить дополнительный цилиндр
         store_cyl:
                     mov   word ptr Cylinders,ax ; сохранить результат
         ;
         ; Получить  общее количество байтов на всем (100%) диске
                     mov   ax,word ptr es:[di].TotalSectors ; получить
                                           ; общее количество секторов
                     xor   dx,dx                          ; очистить DX
Предыдущая страница Следующая страница
1 ... 148 149 150 151 152 153 154  155 156 157 158 159 160 161 ... 198
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 

Реклама