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

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


    Прохождения игр    
Explanations of the situation why there is no video
StarCraft II: Wings of Liberty |#14| The Moebius Factor
StarCraft II: Wings of Liberty |#13| Breakout
StarCraft II: Wings of Liberty |#12| In Utter Darkness

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


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

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

Предыдущая страница Следующая страница
1 ... 184 185 186 187 188 189 190  191 192 193 194 195 196 197 198
                 pop       cx
                 pop       bx
                 pop       ax
               ENDM   ;; конец макроопределения
         ENDIF  ;; конец выполнения прохода
         ;;
         ;;** @ExiToDos ********* Mакрокоманды общего назначения **
         ;;   Завершить процесс с необязательными установками
         ;;   значений переменной ERRORLEVEL
         IF1     ;; Выполнять только в процессе прохода 1
         @ExiToDOS MACRO errorcode
                 IFB     ;; код ошибки был указан?
                 mov       ax,4C00h ;; нет, загрузить функцию и значение
                                    ;; переменной ERRORLEVEL = "0" в AX
                 ELSE               ;; в противном случае
                 mov       ah,4Ch   ;; загрузить функцию и значение
                 mov       al,errorcode  ;; переменной ERRORLEVEL отдельно
                 ENDIF
                 ;;
                 @DosCall           ;; вызвать MS-DOS
               ENDM   ;; конец макроопределения
         ENDIF  ;; конец выполнения прохода
         ;;
         ;;********************************************************
         ;; Конец макроопределений
         ;;********************************************************
         .LIST      ; восстановить выдачу листингов в нормальном виде
         ;; Kонец файла включения макроопределений

         ----------------------------------------------------------------



              Использование стандартных библиотечных программ

              Если вы  используете  стандартный  набор немодифицированных
         программ во всех Ваших программах,  для Вас может оказаться  по-
         лезным  поместить эти стандартные программы в библиотечный файл,
         который всегда связан с Вашими программами.  Использование этого
         метода упрощает процесс трансляции с ассемблера и редактирования
         связей,  а также уменьшает размер исходных файлов вашей програм-
         мы. Библиотечный файл создается путем трансляции файла, содержа-
         щего Ваши стандартные программы, и последующей обработки .OBJ  -
         файла с помощью LIB - программы,  помещенной на диске с макроас-
         семблером MASM.  В результате обработки LIB-программы получается
         файл, содержащий корректно отформатированную объектную программу
         с расширением .LIB.  Внешние ссылки на эти стандартные программы

                                      - П-27 -
         должны  быть описаны в исходном тексте данной программы, которая
         должна вызывать эти стандартные программы. Эти стандартные прог-
         раммы пишутся в формате:
              EXTRN стандартная программа : расстояние
              где EXTRN - управляющая команда,  которая сообщает макроас-
         семблеру MASM,  что "стандартная подпрограмма"  будет включаться
         во время редактирования связей либо из объектного файла, либо из
         библиотечного файла.
              Параметр "расстояние"  имеет  значение или "близко" (near),
         или "далеко" (far) в зависимости от того, как была описана стан-
         дартная программа,  на которую осуществляется ссылка.  Для прог-
         рамм с расширением типа .COM параметр и расстояние  всегда имеют
         значение "близко".
              После того как внешние стандартные  программы  описаны,  их
         можно вызывать также,  как и любые другие стандартные программы.
              В листинге A-8 представлен полный исходный текст библиотеч-
         ного  файла  STDLIB.LIB,  о  котором рассказывалось в предыдущих
         главах.


                  Листинг A-8. Исходный текст библиотечного файла
                                    STDLIB.LIB
         ----------------------------------------------------------------
         PAGE 60,132
         TITLE   stdlib.asm/.ob Ўlib
         .8086       ; позволяет только команды процессоров 8086/8088
         .SALL       ; запретить распечатку макрорасширений
         ;- -  - - - - - - - - - - - - - - - - - - - - - - - - - -
         ;
         ;- - - - - - Равенства и макроопределения - - - - - - - -
         ;
         INCLUDE stdmac.inc ; включить стандартные макробиблиотеки
                            ; и равенства
         ;
         ;- - - - - - - - - - - Инициализация - - - - - - - - - -
         ;
         ; Инициализация, описанная ниже, представляет собой подм-
         ; ножество (и совместимое) с управляющей командой ".МОDEL
         ; SMALL" макроассемблера MASM версии 5.0 и выше.
         ;
         _TEXT   SEGMENT WORD PUBLIC 'CODE'   ; сегмент программы
         _TEXT   ENDS
         ;
         _DATA   SEGMENT WORD PUBLIC 'DATA'   ; сегмент данных
         _DATA   ENDS
         ;
         DGROUP  GROUP   _DATA       ; определить группу сегментов
         ;
         ASSUME  cs:_TEXT,ds:_DATA   ; назначить  физические сегменты
         ;
         ;
         ;********************************************************
         ; Начало библиотечных стандартных программ
         ;********************************************************
         ;
         _TEXT   SEGMENT            ; начало сегмента текста программы
         ;

                                      - П-28 -
         ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
         ; Новая строка : отображает новую строку (возврат каретки +
         ;                + перевод строки)
         ;
         ; Вход : нет
         ;
         ; Выход :  AX и DX восстанавливаются;
         ;          другие регистры не используются.
         ;
         ; Bызываемых стандартных программ: нет
         ;- - - - - - - - - - - - - - - - - - - - - - - - - -  - -
         PUBLIC NEWLINE          ; библиотечная  стандартная  программа
         ;
         newline PROC    NEAR
                 push    ax           ; сохранить содержимое регистров
                 push    dx
         ;
                 mov     dl,CR         ; отобразить возврат каретки
                 mov     ah,02h
                 @DosCall
                 mov     dl,LF         ; отобразить перевод строки
                 mov     ah,02h
                 @DosCall
         ;;
                 pop     dx   ; восстановить содержимое регистров
                 pop     ax
                 ret
         ;
         newline ENDP
         ;
         ;
         ;++++++++++++++++++++++++++++++++++++++++++++++++++++++
         ;   CSAVE :  Выполняет автоматическое сохранение и
         ;   восстановление  содержимого  регистров : BX, CX, DI и
         ;   SI внутри вызываемой стандартной программы. Она вызы-
         ;   вается из  другой  вызываемой  стандартной  программы
         ;   следующим образом :
         ;
         ;- - - - - - - - - - - - - - - - - - - - - - - - - - - -
         ; LOCALIZE       EQU   10h
         ; routine PROC   NEAR  ; FAR, если средняя, большая
         ;                      ; или очень большая модель
         ;
         ;      push      bp
         ;      mov       bp,sp
         ;      sub       sp,LOCALIZE
         ;      call      csave
         ;      :
         ;      (текст стандартной программы)
         ;      :
         ;      ret          ; всегда направляется в $cret
         ;
         ; routine ENDP
         ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
         ;
         ; Вход : смотри описание выше
         ;

                                      - П-29 -
         ; Выход : смотри описание выше
         ;
         ; Используемые регистры: содержимое регистров BX, CX, DI и
         ;                        SI сохраняется; регистры AX и DX
         ;                        не трогаются.
         ;
         ; Вызываемые стандартные программы: идут обращения к
         ; "вызывающей" стандартной программе до тех пор, пока
         ; по ее команде возврата RET не осуществится возврат в
         ; эту программу, после чего по команде возврата RET
         ; этой программе осуществится возврат в исходную
         ; вызвавшую программу.
         ;
         ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
         PUBLIC   CSAVE       ; библиотечная стандартная программа
         ;
         csave   PROC      NEAR
                 push     bp     ; установить адресацию стека
                 mov      bp,sp
                 xchg     bx,[bp+2] ; сохранить содержимое регистров
                                    ; BX и получить адрес возврата
                                    ; вызвавшей стандартной программы
                  pop       bp  ; восстановить текущий адрес возврата
                  push      cx  ; сохранить содержимое остальных
                                ; регистров
                  push      si
                  push      di
                  call      bx     ; продолжить обработку в
                                   ; вызвавшей стандартной программе
         ;
         ; Перейти  сюда по команде возврата RET вызвавшей
         ; стандартной программы
         $cret:   pop       di       ; восстановить сохраненное
                                     ; содержимое регистров
                  pop       si
                  pop       sx
                  pop       bx
                  mov       sp,bp    ; cбросить локальные переменные
                  pop       bp
                  ret                ; aвозвращает в то место, куда
                                   ; обычно идет возврат по команде
                               ; возврата RET в вызывающую программу
         ;
         csave    ENDP
         ;
         ;
         ;++++++++++++++++++++++++++++++++++++++++++++++++++++
         ; BIN2DEC -   Преобразование из двоичной в десятичную сис-
         ; тему  счисления. Отображает на экране дисплея в десятич-
         ; ном виде шестнадцатиразрядное число со  знаком  или  без
         ; знака. Находит самый последний разряд справа путем деле-
         ; ния.  Повторяет  до  тех пор, пока все не будет найдено.
         ; Может быть указано минимальное количество разрядов, под-
         ; лежащих отображению. Если минимальное количество указан-
         ; ных разрядов больше  фактического  количества  разрядов,
         ; результирующее число дополняется начальными нулями.
         ;

                                      - П-30 -
         ; Вход :   AX = число, подлежащее отображению
         ;          CH = минимальное число разрядов, подлежащих
         ;                отображению
         ;          DX = 0, если число, подлежащее обработке, не
         ;                  имеет знака или = 1, если число, под-
         ;                  лежащее обработке, имеет знак
         ;
         ; Выход : (регистры AX, CХ и DX восстанавливаются)
         ;
         ; Вызываемые стандартные программы: нет
         ;- - - - - - - - - - - - - - - - - - - - - - - - - - - -
         PUBLIC   BIN2DEC      ; библиотечная стандартная программа
         ;
         bin2dec  PROC    NEAR
           push    ax              ; сохранить содержимое регистров
           push    bx
           push    cx
           push    dx
           mov     cl,0            ; очистить счетчик разрядов
           mov     bx,10           ; установить делитель = 10
           cmp     dx,0            ; всегда  отображать номер, как
                                   ; положительное число?
           je      more_dec        ; да, игнорировать проверку на
                                   ; отрицательное число
         ;
         ; Проверить на  отрицательное число. Если число
         ; отрицательное, сделать его положительным.
            or       ax,ax       ; число положительное ?
            jnl     more_dec     ; да, игнорировать "отрицательное"
            neg     ax           ; сделать число положительным
            @DisChr '-'          ; отобразить знак "минус"
Предыдущая страница Следующая страница
1 ... 184 185 186 187 188 189 190  191 192 193 194 195 196 197 198
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 

Реклама