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

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


    Прохождения игр    
Demon's Souls |#10| Мaneater (part 1)
Demon's Souls |#9| Heart of surprises
Demon's Souls |#8| Maiden Astraea
Demon's Souls |#7| Dirty Colossus

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


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

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

Предыдущая страница Следующая страница
1 ... 180 181 182 183 184 185 186  187 188 189 190 191 192 193 ... 198
         файл Вашей программы,  или могут постоянно размещаться в отдель-
         ном  файле,  который "включается" в Ваш исходный файл в процессе
         трансляции с языка ассемблера (путем встраивания управляющей ко-
         манды INCLUDE макроассемблера MASM в исходный файл).


                        Листинг A-5. Шаблон .EXE-программы
         ----------------------------------------------------------------
            PAGE    60,132             ; широкая печать
          ;- - - - - - - - - - - - - - - - - - - - - - - - - - - -
            FALSE   EQU     0          ; сравнить с логическим значением
                                       ; FALSE ("ложь")
            TRUE    EQU     0FFFFH     ; сравнить и проверить по маске
                                       ; логическоe значениe TRUE
                                       ; ("истина")
            ;
            ;    <Установление равенств и макрокоманд>
            ;
            ;- - - - Инициализация - - - - - - - - - - - -
            _TEXT   SEGMENT WORD PUBLIC 'CODE' ;сегмент текста программы
            _TEXT   ENDS
            _DATA   SEGMENT WORD PUBLIC 'DATA' ; сегмент данных
            _DATA   ENDS
            _STACK  SEGMENT PARA STACK 'STACK'  ; сегмент стека
            _STACK  ENDS
            ;
            DGROUP  GROUP   _DATA, STACK
            ;
                    ASSUME cs:_TEXT,ds:DGROUP,ss:DGROUP,es:DGROUP
            ;
            _TEXT   SEGMENT     ; начало сегмента текста программы
            ; Локальная память данных (хранит  эти  описания  в

                                      - П-10 -
            ; сегменте текста программы)
            DSdsave            dw   seg DGROUP  ; память для DS-регистра
            ;
            _TEXT   ENDS
            _DATA   SEGMENT
            PSPseg           dw   ?              ; сегмент PSP
            _DATA   ENDS

         _TEXT   SEGMENT
         ;
         main    PROC     NEAR          ; начинайте процесс "main"
                 mov      ds,DSsave  ; инициализируйте память данных DS
                 mov      ax,es               ; получите адрес сегмента
                 mov      word ptr PSPseg,ax  ; PSP и сохраните его
         ;
         ;
         ;       < Основная стандартная программа >
         ;
         ;
                 mov      ax,4C00h           ; завершите  программу
                 int      21h
         ;
         main    ENDP
         ;
         ;- - - - - - - - - - - - - - - - - - - - - - - - - - -
         ;
         ;   <Оставшаяся часть ваших стандартных программ>
         ;
         ;- - - - - - - - - - - - - - - - - - - - - - - - - - - -
         _TEXT   ENDS
         _DATA   SEGMENT
         ;
         ;       < Bставьте данные >
         ;
         _DATA   ENDS
         _TEXT   SEGMENT
         ;------------------------------------------------------
         _TEXT   ENDS
                 END      main
         ----------------------------------------------------------------



                        Листинг A-6. Шаблон .COM-программы
         ----------------------------------------------------------------
         PAGE    60,132             ; широкая  печать
         ;- - - - - - - - - - - - - - - - - - - - - - - - - - - -
         FALSE   EQU     0          ; сравнить с логическим значением
                                    ; FALSE ("ложь")
         TRUE    EQU     0FFFFH     ; сравнить и проверить по маске
                                    ; логическоe значениe TRUE
                                    ; ("истина")
         ;
         ;    <Установление равенств и макрокоманд>
         ;
         ;- - - - Инициализация - - - - - - - - - - - -
         code   SEGMENT

                                      - П-11 -

         ASSUME  cs:code, ds:code, ss:code, es:code
         ;
         main   PROC  NEAR
         ;
         entry: ORG   0100h
         ;
                mov   sp,offset top_of_stack   ; установите новый стек
         ;
         ;
         ;       < Основная стандартная программа >
         ;
                mov      ax,4C00h               ; завершите программу
                int      21h
         ;
         main   ENDP
         ;
         ;- - - - - - - - - - - - - - - - - - - - - - - - - - -
         ;
         ;   <Оставшаяся часть ваших стандартных программ>
         ;
         ;- - - - - - - - - - - - - - - - - - - - - - - - - - -
         ;- - - - - - - - - - - - - - - - - - - - - - - - - - -
         ;
         ;       < Bставьте данные >
         ;
         ;- - - - - - - - - - - - - - - - - - - - - - - - - - -
         ;Дополнительный  стек  -  BHИМAHИЕ - вы ДОЛЖНЫ(!)
         ;использовать функцию 4Сh для завершения данной
         ;программы, если вы используете локальный стек !
         ;
                db       32 DUP ('stack   ')     ; 256-байтный стек
         top_of_stack    EQU    $
         ;
         ;- - - - - - - - - - - - - - - - - - - - - -  - - - - -
         code   ENDS               ; конец сегмента текста программы
                END      entry
         ----------------------------------------------------------------


                 Листинг A-7. Полезные  макрокоманды (STDMAC.INC):
         ----------------------------------------------------------------
         ; - - - - - - - - - - - - - - - - - - - - - - - - - - - -
         ;  Файл включения макроопределений
         ;- -  - - - - - - - - - - - - - - - - - - - - - - - - - - -
         ; Стандартные равенства:
         ;
         TRUE   EQU      0FFFFh  ;  "истина"

            FALSE   EQU     0    ;  "ложь"
            ;
            ; Cтандартные непечатаемые символы
            NUL     EQU    00000000b ; нуль
            BEL     EQU    00000111b ; "звонок"
            BS      EQU    00001000b ; возврат на символ с его стиранием
            HT      EQU    00001001b ; горизонтальная табуляция
            LF      EQU    00001010b ; перевод строки

                                      - П-12 -
            FF      EQU    00001100b ; перевод страницы
            CR      EQU    00001101b ; возврат каретки
            SUBST   EQU    00011010b ; подстановка
            ESCAPE  EQU    00011011b ; переход
            SPACE   EQU    00100000b ; пробел
            COLON   EQU    00111010b ; двоеточие
            SCOLON  EQU    00111011b ; точка с запятой
            ;
            ; Pасширенные символы (фирмы "ИБМ"):
            SLINE   EQU    11000100b  ; горизонтальная строка
            ;
            ;- - - - - - - - - - - - - - - - - - - - - - -
            ..XLIST            ; запретить распечатку макроопределений
            ;;.LALL  _          .  ; распечатка всего
            ;;
            ;;
            ;;** @MODEL ********* Макроопределения общего назначения **
            ;; Установка сегментов согласно модели памяти.
            ;; Это  макроопределение эмулирует управляющую команду
            ;; 5.Х.МОDEL макроассемблера MASM для использования с
            ;; более ранними версиями MASM.

            IF1    ;; Ассемблирование только в процессе прохода 1
            @Model MACRO memory_model,code_name,stack_size
                    ;; ПРИМЕЧAHИЕ: "имя-программы" используется только
                    ;; со средними, большими, а также с очень большими
                    ;; моделями памяти
                    IFNB   ;; модель памяти была указана?
                    ;;
                       IF memory_model  EQ 0
                       @TinyModel stack_size
                   ELSE
                       IF memory_model EQ 1
                       @SmallModel stack_size
                    ELSE
                         IF memory_model EQ 2
                         @MediumModel code_name,stack_size
                       ELSE
                         IF memory_model EQ 3
                         @CompactModel stack_size
                       ELSE
                         IF memory-model EQ 4
                         @ LargeModel code_name,stack_size
                       ELSE
                         IF memory_model EQ 5
                         @Large_Model code_name,stack_size
                       ELSE
                         .ERR
                         %0UT @Model macro: неизвестная модель памяти
                       ENDIF;; конец проверки очень большой модели
                     ENDIF;; конец проверки большой модели
                   ENDIF;; конец проверки компактной модели
                 ENDIF;; конец проверки средней модели
               ENDIF;; конец проверки малой модели
             ENDIF;; конец проверки  очень малой модели
            ;;
            ELSE   ;; модель памяти не была указана

                                      - П-13 -
               .ERR       ;; завершить сообщением об ошибке
               %0UT @MODEL macro error: модель памяти не указана
            ENDIF  ;; конец проверки параметров модели - памяти
            ;;
            ENDM   ;; конец макроопределения
            ;;
            ENDIF  ;; конец обработки  прохода
            ;;
            ;;** @Tiny ************ Макрокоманды общего назначения **
            ;; (Эта управляющая макрокоманда вызывается через @Model 0.
            ;; Эта управляющая макрокоманда также может  вызываться
            ;; непосредственно).
            ;; Отметим, что эта макрокоманда, в отличие от других мак-
            ;; рокоманд  памяти-модели,  не  использует   макрокоманду
            ;; @Stack, поскольку другие стеки в .COM - программах дол-
            ;; жны  быть описаны в конце данной программы. Для опреде-
            ;; ления других стеков в .COM-программах выполните  макро-
            ;; команду @Stack в соответствующем месте исходного текста
            ;; программы.
            IF1   ;; Ассемблировать только в процессе прохода 1
            @TinyModel MACRO
                MEMODEL = 0
               _TEXT SEGMENT BYTE PUBLIC  'CODE' ; сегмент программы
               _TEXT ENDS
               ;; Назначить  физические  сегменты
               ASSUME cs:_TEXT,ds:_TEXT,ss:_TEXT, es:_TEXT
               ;;- - - - - - - - - - - - - - - - - - - - - - -
               ;; Вставьте вручную следующий текст программы после
               ;; @Model 0:
               ;;
               ;; _TEXT SEGMENT
               ;; main PROС near ;;  entry:  ORG 0100h ;;  jmp Start ;;  ;
               вставьте данные  здесь,  если  требуется  ;;  start:  ;;  ;
               вставьте текст программы здесь ;;  main ENDP ;;  ; вставьте
               стандартные программы здесь ;;  ;  вставьте  дополнительный
               стек здесь ;; ; вставьте данные в конце, если требуется
               ;; _TEXT ENDS ;;
               ;;- - - - - - - - - - - - - - - - - - - - - - - - - - -
               ENDM          ;; конец макроопределения
         ENDIF             ;; конец обработки прохода
         ;;** @Small ************ Mакрокоманды общего назначения **
         ;; Управляющая  макрокоманда  для установки Малой (SMALL)
         ;; модели памяти.
         ;; (Эта макрокоманда вызывается  через "@Model Small".
         ;; Эта  макрокоманда может быть вызвана также
         ;; непосредственно.)
         IF1   ;; Ассемблирование только в процессе прохода 1
         @SmallModel MACRO stack_size
               MEMODEL = 1
               _TEXT SEGMENT BYTE PUBLICK 'CODE'  ; сегмент программы
               _TEXT ENDS
               _DATA SEGMENT WORD PUBLIC 'DATA'   ; сегмент данных
                                                  ; (DGROUP)
               _DATA ENDS
               CONST SEGMENT WORD PUBLIC 'CONST'  ; сегмент констант
               CONST ENDS                         ; (DGROUP)
               _BSS SEGMENT WORD PUBLIC 'BSS'     ; сегмент непроинициа-
Предыдущая страница Следующая страница
1 ... 180 181 182 183 184 185 186  187 188 189 190 191 192 193 ... 198
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 

Реклама