Главная · Поиск книг · Поступления книг · 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 ... 147 148 149 150 151 152 153  154 155 156 157 158 159 160 ... 198
         ;
         ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
         ; Получить номер/имя дисковода
         ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                  mov   di,80h                  ; командная строка
                  cmp   byte ptr es:[di],0      ; есть ли параметры?
                  je    get_default_drive       ; нет, получить дисковод

                                     - 11-14 -
                                                ; по умолчанию
                  cmp   byte ptr es:[di+3],':'  ; присутствует ли двое-
                                                ; точие?
                  jne   get_default_drive       ; нет, получить дисковод
                                                ; по умолчанию
         get_disk_drive:                        ; получить дисковод в
                                                ; командной строке
                  xor   ah,ah                   ; очистить AH
                  mov   al,byte ptr es:[di+2]   ; получить заданный
                                                ; дисковод
                  cmp   al,">"                  ; использовалась ли
                                                ; переадресовка?
                  je    get_default_drive       ; да, получить дисковод
                                                ; по умолчанию
                  cmp   al,61h                  ; дисковод задан буквами
                                                ; верхнего регистра?
                  jge   convert_upper           ; да, выполнить преобра-
                                                ; зование из символов
                                                ; ASCII верхнего регистра
                  sub   al,40h                  ; иначе  выполнить  из
                                                ; символов ASCII  нижнего
                                                ; регистра
                  jmp   short test_drive        ; и продолжить
         convert_upper:
                  sub   al,60h                  ; преобразование символов
                                                ; ASCII верхнего регистра
         test_drive:
                  cmp   al,1                    ; число меньше единицы?
                  jl    bad_drive               ; да, выйти на сообщение
                                                ; об ошибке
                  dec   al                      ; иначе выполнить А:=0,
                                                ; ...... В: = 1  и т.д.
                  cmp   al,25                   ; результат предыдущeй
                                                ; команды > 25 (>Z:)?
                  jg    bad_drive               ; да, выйти на сообщение
                                                ; об ошибке
                  jmp   short drive_used        ; иначе  сохранить
                                                ; указанный дисковод
         get_default_drive:
                  mov   ah,19h                  ; получить дисковод
                                                ; по умолчанию
                  @DosCall
         drive_used:
                  mov   byte ptr DiskDrive,al   ; сохранить дисковод
                  jmp   short drive_end         ; и продолжить
         bad_drive:
                  @DisStr BadDrive_Msg          ; иначе вывести на экран
                                                ; сообщение об ошибке
                                                ;(синтаксической ошибке)
                  jmp   terminate               ; и выйти в DOS
         drive_end:
         ;
         ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
         ; Cчитывание в память информации сектора начальной загрузки.
         ; После возвращения ES:DI(ES:0) указывает на  блок  памяти,
         ; содержащий  запись  начальной загрузки.
         ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

                                      - 11-15 -
         .DATA
         BootSeg   dw    ?                      ; сохранение адреса
                                                ; сегмента блока памя-
                                                ; ти содержащего копию
                                                ; записи начальной
                                                ; загрузки
         .CODE
                   mov   bx,40h                 ; распределить 1024 байта
                   call  memalloc               ; распределить  блок
                   jnc   read_boot              ; продолжить, если не
                                                ; было ошибок
                   call  mem_err_handler        ; иначе обработать ошибку
                   jmp   terminate              ; и выйти в DOS
                                                ;
         ;                                      ;
         read_boot:
                   mov   word ptr BootSeg,ax    ; сохранить адрес сег-
                                                ; мента
                   push  ax                     ; и  сохранить  его
                   mov   al,byte ptr DiskDrive  ; получить  дисковод
                                                ; для считывания
                   xor   ah,ah                  ; очистить AH
                   pop   ds                     ; получить адрес сег-
                                                ; мента нового блока
                   mov   dx,0                   ; считать логический
                                                ; сектор 0
                   mov   cx,1                   ; считать в один сектор
                   mov   bx,0                   ; поместить данные в DS:0
                   jnt   25h                    ; считать диск
                   jc    read_boot_error        ; выйти, если произошла
                                                ; ошибка
                   popf                         ; очистить флаги, про-
                                                ; толкнутые в стек во
                                                ; время прерывания
                                                ; "int 25h"
                   mov   ds,DSsave              ; повторная инициали-
                                                ; зация области DS
                   mov   ax,word ptr BootSeg    ; получить адрес сегмен-
                                                ; та начальной загрузки
                   mov   es,ax                  ; и инициализировать в
                                                ; него ES
                   xor   di,di                  ; со смещением 0
                   jmp   end_read_boot           ; и продолжить
         ;
         read_boot_error:
                   popf                         ; очистить флаги, про-
                                                ; толкнутые в стек во
                                                ; время прерывания
                                                ; "int 25h"
                   mov   ds,DSsave              ; повторная инициали-
                                                ; зация области DS
                   @DisStr ReadError_Msg       ; выйти с выдачей
                   jmp   terminate              ; сообщения об ошибке
         ;
         end_read_boot:
         ;

                                     - 11-16 -
         ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
         ;     Проверить,  чтобы  считанная  запись начальной загрузки
         ; содержала  нужную  нам  информацию.  Если  диском  является
         ; 160-Кбайтный или 320-Кбайтный гибкий диск, запись начальной
         ; загрузки  будет  содержать  нужную нам информацию блока ВРВ
         ; (это может оказаться правильным также для некоторых нестан-
         ; дартных форматов дисков , в случае чего таблица FAT  должна
         ; считываться  с  целью  получения  байта идентификатора (ID)
         ; формата. Этот байт требуется для определения формата  диска
         ; (является  ли  диск  160-Кбайтным  для -версии операционной
         ; системы DOS 1.0 или; 360-Кбайтным для  версии  операционной
         ; системы DOS 1.1.
         ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
         ;

                   mov    bx,20h              ; распределить 512 бай-
                                              ; ... тов (32 параграфа)
                   call   memalloc            ; распределить блок памяти
                   jnc    read_fat            ; продолжить,  если ошибок
                                              ; не было
                   call   mem_er_handler      ; иначе перейти на про-
                                              ; грамму обработки ошибок
                   jmp    terminate           ; и выйти в DOS
         ;
         read_fat:
         .DATA
         FATSeg    dw     ?                     ; адрес  сегмента  из
                                                ; таблицы  FAT
         .CODE
                   mov    word ptr FATseg,ax    ; сохранить адрес сег-
                                                ; мента FAT
                   push   ax                    ; и сохранить его
                   mov    al,byte ptr DiskDrive ; получить дисковод для
                                                ; считывания
                   xor    ah,ah                 ; очистить  AH
                   pop    ds                    ; получить адрес сег-
                                                ; мента нового блока
                   mov    dx,1                  ; очистить логический
                                                ; сектор 1
                   mov    cx,1                  ; считать в один сектор
                   mov    bx,0                  ; сохранить данные в DS:0
                   jnt    25h                   ; читать диск
                   jnc    process_FAT           ; продолжить, если ошибок
                                                ; не было
                   popf                         ; иначе, сбросить флаги
                   mov    ds,DSsave             ; повторная инициализа-
                                                ; ция области DS
                   @DisStr ReadError_Msg        ; выйти с сообщением об
                                                ; ошибке
                   mov    ax,word ptr FATSeg    ; получить адрес сегмента
                                                ; начальной  загрузки
                   call   memfree               ; освободить блок
                   jnc    end_fat_err           ; выйти, если не было
                                                ; ошибок
                   call   mem_err_handler       ; иначе, вывести на
                                                ; экран дисплея сообще-
                                                ; ние об  ошибке

                                     - 11-17 -
         end_fat_err:
                   jmp    terminate             ; выйти в DOS
         ;
         process_FAT:
                   popf                         ; очистить флаги, про-
                                                ; толкнутые в стек во
                                                ; время прерывания
                                                ; "int 25h"
                   mov    ds,DSsave             ; повторная инициализа-
                                                ; ция области DS
                   mov    ax,word ptr FATSeg    ; получить адрес сегмента
                                                ; начальной  загрузки
                   mov    es,ax                 ; и инициализировать ES
                   xor    di,di                 ; в него со смещением 0
         .DATA
Предыдущая страница Следующая страница
1 ... 147 148 149 150 151 152 153  154 155 156 157 158 159 160 ... 198
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 

Реклама