adfun.ru
 
BIGLIB
  большущая библиотека (9812 книг), можно не только прочитать но и скачать бесплатно
 
АСТРОЛОГИЯ
  книги по астрологии
 
КРИМИНАЛ
  книги про криминал
 
ДЕТЕКТИВЫ
  детективы известных
   писателей
 
ФАНТАСТИКА
  фентези, фантастика,   фантастические повести
 
ПРИКЛЮЧЕНИЯ
  книги про приключения,   путешествия
 
ПОЛИТИКА
  книги про политиков,   репрессии
 
ПСИХОЛОГИЯ
  разнообразная литература   по психологии
 
КЛАССИКА
  классическая литература
 
КОМПЬЮТЕРНАЯ
  ЛИТЕРАТУРА
  про компютерное железо,   документация, языки   программирования
 
РЕЛИГИЯ, АТЕИЗМ
  книги про религию
 
ФИЛОСОФИЯ
  книги, которые заставляют   задуматься над   окружающим тебя миром.
 
ЭНЦИКЛОПЕДИИ
  самые интересные   энциклопедии на
   разные темы
 
МЕДИЦИНА
  медицинские книги,   методички,
   народные лечебники
 
КУЛИНАРИЯ
  рецепты тортов,   консервирование,
  все о спиртных
  напитках.
 
СТИХИ
  стихи популярных и не   очень авторов
 
ТВОРЧЕСТВО
  народное творчество,   стихи, песни и т.д.
 
ЮМОР
  анекдоты, приколы,   смешные истории
 
ЛЮБОВНЫЙ РОМАН
  мир высоких чувств и   любовных грез
 
ЭРОТИКА
  эротические рассказы,   книги о технике секса,   кама-сутра и др.




adfun.ru
Rambler's Top100 Rambler's Top100
    НА ГЛАВНУЮ
    РЕФЕРАТЫ
    ТОСТЫ
    ТЕСТЫ
    АВТО
    ДЛЯ СТУДЕНТА
    КНИГИ
    КОНТАКТ
 
Турбо Ассемблер 3.0/tasm/#2-2
Автор ""
Размер 465209 Байт
Страница 37 из 54
СКАЧАТЬ КНИГУ ЦЕЛИКОМ


          program EnvTest;
          { программа ищет строки операционной среды }

          var
            EnvVariable : string;
            EnvValue    : string;

     Турбо Ассемблер 3.0/tasm/#2-2                             = 144 =


          {$F+}

          function EnvString(s:string) : string; external;
          {$L ENVSTRING.OBJ}
          {$F-}
          begin
            EnvVariable := 'PROMPT';
            EnvValue := EnvString(EnvVariable);
            if EnvValue = '' then EnvValue := '*** не найдена ***';
            Writeln('Переменная операционной среды: ',
                     EnvVariable,' Значение: ',EnvValue);
          end.

          Чтобы сформировать и запустить данные программы на Паскале и
     Ассемблере, используйте следующие команды командного файла:

          TASM ENVSTR
          TPC ENVTEST
          ENVTEST

          Если использовать директиву .MODEL,  то функция EnvString на
     Ассемблере будет выглядеть следующим образом (ENVMOD.ASM):

                    .MODEL   large, PASCAL
                    .DATA
                    EXTRN prefixSeg : Word  ; дает адрес PSP
                    .CODE
     EnvString      PROC FAR  EnvVar:DWORD  RETURNS EnvVal:DWORD
                    PUBLIC  EnvString
                    push    bp
                    cld                     ; работать в прямом
                                            ; направлении
                    mov     es,[prefixSeg]  ; посмотреть PSP
                    mov     es,es:[2Ch]     ; ES:DI указывают на
                                            ; операционную среду,
                    xor     di,di           ; которая выровнена на
                                            ; границу параграфа
                    mov     bp,sp           ; найти строку параметров,
                    lds     si,ss:[bp+6]    ; которая следует за
                                            ; адресом возврата
                    ASSUME  ds:NOTHING
                    lodsb                   ; посмотреть длину
                    or      al,al           ; она равна 0?
                    jz      RetNul          ; да, возврат
                    mov     ah,al           ; в противном случае
                                            ; сохранить ее в AH
                    mov     dx,si           ; DS:SI содержат указатель
                                            ; на первый параметр
                                            ; char
                    xor     al,al           ; сделать его равным 0
     Compare:
                    mov     ch,al           ; мы хотим, чтобы для

     Турбо Ассемблер 3.0/tasm/#2-2                             = 145 =

                                            ; следующего отсчета ch=0
                    mov     si,dx           ; возвратить указатель на
                                            ; просмотренную строку
                    mov     cl,ah           ; получить длину
                    mov     si,dx           ; возвратить указатель на
                                            ; строку
                    repe    cmpsb           ; сравнить байты
                    jne     Skip            ; если сравнение неудач-
                                            ; ное, попробовать следу-
                                            ; ющую строку
                    cmp     byte ptr es:[di],'=' ; сравнение
                                            ; завершилось успешно
                                            ; следующий символ '='?
                    jne     NoEqual         ; если нет, все еще нет
                                            ; совпадения
     Found:
                    mov     ax,es           ; DI:SI будет указывать
                                            ; на найденную нами строку
                    mov     ds,ax
                    mov     si,di
                    inc     si              ; "пройти" символ '='
                    les     bx,ss:[bp+10]   ; получить адрес
                                            ; результата функции
                    mov     di,bx           ; занести его в ES:DI
                    inc     di              ; байт длины
                    mov     cl,255          ; задать максимальную
                                            ; длину
     CopyLoop:
                    lodsb                   ; получить байт
                    or      al,al           ; проверить на 0
                    jz      Done            ; если 0, выполнено





stosb ; занести его в результат loop CopyLoop ; переместить до 255 ; байт Done: not cl ; при сохранении мы ; уменьшали от CL до 255 mov es:[bx],cl ; сохранить длину mov ax,SEG DATE mov ds,ax ; восстановить DS ASSUME ds:DATA pop bp ret 4 ASSUME ds:NOTHING Skip: dec di ; проверять на 0 NoEqual: mov cx,7FFFh ; длинный поиск, если ; нужно sub cx,di ; операционная среда ; никогда не превышает ; 32К jbe RetNul ; если конец, выйти repne scasb ; посмотреть следующий Турбо Ассемблер 3.0/tasm/#2-2 = 146 = ; 0 jcxz RetNul ; выйти, если не найден cmp byte ptr es:[di],al ; второй 0 в строке? jne Compare ; если нет, попытаться ; снова RetNul: les di,ss:[bp+10] ; получить адрес ; результата stosb ; сохранить там 0 mov ax,SEG DATA mov ds,ax ; восстановить DS ASSUME ds:DATA ret 4 EnvString ENDP CODE ENDS END Вы можете использовать ту же программу на Паскале и просто ассемблировать альтернативный вариант функции EnvString и пере- компилировать программу с помощью того же командного файла. Турбо Ассемблер 3.0/tasm/#2-2 = 147 = Часть 2. ПРИЛОЖЕНИЯ ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Далее следует содержимое приложений. Турбо Ассемблер 3.0/tasm/#2-2 = 148 = Приложение A. Замечания по программированию ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД В данном приложении приведена основная информация по постро- ению программ с конкретными моделями памяти и форматами выполняе- мого кода. Упрощенные директивы определения сегмента ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД В следующей таблице показаны используемые по умолчанию для каждой модели памяти атрибуты сегмента. Используемые по умолчанию сегменты и типы для модели памяти TINY Таблица A.1 ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї і Директива Имя Выравнивание Комбинирование Класс Группаі ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ і.CODE _TEXT WORD PUBLIC 'CODE' DGROUP і і.FARDATA FAR_DATA PARA private 'FAR_DATA' і і.FARDATA? FAR_BSS PARA private 'FAR_BSS' і і.DATA _DATA WORD PUBLIC 'DATA' DGROUP і і.CONST CONST WORD PUBLIC 'CONST; DGROUP і і.DATA? _BSS WORD PUBLIC 'BSS' DGROUP і іSTACK* STACK PARA STACK 'STACK' DGROUP і і і і * - STACK не подразумевается размещенным в DGROUP илиі іFARSTACK, заданным в директиве MODEL. і АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ Используемые по умолчанию сегменты и типы для модели памяти SMALL Таблица A.2 ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї і Директива Имя Выравнивание Комбинирование Класс Группаі ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ і.CODE _TEXT WORD PUBLIC 'CODE' і і.FARDATA FAR_DATA PARA private 'FAR_DATA' і і.FARDATA? FAR_BSS PARA private 'FAR_BSS' і і.DATA _DATA WORD PUBLIC 'DATA' DGROUP і і.CONST CONST WORD PUBLIC 'CONST; DGROUP і і.DATA? _BSS WORD PUBLIC 'BSS' DGROUP і іSTACK* STACK PARA STACK 'STACK' DGROUP і


Страницы : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 [37] 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54


adfun.ru









Форум раскрутка сайта и интернет-реклама
реклама - рекламное агентство -
Интернет PR агентство чат и форум
волчат знакомства - сайт знакомств
бесплатные компьютерные игры
фото знакомства
новые стеклопакеты -
качественное остекление балконов
портал - пластиковые окна -
закажите окна пвх в Москве

частная стоматология в Москве:
надежная стоматологическая клиника
протезирование зубов и
отбеливание зубов в стоматологии
Музыка - скачать mp3 музыка
каталог партнерские программы
ручной бесплатный обмен ссылками цифровые камеры цифровые фотоаппараты -
цифровые видеокамеры

театры - заказ билетов в театр -
магазин - продажа компьютеров
в Москве форум Испания - жилье -
недвижимость в испании

турфирма - испания туры
Переводы - бюро переводов
Законы - закон о товарных знаках,
Грузовые перевозки. АсМАП. Дальнобой закон о рекламе
Интернет казино
реклама на форуме и контекстная реклама
на Яндексе Баннерная сеть и
интернет каталог сайтов Holiday.Ru
Форумы политика, лучшие анекдоты
знакомства.