Главная · Поиск книг · Поступления книг · 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 ... 149 150 151 152 153 154 155  156 157 158 159 160 161 162 ... 198
                     mov   bx,word ptr es:[di].SectorBytes  ; получить
                                         ; количество байтов в секторе
                     mul   bx                      ; и умножить на него
                     mov   word ptr TotalBytes,ax  ; и сохранить резуль-
                                          ; тат, состоящий из двух слов
                     mov   word ptr TotalBytes.2,dx ; из AX и DX
         ;
         ; Получить общее количество секторов данных (в которых могут
         ; сохраняться файлы)
                     mov   ax,word ptr es:[di].TotalSectors ; получить
                                           ; общее количество секторов
         xor   dx,dx                                    ; очистить  DX
                    sub   ax,word ptr es:[di].ReservedSec ; вычесть
                                           ; зарезервированные секторы
                    sub   ax,word ptr TotalFATSec  ; вычесть общее
                                     ; количество секторов таблицы FAT
                                             ; (все копии таблицы FAT)
                sub   ax,word ptr DirSectors    ; вычесть  секторы
                                                ; корневого каталога
                mov   word    ptr DataSectors,ax ; и сохранить результат
         ;
         ; Получить количество байтов в кластере

                                     - 11-21 -
                 xor   ah,ah                           ; очистить AH
                 mov   al,byte ptr es:[di].ClusterSec  ; получить секторы
                                                       ; кластера
                 xor   dx,dx                           ; очистить DX
                 mov   bx,word ptr es:[di].SectorBytes ; получить байты
                                                       ; сектора
                 mul   bx                      ; и умножить на это число
                 mov   word ptr ClusterBytes,ax  ; и сохранить результат
         ;
         ; Получить общее количество секторов
                 mov   ax,word ptr DataSectors ; получить секторы данных
                 xor   bh,bh                      ; очистить BH
                 mov   bl,byte ptr es:[di].ClusterSec ; получить секторы
                                                      ; кластера
                 xor   dx,dx                     ; очистить DX
                 div   bx             ; разделить на количество секторов
                 mov   word ptr TotalClusters,aх ; и сохранить результат
                                                 ; в слове
         ;
         ; Получить количество битов в элементе таблицы FAT.
         ; Всегда 12 битов, если общее количество кластеров = 4,085 или
         ; меньше.
         ; Всегда 16 битов, если общее количество кластеров больше
         ; 4,085.
                 cmp   word ptr TotalClusters,4085       ; общее коли-
                                       ; чество кластеров больше 4085?
                 jle   got_entry_size  ; нет используйте 12-битовое
                                       ; значение по умолчанию
                 mov   al,16           ; иначе - 16-битовое значение
                 mov   byte ptr FATentryBits,al ; и сохранить значение
         got_entry_size:
         ;
         ; Получить общее количество байтов данных (используемых байтов)
                 mov   ax,word ptr DataSectors   ; получить общее коли-
                                                 ; чество секторов
                 xor   dx,dx,                    ; очистить DX
                 mov   bx,word ptr es:[di].SectorBytes ; получить байты
                                                 ; сектора
                 mul   bx                     ; и умножить на это число
                 mov   word ptr DataBytes,ax  ; и  сохранить результат
                                              ; в 2 словах
                 mov   word ptr DataBytes,2,dx   ; из AX и DX
         ;
         ; Вычислить регистр  диска  в  килобайтах или мегабайтах
                 mov   ax,word ptr TotalBytes    ; получить общее коли-
                                               ; чество байтов на диске
                 mov   dx,word ptr TotalBytes.2  ; ... (двойное слово)
                 mov   cx,1024                   ; установить делитель
                 div   cx           ; и получить значение в килобайтах
                 mov   word ptr KBytes,ax        ; сохранить значение
                 cmp   ax,1000              ; вычислить в Мегабайтах?
                 jl    dis_info             ; нет,  мы  закончили
                 mov   bx,1000              ; иначе установить делитель
                 xor   dx,dx                ; очистить регистр DX
                 div   bx                   ; и получить мегабайты
                 mov   word ptr Mbytes,ax   ; сохранить главное значение
                 mov   word ptr Mbytes2,dx  ; и сохранить часть, если

                                      - 11-22 -
                                            ; таковая имеется
                 cmp   dx,0                 ; есть ли часть?
                 je    megabytes_end        ; нет,  мы  закончили
                 mov   ax,dx                ; иначе установить делимое
                 mov   bx,10                ; установить  делитель
                 xor   dx,dx                ; очистить регистр DX
         ;
         ; Цикл удаления хвостовых нулей
         compress_loop:
                     div   bx               ; разделить регистр AX на 10
                     cmp   dx,0                ; есть ли остаток?
                     jne   megabytes_end       ; да, мы закончили
                     mov   word ptr Mbytes2,ax ; иначе сохранить новое
                                               ; сжатое значение
                     jmp   short compress_loop ; и снова  повторить
         megabytes_end:
         ;
         ;- - - - - - - - - - - - - - - - - - - - - - - - - - - -
         ; Отобразить на экране дисплея информацию о диске
         ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
         dis_info:
                   @DisStr Start2_Msg ; отобразить на экране дисплея
                               ; первую часть сообщения о  дисководе
                   xor   ah,ah                 ; очистить регистр AH
                   mov   al,byte ptr DiskDrive ; и вывести на экран
                                               ; имя дисковода
                   inc   al         ; дать ему используемый номер
                   add   al,40h     ; преобразовать его  в  буквы
         ;                          ; ... ASCII верхнего регистра
                   @DisChr al       ; и вывести его на экран
                   @DisChr ':'      ; после него поставить двоеточие
                   @Newline
         ;
                   @DisStr OEM_Msg ; вывести на экран сообщение OЕМ
                                   ; (о фирме-производителя и версии)
                   push  di                     ; сохранить DI
                   mov   di,bootrecord.OEMstring ; указать строку ОЕМ
                   mov   cx,8          ; установить счетчик  символов
         more_char:                       ; ввести дисплейный цикл
                   mov   al,byte ptr es:[di]    ; получить символ
                   @DisChr al   ; отобразить символ на экране дисплея
                   inc   di            ; указать на следующий символ
                   dec   cx            ; счетчик десятичных символов
                   cmp   cx,0          ; все сделаны ?
                   jg    more_char     ; нет, вывести следующий символ
                   @NewLine            ; иначе, мы закончили
                   pop   di                     ; восстановить DI
         ;
                   @DisStr  MeliaDescrip_Msg  ; отобразить на экране
                                              ; описатель  носителя
                   xor   ah,ah,               ; очистить регистр AH
                   mov   al,byte ptr es:[di].MediaDecrip ; считать
                                              ; байтовое значение
                   @DisNum ax,16,2            ; отобразить две шест-
                                              ; надцатиричные цифры
                   cmp   byte ptr es:[di].MediaDescrip,0F8h ;жесткий диск?
                   je fixed_disk   ; да, отобразить на экране сообщение

                                      - 11-23 -

                   @DisStr RemovableMedia_Msg ; иначе - сменный диск
                   jmp   short media_size     ; и теперь сделать размер
                                              ; в Kb/Mb
         fixed_disk:
                      @DisStr FixedMedia_Msg     ; отобразить на экране
                                         ; сообщение о жестком носителе
         media_size:
                      cmp   word ptr Mbytes,0  ; показывать в Мегабайтах
                      je    show_kilobytes     ; нет, в Килобайтах
                      mov   ax,word ptr Mbytes ; да, задать в Мегабайтах
                      @DisNum ax,10,1,0        ; вывод десятичного числа
                                               ; без знака
                      cmp   word ptr Mbytes2,0


         ; есть ли часть?
                      je    done_mbytes        ; нет, мы закончили
                      @DisChr '.'              ; иначе, вывести на
                                               ; экран десятичную точку
                      mov   ax,word ptr Mbytes2 ; задать часть в Мбайтах
                      @DisNum  ax,10,1,0       ; вывод десятичного числа
                                               ; без знака
         done_mbytes:
                      @DisChr 'M'                ; вывести на экран сим-
                                                 ; вол "М"  (Мегабайт)
                      jmp   short done_media     ; и мы закончили
         show_Kilobytes:
                      mov  ax,word  ptr Kbytes   ; получить значение в
                                                 ; Килобайтах
                      @DisNum ax,10,1,0          ; вывод десятичного
                                                 ; числа без знака
                      @DisChr 'K' ; вывести на экран символ "К" (Кбайт)

         done_media:
                      @DisStr Media_Msg        ; вывести на экран конец
                                               ; сообщения
                      @NewLine
         ;
                      @DisStr Cylinders_Msg     ; отобразить на экране
                           ; дисплея общее количество цилиндров (треков)
                      cmp   word ptr Cylinders,0   ; была ли ошибка?
                      jne   show_cyl        ; нет, отобразить на экране
                                   ; дисплея общее количество цилиндров
                      @DisChr '?'  ; иначе, вывести на экран символ
                                   ; "знак вопроса"
                      jmp   short end_cyl         ; и закончить
         show_cyl:
                      mov   ax,word ptr Cylinders ; получить значение
                      @DisNum ax,10,1,0           ; и отобразить его на
                                                  ; экране дисплея
         end_cyl:
                @NewLine
         ;
                @DisStr Heads_Msg         ; отобразить на экране
                                          ; количество головок
                mov   ax,word ptr es:[id].Heads ; получить значение слова

                                      - 11-24 -
                @DisNum ax,10,1,0    ; вывод десятичного числа без знака
                @NewLine
         ;
                @DisStr TrackSectors_Msg   ; отобразить на экране
                            ; дисплея количество секторов в треке
Предыдущая страница Следующая страница
1 ... 149 150 151 152 153 154 155  156 157 158 159 160 161 162 ... 198
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 

Реклама