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

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


    Прохождения игр    
Roman legionnaire vs Knight Artorias
Ghost-Skeleton in DSR
Expedition SCP-432-4
Expedition SCP-432-3 DATA EXPUNGED

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


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

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

Предыдущая страница Следующая страница
1 ... 186 187 188 189 190 191 192  193 194 195 196 197 198
         ;          AH = состояние символа:
         ;               "L" = нижний регистр
         ;               "U" = верхний регистр
         ;               0 = если символ в регистре AL не являлся
         ;                   буквенным символом в коде ASCII
         ;               Содержимое всех других регистров

                                      - П-35 -
         ;               восстанавливается
         ;
         ; Вызываемые стандартные программы: нет
         ;- - - - - - - - - - - - - - - - - - - - - - - - - - - -
         PUBLIC  CHGCASE   ; библиотечная стандартная программа
         ;
         chgcase PROC      NEAR
                 push      dx    ; сохранение содержимого регистров
         ;
         ; Определить, содержит ли регистр AL буквенный символ в коде
         ; ASCII, и если символ действителен, определить его регистр.
             cmp       al,"A"       ; находится символ под первой
                                    ; буквой верхнего регистра?
             jl        error        ; да, он не является буквенным
                                    ; символом в коде ASCII
             cmp       al,"Z"       ; находится символ под последней
                                    ; буквой верхнего  регистра?
             jle       is_upper     ; да, символ соответствует
                                    ; верхнему регистру
             cmp       al,"a"       ; находится символ под первой
                                    ; буквой нижнего регистра?
             jl        error        ; да, он не является буквенным
                                    ; символом  в  коде ASCII
             cmp       al,"z"       ; находится символ под последней
                                    ; буквой нижнего регистра?
             jle       is_lower     ; да, символ находится в нижнем
                                    ; регистре
             jmp       short error  ; в противном случае, он не являет-
                                    ; ся буквенным символом в коде ASCII
         ;
         is_upper:
             mov       dl,"U"        ; пометить символ как признак
                                     ; верхнего регистра
             jmp       short convert_type ; и продолжить
         is_lower:
              mov      dl,"L"        ; пометить символ как признак
                                     ; нижнего регистра
              jmp      short convert_type ; и продолжить
         error:
              mov      ah,0   ; пометить символ как не буквенный
                              ; символ  в  коде  ASCII
              jmp      short done  ; и завершить выполнение процедуры
         ;
         convert_type:
              cmp      ah,"l"     ; изменить  на  нижний регистр?
              je       to_lower   ; да, поэтому изменить символ
              cmp      ah,"L"     ; изменить  на  нижний регистр?
              je       to_lower   ; да, поэтому изменить символ
              cmp      ah,"u"     ; изменить  на  верхний регистр?
              je       to_upper   ; да, поэтому изменить символ
              cmp      ah,"U"     ; изменить  на  верхний регистр?
              je       to_upper   ; да, поэтому изменить символ
         ;
         ;    В противном случае, изменить регистр клавиатуры
         ;    на противоположный
            cmp      dl,"L"      ; это символ нижнего регистра?
            je       to_upper    ; да, изменить его на верхний регистр

                                      - П-36 -
                            ; в противном случае, это верхний  регистр,
                            ; поэтому сделать его нижним
         ;
         to_lower:
             mov      ah,"L"     ; установить признак регистра для
                                 ; возврата
             cmp      dl,ah      ; символ уже соответствует нижнему
                                 ; регистру?
             je       done       ; да, действие выполнено
             add      al,20h     ; в противном случае, изменить на
                                 ; нижний регистр
             jmp      short done ; и выйти из процедуры
         ;
         to_upper:
             mov      ah,"U"   ; установить признак регистра для возврата
             cmp      dl,ah    ; символ уже соответствует верхнему
                               ; регистру ?
             je       done     ; да, действие выполнено
             sub      al,20h   ; в противном случае, изменить на
                               ; верхний  регистр
         ;
         done:
                  pop      dx  ; восстановить содержимое регистров
                  ret
         ;
         chgcase  ENDP
         ;
         ;
         ;+++++++++++++++++++++++++++++++++++++++++++++++++++++
         ; DOSVER -  Получает версию операционной системы MS-DOS
         ; и  возвращает старшую и младшую версии. Возвращает значе-
         ; ние "1.00", если текущая версия DOS 1.00 или 1.10.
         ;
         ; Вход :   нет
         ;
         ; Выход :  AL = старшая версия
         ;          AH = младшая версия ( =  00,  если  перед этим
         ;               была  версия 2.00 DOS)
         ;       (Содержимое всех других регистров восстанавливается)
         ;
         ; Вызываемые стандартные программы: нет
         ;- - - - - - - - - - - - - - - - - - - - - - - - - - - -
         PUBLIC  DOSVER       ; библиотечная стандартная программа
         ;
         dosver    PROC    NEAR
                   push    bx      ; сохранить содержимое регистров
                   push    cx
                   push    dx
         ;
                   xor     ax,ax             ; очистить регистр AX
                   mov     ah,30h    ; загрузить функцию "получить
                                     ; версию DOS"
                   @DosCall
                   cmp     al,0      ; это версия предыдущая 2.00?
                   jg      dos2plus  ; нет, действие сделано
                   mov     al,1    ; в противном случае это версия 1.ХХ
                   mov     ah,0    ; установить младшую версию в "00"

                                      - П-37 -
         ;
         dos2plus:
                   pop     dx      ; восстановить содержимое регистров
                   pop     cx
                   pop     bx
                   ret
         ;
         dosver    ENDP
         ;
         ;
         ;+++++++++++++++++++++++++++++++++++++++++++++++++++++
         ; DOSV2CON: Получает и отображает текущую версию операцион-
         ; ной системы MS-DOS, и возвращает версию  вызывающей  прог-
         ; рамме.
         ;
         ; Вход :   нет
         ;
         ; Выход :  AL = старшая версия
         ;          AH = младшая версия
         ;       (Содержимое всех других регистров восстанавливается)
         ;
         ; Вызываемые стандартные программы:
         ;        DOSVER  (получает версию MS-DOS)
         ;        BIN2CON (отображает номера в десятичном виде)
         ;- - - - - - - - - - - - - - - - - - - - - - - - - - - -
         PUBLIC DOSV2CON    ; библиотечная стандартная  программа
         ;
         dosv2con   proc   NEAR
         ;                                    ;
         ;EXTRN  dosver: NEAR    ; получить  версию MS-DOS
         ;EXTRN  bin2dec: NEAR   ; отображает номера в десятичном виде
         ;
                push   bx      ; сохранить  содержимое  регистров
                push   cx      ;
                push   dx      ;
         ;
                call   dosver  ; получить  версию MS-DOS
                push   ax      ; сохранить возвращенную версию
                push   ax      ; и сохранить ее снова
                xor    ah,ah   ; записать номер старшей версии в
                               ; регистр AL
                mov    ch,1    ; отобразить по крайней мере 1 разряд
                call   bin2dec ; вывести  на  печать число
                @DisChr '-'    ; символ-разделитель
                pop    ax      ; восстановить номер младшей версии
                cmp    al,1    ; это версия 1.ХХ?
                je     ver1xx  ; да, отобразить "ХХ" как младшую версию
                xchg   ah,al   ; в противном случае поместить номер
                               ; младшей версии в регистр AL
                xor    ah,ah   ; очистить верхние
                mov    ch,2    ; отобразить, по крайней мере, 2 разряда
                call   bin2dec ; вывести число
                jmp    short end_ver      ; конец
         ;
         ver1xx:
                    @DisChr 'X'   ; вывести "Х"
                    @DisChr 'X'   ; и опять

                                      - П-38 -
         ;
         end_ver:
                    pop      ax   ; восстановить  номер версии для воз-
                                  ; врата основной стандартной программе
                    pop      dx   ; восстановить остальные регистры
                    pop      cx
                    pop      bx
                    ret
         ;
         dosv2con   ENDP           ; конец  стандартной  программы
         ;
         ;
         ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++
         ; MEMALLOC - Распределяет  блок памяти указанного размера
         ; в параграфах (16 байт).
         ;
         ; Вход :  BX = размер запрашиваемого блока в 16-байтных
         ;              параграфах
         ;
         ; Выход : Признак  переноса  = 0, если УСПЕХ, причем
         ;                 AX = адрес сегмента распределенного
         ;                      блока памяти
         ;                 (Содержимое  регистра BX восстанавливается)
         ;         Признак переноса = 1, если ОТКАЗ,  причем
         ;                 AX = код ошибки,
         ;                      7 = разрушенные блоки управления памятью
         ;                      8 = недостаточная память
         ;                 BX  = наибольший доступный блок памяти в
         ;                       параграфах
         ;
         ; Вызываемые стандартные программы: нет
         ;- -  - - - - - - - - - - - - - - - - - - - - - - - - - -
         PUBLIC MEMALLOC   ; библиотечная стандартная  программа
         ;
         memalloc  PROC      NEAR
                   push      bp        ; сохранить указатель базы
                   push      bx        ; сохранить содержимое регистра BX
                   mov       bp,sp     ; инициализировать указатель базы
         ;
                   xor       al,al     ; очистить регистр AL
                   mov       ah,48h    ; загрузить функцию распределения
                                       ; памяти
                   @DosCall            ; выполнить распределение памяти
                   jnc       end_memalloc     ; завершить выполнение,
                                       ; если нет ошибки с адресом
                                       ; сегмента в регистре AX
                                    ; в  противном случае, завершить
                                    ; выполнение с установкой признака
                                    ;  переноса
                   mov       word ptr [bp],bx ; максимальным размером
                                       ; блока  (в  регистре BX)
                                       ; и кодом ошибки в регистре AX
         ;
         end_memalloc:
                   pop       bx       ; восстановить регистр BX
                   pop       bp       ; восстановить указатель базы
                   ret

                                      - П-39 -
         ;
         memalloc ENDP
         ;
         ;
         ;+++++++++++++++++++++++++++++++++++++++++++++++++++++
         ; MEMSIZE:  Изменяет размер блока памяти,  ранее  распреде-
         ; ленной  с помощью стандартной программы MEMALLOC. Указыва-
         ; ются адрес блока и запрашиваемый размер (в 16-байтных  па-
Предыдущая страница Следующая страница
1 ... 186 187 188 189 190 191 192  193 194 195 196 197 198
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 

Реклама