Главная · Поиск книг · Поступления книг · 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 ... 183 184 185 186 187 188 189  190 191 192 193 194 195 196 ... 198
                     ;;
                   If type EQ 10         ;; десятичное  преобразование
                                         ;; указано?
                     IFNDEF EXT_BIN2DEC  ;; было определеноEXT_BIN2DEC?
                     EXTRN bin2dec:NEAR  ;; нет, вставьте определение
                                         ;; EXTRN
                  EXT_BIN2DEC EQU 0    ;; и только раз установите
                                       ;; равенство
                  ENDIF
                  ;;
                  ELSE
                  ;;
                IF type EQ 16                ;; шестнадцатиричное
                                        ;; преобразование  указано?
                  IFNDEF EXT_BIN2HEX    ;; было определено EXT_BIN2HEX?
                  EXTRN   bin2hex:NEAR  ;; нет, вставьте определение
                  EXT_BIN2HEX EQU 0     ;; EXTRN и только раз установите
                                        ;; равенство
                  ENDIF
                ;;
                ELSE
                ;;
                 .ERR
                 %OUT @DisNum Macro: указан "type" запрещенный  "тип"
                 ENDIF        ;; окончить  проверку  для шестнадца-
                              ;; тиричного   преобразования
             ;;
             ENDIF ;; окончить  проверку  для десятичного преобразования
         ;;
         ELSE   ;; в противном  случае,  параметр пустой
         ;;
         .ЕRR   ;; завершить выполнение сообщением об ошибке
         %OUT @DisNum macro: "type" параметр не указан
         ENDIF  ;;  окончить  проверку  пустого параметра
         ;; Oкoнчить проверку требуемых параметров
         ;;
         ;; Hачать вставку программы
         push     ax            ;; сохранить содержимое регистров
         push     cx
         push     dx
         ;;
         mov ax,number          ;; поместить число в AX
         ;;
         IFNB           ;; аргумент "разряды"  указан?
         mov      ch,digits     ;; да, записать значение в CH
         ELSE                   ;; в противном случае,  по  умолчанию
         mov      ch,1          ;; отобразить по крайней мере 1 разряд
         ENDIF
         ;;
         IFNB             ;; аргумент "знак"  указан?
         mov      dx,sign       ;; да, поэтому поместить его в DX
         ELSE                   ;; в противном случае, по умолчанию знак
         mov      dx,0          ;; будет  отсутствовать
         ENDIF
         ;;
         If type  EQ 10         ;; десятичное преобразование указано?

                                      - П-23 -
         call     bin2dec
         ELSE
                     IF type EQ 16  ;; шестнадцатиричное преобразование
                                    ;; указано?
                             call bin2hex
                             ENDIF  ;; конец проверки по основанию 16
                     ENDIF   ;; конец проверки по основанию 10
                     ;;
                     pop     dx   ;; восстановить содержимое регистров
                     pop     cx
                     pop     ax
                     ;;
                  ENDM   ;; конец макроопределения
            ENDIF  ;; конец выполнения прохода
            ;;
            ;;
            ;;** @GetDate ********** Mакрокоманды общего назначения **
            ;; Получить  системную дату
            IF1      ;; Ассемблировать только в процессе прохода 1
            @GetDate MACRO
                     mov      ah,2Ah ;; загрузить номер функции
                     @DosCall        ;; вызвать  MS-DOS
                  ENDM   ;; конец макроопределения
            ENDIF  ;; конец выполнения прохода
            ;;
           ;;** @GetTime ********** Mакрокоманды общего назначения **
            ;; Получить  системное время
            IF1      ;; Ассемблировать только в процессе прохода 1
            @GetTime MACRO
                     mov      ah,2Ch ;; загрузить номер функции
                     @DosCall        ;; вызвать  MS-DOS
                  ENDM   ;; конец макроопределения
            ENDIF  ;; конец выполнения прохода
            ;;
            ;;** @DiskRead ******** Mакрокоманды общего назначения **
            ;; Считать логический  сектор(а)
            IF1      ;; Ассемблировать только в процессе прохода 1
            @DiskRead MACRO
                     int     25h  ;; обработать абсолютное прерывание
                                  ;; по чтению диска
                  ENDM   ;; конец макроопределения
            ENDIF  ;; конец выполнения прохода
            ;;
            ;;** @DiskWrite ******* Mакрокоманды общего назначения **
            ;; Записать в логический сектор(а)
            IF1      ;;  Ассемблировать только в процессе прохода 1
         @DiskWrite MACRO
                  int      26h     ;; обработать машинное прерывание
                                   ;; по записи на диск
               ENDM   ;; конец макроопределения
         ENDIF  ;; конец выполнения прохода
         ;;
         ;;** @GetDOSVersion **** Mакрокоманды общего назначения **
         ;; Получить номер версии операционной  системы MS-DOS
         IF1      ;; Ассемблировать только в процессе прохода 1
         @GetDOSVersion MACRO
                  push     bx      ;; сохранить содержимое

                                      - П-24 -
                                   ;; уничтоженных  регистров
                  push     cx
                  mov      ah,30h  ;; загрузить номер функции
                  @DosCall         ;; вызвать MS-DOS
                  pop      cx      ;; восстановить содержимое регистров
                  pop      bx
               ENDM   ;; конец макроопределения
         ENDIF  ;; конец выполнения прохода
         ;;
         ;;** @GetDOSVer ******* Mакрокоманды общего назначения **
         ;; Получить номер версии операционной  системы MS-DOS
         IF1      ;; Ассемблировать только в процессе прохода 1
         @GetDOSVer MACRO
                  IFNDEF   EXT_GDOSV     ;; символ определен?
                  EXTRN    GETDOSV:NEAR  ;; нет, вставить команду EXTRN
                                         ;; только  один  раз
                  EXT_GDOSV EQU 0        ;; и только раз определить
                                         ;; равенство
                  ENDIF                  ;; (две верхние строки не
                                         ;; должны вставляться в
                                         ;; последующие вызовы
                                         ;; макроопределения)
                  call     dosver        ;; вызвать библиотечную
                                         ;; стандартную программу
               ENDM   ;; конец макроопределения
         ENDIF  ;; конец выполнения прохода
         ;;
         ;;** @DisDOSVer ********* Mакрокоманды общего назначения **
         ;; Получить и отобразить номер версии DOS
         IF1      ;; Ассемблировать только в процессе прохода 1
         @DisDOSVer MACRO
                  IFNDEF   EXT_DDOSV     ;; символ определен?
                  EXTRN    DOSV2CON:NEAR ;; нет, вставить команду EXTRN
                                         ;; только  один  раз
                  EXT_DDOSV EQU 0        ;; и только раз определить
                                         ;; равенство
                  ENDIF                  ;; (две верхние строки не
                                         ;; должны вставляться в
                                         ;; последующие вызовы
                                         ;; макроопределения)
                  call     dosv2con      ;; вызвать библиотечную
                                         ;; стандартную программу
               ENDM   ;; конец макроопределения
         ENDIF  ;; конец выполнения прохода
         ;;
         ;;** @ChangeСase ******* Mакрокоманды общего назначения **
         ;; Изменить регистр  клавиатуры для  символа
         IF1      ;; Bыполнять только в  процессе прохода 1
         @ChangeCase MACRO  char,type
              IFB    ;; символ, подлежащий преобразованию,
                           ;; указан ?
              .ERR                ;; нет, сгенерировать и
                                  ;; вывести сообщение  об  ошибке
              %OUT @ChangeCase macro: "char" параметр не определен !
              ELSE                   ;; в противном случае
              mov      al,char       ;; загрузите символ в AL
              ENDIF

                                      - П-25 -
              ;;
              IFB           ;; тип преобразования указан?
              mov   ah,0          ;; нет, поэтому загрузить 0 в AH
              ELSE
              mov   ah,type   ;; загрузить тип преобразования в AH
              ENDIF
              ;;
              IFNDEF EXT_CHGCASE  ;; символ EXT_CHGCASE определен?
              EXTRN  CHGCASE:NEAR ;; нет, вставить EXTRN только раз
              EXT_CHGCASE EQU 0   ;; и только раз определить равенство
              ENDIF    ;; (две верхние строки не должны вставляться в
                       ;; последующие вызовы данной макрокоманды)
              ;;
              call     chgcase    ;; вызвать библиотечную процедуру
                                  ;; изменения регистра клавиатуры
           ENDM   ;; конец макроопределения
         ENDIF  ;; конец выполнения прохода
         ;;
         ;;** @case ************* Mакрокоманды общего назначения **
         ;; Mакрокоманда CASE языка ассемблера
         @Case    MACRO    key,case_list,jmp_labels
                  ??tmp_1 = 0
                  IRP      match,<&case_list>  ;; упорядочить регистры
                    ??tmp_1 = ??tmp_1 + 1  ;; установить номер индекса
                    cmp    key,&&match       ;; регистр соответствует?
                    ??tmp_2 = 0
                    IRP    retl,<&jmp_labels>  ;; упорядочить переходы
                      ??tmp_2 = ??tmp_2 + 1  ;; до тех пор, пока индекс
                                             ;; не будет соответствовать
                      IF (??tmp_1 EQ ??tmp_2)
                        je &&&retl             ;; да !
                        EXITM
                      ENDIF   ;; конец проверки условия
                    ENDM      ;; конец второго блока IRP
                  ENDM        ;; конец первого блока IRP
                  ENDM        ;; конец макроопределения
         ;;
         ;;
         ;;*****************************************************
         ;; Используйте макрокоманды @PushAll и @PopAll вместо ко-
         ;; манд   PUSHA   и   POPA,   поддерживаемых  процессором
         ;; 80186/80188/80286/80386 для обеспечения  совместимости
         ;; с процессорами 8086/8088.
         ;;
         ;;** @PushAll ********** Mакрокоманды общего назначения **
         ;;  Поместить в стек содержимого всех регистров
         IF1     ;; Выполнять только в процессе прохода 1
         @PushAll MACRО  ;; сохранить содержимое всех регистров в стеке
                 push      ax
                 push      bx
                 push      cx
                 push      dx
                 push      dp
                 push      di
                 push      si
               ENDM   ;; конец макроопределения
         ENDIF  ;; конец выполнения прохода

                                      - П-26 -
         ;;
         ;;** @PopAll *********** Mакрокоманды общего назначения **
         ;; Снять со стека содержимое всех регистров
         IF1     ;; Выполнять только в процессе прохода 1
         @PopAll MACRO           ;; восстановить  содержимое всех
                                 ;; регистров из стеке
                 pop       si
                 pop       di
                 pop       dp
                 pop       dx
Предыдущая страница Следующая страница
1 ... 183 184 185 186 187 188 189  190 191 192 193 194 195 196 ... 198
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 

Реклама