Главная · Поиск книг · Поступления книг · 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 ... 181 182 183 184 185 186 187  188 189 190 191 192 193 194 ... 198

                                      - П-14 -
               _BSS ENDS                          ; лизированных данных
                                                  ; (DGROUP)
               STACK SEGMENT PARA STACK 'STACK'   ; сегмент стека
                                                  ; (DGROUP)
               STACK ENDS
               ;;
               IFNB 
                       @Stack stack_size
               ;;
              ENDIF  ;; конец обработки прохода
               ;;
               DGROUP GROUP _DATA,CONST,_BSS,STACK ; группирование
                                                   ; сегментов данных
               ;;
               ;; Назначить физические сегменты:
               ASSUME   cs:_TEXT, ds:DGROUP, ss:DGROUP, es:DGROUP
               ;;
               ENDM  ;;  конец макроопределения
         ENDIF   ;; конец обработки прохода
         ;;
         ;;** @Medium ******** Макрокоманды общего назначения **
         ;; Управляющая макрокоманда для установки средней модели
         ;; памяти. (Эта макрокоманда  вызывается  через  "@Model
         ;; medium".  Эта  макрокоманда  может быть вызвана также
         ;; непосредственно.)
         IF1  ;; Ассемблировать только в процессе прохода 1
         @MediumModel MACRO code_name,stack_size
                MEMODEL = 2
                code_name_TEXT SEGMENT BYTE PUBLIC 'CODE' ;поименованный
                                                     ; сегмент программы
                code_name_TEXT ENDS                       ;
                _DATA SEGMENT WORD PUBLIC 'DATA'     ; сегмент данных
                _DATA ENDS                           ; (DGROUP)
                CONST SEGMENT WORD PUBLIC 'CONST'    ; сегмент констант
                CONST ENDS                           ; (DGROUP)
                _BSS SEGMENT WORD PUBLIC 'BSS'       ; сегмент непроинициа-
                _BSS ENDS                            ; лизированных данных
                                                     ; (DGROUP)
                STACK SEGMENT PARA STACK 'STACK'     ; сегмент стека
                STACK ENDS                           ; (DGROUP)
                ;;
                IFNB 
                        @Stack stack_size
                ENDIF
                ;;
                DGROUP GROUP _DATA,CONST,_BSS,STACK  ; группирование
                                                     ; сегмента данных
                ;;
                ;; Hазначить физические сегменты
                ASSUME  cs:_TEXT, ds:DGROUP, ss:DGROUP, es:DGROUP
                ;;
                ENDM   ;; конец макроопределения
              ENDIF  ;; конец обработки прохода
                ;;
                ;;** @COMPACT ****** Mакрокоманды общего назначения **
                ;; Управляющая макрокоманда для установки компактной
                ;; (COMPACT) модели памяти. (Эта макрокоманда вызывается

                                      - П-15 -
                ;; через "@Model compact". Эта макрокоманда может быть
                ;; вызвана также непосредственно.)
                IF1   ;; Ассемблировать только в процессе прохода 1
                @CompactModel MACRO stack_size
                MEMODEL = 3
              _TEXT SEGMENT BYTE PUBLIC 'CODE' ;сегмент текста программы
              _TEXT ENDS
              FAR_DATA SEGMENT PARA 'FAR_DATA' ; личный далекий сегмент
              FAR_DATA ENDS                    ; данных (DGROUP)
              FAR_BSS SEGMENT PARA 'FAR_BSS'   ; личный далекий непро-
              FAR_BSS ENDS                     ; инициализированный сег-
                                               ; мент данных (DGROUP)
             _DATA SEGMENT WORD PUBLICK 'DATA'  ; сегмент данных
             _DATA ENDS                         ; (DGROUP)
             CONST SEGMENT WORD PUBLIBC 'CONST' ; сегмент констант
             CONST ENDS                         ; (DGROUP)
            _BSS SEGMENT WORD PUBLIC 'BSS'      ; сегмент непроинициа-
            _BSS ENDS                           ; лизированных данных
                                                ; (DGROUP)
              STACK SEGMENT PARA STACK 'STACK'     ; сегмент стека
              STACK ENDS                           ; (DGROUP)
              ;;
              IFNB 
                      @Stack stack_size
              ENDIF
              ;;
              DGROUP GROUP _DATA,CONST,_BSS,STACK  ; группирование
                                                   ; сегментов данных
              ;;
              ;; Назначить физические сегменты:
              ASSUME cs:_TEXT,ds:DGROUP, ss:DGROUP,es:DGROUP
              ;;
              ENDM  ;; конец макроопределения
         ENDIF  ;;  конец обработки прохода
         ;;
         ;;** @Large ***************** Mакрокоманды общего назначения **
         ;; Управляющая макрокоманда для установки большой (LARGE)
         ;; модели памяти. (Эта макрокоманда вызывается
         ;; через "@Model Large". Эта макрокоманда может быть
         ;; вызвана также непосредственно.)
         IF1  ;; Ассемблировать только в процессе прохода 1
         @LargeModel MACRO code_name,stack_size
             MEMODEL = 4
             code_name_TEXT SEGMENT BYTE PUBLIC 'CODE'  ; поименованный
             code_name_TEXT ENDS                    ; сегмент программы
             FAR_DATA SEGMENT PARA 'FAR_DATA'    ; личный далекий сегмент
             FAR_DATA ENDS                       ; данных (DGROUP)
             FAR_BSS SEGMENT PARA 'FAR_BSS'      ; личный далекий непро-
             FAR_BSS ENDS                        ; инициализированный сег-
                                                 ; мент данных (DGROUP)
             _DATA SEGMENT WORD PUBLIC 'DATA'    ; сегмент данных
             _DATA ENDS                          ; (DGROUP)
             CONST SEGMENT WORD PUBLIC 'CONST'   ; сегмент констант
             CONST ENDS                          ; (DGROUP)
             _BSS SEGMENT WORD PUBLIC 'BSS'      ; сегмент непроинициа-
             _BSS ENDS                           ; лизированных данных
                                                 ; (DGROUP)

                                      - П-16 -
             STACK SEGMENT PARA STACK 'STACK'    ; сегмент стека
             STACK ENDS                          ; (DGROUP)
             ;;
             IFNB 


         @Stack stack_size
              ENDIF
              ;;
              DGROUP GROUP _DATA,CONST,_BSS,STACK  ; группирование
                                                   ; сегмента данных
              ;;
              ;; Назначить физические сегменты
              ASSUME cs:_TEXT,ds:DGROUP, ss:DGROUP,es:DGROUP
              ;;
                ENDM   ;; конец макроопределения
            ENDIF  ;; конец обработки прохода
         ;;
         ;;** @HUGE ************* Mакрокоманды общего назначения **
         ;;  Управляющая макрокоманда для установки очень большой
         ;;  (HUGE) модели памяти. (Эта макрокоманда вызывается
         ;;  через "@Model huge". Эта макрокоманда может быть
         ;;  вызвана также непосредственно.)
         ;;  Oчень  большая (HUGE) модель памяти в настоящее время
         ;;  устанавливается так же как и Большая (LARGE) модель
         ;;  памяти.
         IF1 ;; Ассемблировать только в процессе прохода 1
         @HugeModel MACRO code_name,stack_size
                 MEMODAL = 5
                 @LargeModel code_name,stack_size
                ENDM  ;; конец макроопределения
         ENDIF  ;;  конец обработки прохода
         ;;
         ;;** @Stack ************* Mакрокоманды общего назначения **
         ;; Управляющая  макрокоманда для установки размера стека
         IF1   ;; Ассемблировать только в процессе прохода 1
         @Stack MACRO stack_size,prog_type
           ;;
           IFB   ;;  если параметр типа программы пустой
             IF MEMODEL EQ 0
               PROGTYPE = 0
             ELSE
               IF MEMODEL EQ 1
                  PROGTYPE = 1
             ELSE
               IF MEMODEL EQ 2
                  PROGTYPE = 1
             ELSE
               IF MEMODEL EQ 4
                  PROGTYPE = 1
               ELSE
                   IF MEMODEL EQ 5
                      PROGTYPE = 1
                   ELSE
                       .ERR
                       %OUT @Stack macro: модель памяти
                       %OUT или тип программы не были установлены

                                      - П-17 -
                   ENDIF;; конец проверки очень большой модели
                 ENDIF ;; конец проверки большой модели
               ENDIF ;; конец проверки компактной модели
             ENDIF ;; конец проверки средней модели
           ENDIF ;; конец проверки малой модели
         ENDIF ;; конец проверки очень маленькой модели
         ELSE ;;  параметр типа программы был указан
           IF prog_type EQ 0  ;; установка программы типа .COM
              PROGTYPE = 0
           ELSE
             IF prog_type EQ 1
              PROGTYPE = 1
             ELSE
               .ERR     ;;  выход с сообщением об ошибке
               %OUT @Stack macro: указан некорректный тип программы
              ENDIF ;; конец проверки типа .EXE
            ENDIF ;; конец проверки типа  .COM
         ENDIF ;;  конец проверки параметра "тип-программы"
         ;;
         IFNB 
         ;;
            IF PROGTYPE EQ 0
                  ;  Дополнительный стек. BHИМAHИЕ - вы должны ис-
                  ;  пользовать функцию 4h для  завершения  данной
                  ;  программы, если вы используете локальный стек.
                         db    stack_size DUP ('стек    ')
                  top_of_stack EQU     $
            ELSE ;;  тип программы - .EXE
                  STACK SEGMENT
                          db   stack_size DUP ('стек    ')
                  STACK ENDS
            ENDIF ;; конец проверки PROGTYPE
         ;;
         ELSE  ;; параметр "размер-стека" не был указан
         ;;
           IF PROGTYPE EQ 0
                  ; Дополнительный стек. ВНИМАНИЕ - вы должны исполь-
                  ; зовать функцию 4h для завершения данной программы
                  ; в  случае использования локального стека !
                          db       32 DUP ('стек    ')
              top_of_stack       EQU    $
           ELSE ;; тип программы - .EXE
              STACK SEGMENT
              db     32 DUP ('стек    ')
                       STACK ENDS
                 ENDIF ;; конец проверки PROGTYPE
              ENDIF  ;; конец проверки "размера стека"
              ;;
              ENDM   ;; конец макроопределения
         ENDIF  ;; конец выполнения прохода
         ;;
         ;;** @SwapNewStack ******** Mакрокоманды общего назначения **
         ;; Переключить стек на новый стек
         IF1   ;; Ассемблировать только в процессе прохода 1
         @SwapNewStack MACRO  tos
              LOCAL        bypass
              ;;

                                      - П-18 -
              jmp          bypass       ;; пропустить область данных
         old_stk_seg       dw      ?         ;; пространство для
                           ;; сегмента стека вызывающей макрокоманды
         old_stk_ptr       dw      ?         ;; пространство для
                          ; указателя стека вызывающей макрокоманды
         new_stk_seg       dw      ?         ;; пространство  для
                                        ;; нового сегмента   стека
         new_stk_ptr       dw  offset tos    ;; пространство  для
                                        ;; нового указателя  стека
                 ;;
         bypass:
                 mov       cs:new_stk_seg,cs ;; установить сегмент
Предыдущая страница Следующая страница
1 ... 181 182 183 184 185 186 187  188 189 190 191 192 193 194 ... 198
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 

Реклама