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




adfun.ru
Rambler's Top100 Rambler's Top100
    НА ГЛАВНУЮ
    РЕФЕРАТЫ
    ТОСТЫ
    ТЕСТЫ
    АВТО
    ДЛЯ СТУДЕНТА
    КНИГИ
    КОНТАКТ
 
Справочник по системе программирования Турбо Ассемблер 2.0
Автор ""
Размер 416131 Байт
Страница 32 из 51
СКАЧАТЬ КНИГУ ЦЕЛИКОМ

ния сегментов.  Вам они потребуются только для больших или специ-
альных программ,  поэтому мы только кратко упомянем их.  За более
подробной информацией вы можете обратиться к Главе 9.

     Директива .DATA? используется аналогично директиве .DATA, но
она определяет ту часть сегмента данных,  которая содержит неини-
циализированные данные. Она обычно используется в модулях Ассемб-
лера, которые компонуются с языком высокого уровня.

     Директива .FARDATA  позволяет вам определить дальний сегмент
данных, то есть сегмент данных, отличный от стандартного сегмента
@data, разделяемого (совместно используемого) всеми модулями. Ди-
ректива  .FARDATA  позволяет  в модуле Ассемблера определить свои
собственные сегменты  размером  до  64К.  Если  задана  директива
.FARDATA, то именем определенного по этой директиве дальнего сег-
мента данных будет @fardata, так же как @data - имя сегмента, оп-
ределенного по директиве .DATA.

     Директива .FARDATA? во многом аналогична директиве .FARDATA,
но она определяет неинициализированный сегмент дальнего типа. Так
же  как  и для директивы .FARDATA и имени @fardata,  при указании
директивы .FARDATA? сегмент данных дальнего типа, определенный по
этой директиве, получает имя @fardata?.

     Директива .CONST определяет ту часть сегмента данных,  в ко-
торой содержатся константы.  Опять-таки это имеет силу только при
компоновке кода Ассемблера с языком высокого уровня.

     При использовании  упрощенных директив определения сегментов
можно  использовать  некоторые  предопределенные   метки.   Метка
@FileName представляет собой имя ассемблируемого файла, @curseg -
имя сегмента, в который Турбо Ассемблер в данный момент выполняет
ассемблирование,  @CodeSize - это 0 для моделей памяти с ближними
сегментами кода (сверхмалой,  малой и компактная),  1 - для  ком-
пактной  и  большой  модели памяти и 2 - для сверхбольшой модели.
Аналогично,  @DataSize = 0 в модели памяти  с  сегментами  данных
ближнего  типа (сверхмалая,  малая и средняя модель памяти),  1 в
компактной и большой моделях и 2 - для сверхбольшой модели.



              Стандартные директивы определения сегментов
-----------------------------------------------------------------

     Далее мы приведем такой же пример программы, как и в  преды-
дущем  разделе,  но  на этот раз используем стандартные директивы
определения сегментов SEGMENT, ENDS и ASSUME.

 DGROUP   GROUP   _DATA, STACK
          ASSUME  CS:_TEXT, DS:_DATA, SS:STACK
 STACK    SEGMENT PARA STACK 'STACK'
          DB      200h DUP (?)
 STACK    ENDS
 _DATA    SEGMENT WORD PUBLIC 'DATA'
 MemVar   DW      0
          .
          .
          .
 _DATA    ENDS
 _TEXT    SEGMENT WORD PUBLIC 'CODE'
 ProgramStart:
          mov     ax,_DATA
          mov     ds,ax
          mov     ax,[MemVar]
          .
          .
          .
          mov     ah,4ch
          int     21h
 _TEXT    ENDS
          END     ProgramStart

     Теперь вы видите, почему  упрощенные  директивы  определения
сегментов называются упрощенными. Однако, многое из того, что де-
лают упрощенные директивы определения сегментов предназначено для
того, чтобы облегчить компоновку модулей Ассемблера с языками вы-
сокого уровня, что является излишним в автономных  программах  на
Ассемблере.  Приведем  пример  программы  HELLO  с использованием
стандартных директив определения сегментов:

 Stack   Segment PARA STACK 'STACK'
         DB      200h DUP (?)
 Stack   ENDS

 Data    SEGMENT WORD 'DATA'
 HelloMessage    DB   'Привет!',13,10,'$'
 Data    ENDS
 Code    Segment WORD 'CODE'
         ASSUME  CS:Code, DS:Data
 ProgramStart:
         mov     ax,Data
         mov     ds,ax      ; установить DS в значение
                            ; сегмента данных
         mov     dx,OFFSET HelloMessage ; DS:DX указывает
                            ; на сообщение 'Привет!'
         mov     ah,9       ; функция DOS вывода строки
         int     21h        ; вывести строку на экран





mov ah,4ch ; функция DOS завершения ; программы int 21h ; завершить программу Code ENDS END ProgramStart Последний пример не слишком усложнился, но тем не менее яс- но, что стандартные директивы определения сегментов более сложны, чем упрощенные директивы. В Главе 9 стандартные (полные) директивы определения сегмен- тов описываются более подробно. В данном разделе разделе мы пы- таемся только дать вам представление о том, что делают стандарт- ные директивы определения сегментов. Директива SEGMENT ----------------------------------------------------------------- Директива SEGMENT определяет начало сегмента. Метка, которая указывается в данной директиве, определяет начало сегмента. Нап- ример, директива: Cseg SEGMENT определяет начало сегмента с именем Cseg. Директива SEGMENT может также (необязательно) определять атрибуты сегмента, включая вы- равнивание в памяти на границу байта, слова, двойного слова, па- раграфа (16 байт) или страницы (256 байт). Другие атрибуты вклю- чают в себя способ, с помощью которого сегмент будет комбиниро- ваться с другими сегментами с тем же именем и классом сегмента. Директива ENDS ----------------------------------------------------------------- Директива ENDS определяет конец сегмента. Например: Cseg ENDS завершает сегмент с именем Cseg, который начинался по директиве SEGMENT. При использовании стандартных директив определения сег- ментов вы должны явным образом завершать каждый сегмент. Директива ASSUME ----------------------------------------------------------------- Директива ASSUME указывает Турбо Ассемблеру, что в значение какого сегмента установлен данный сегментный регистр. Директиву ASSUME CS: требуется указывать в каждой программе, в которой ис- пользуются стандартные сегментные директивы, так как Турбо Ас- семблеру необходимо знать о сегменте кода для того, чтобы устано- вить выполняемую программу. Кроме того, обычно используются директивы ASSUME DS: и ASSUME ES:, благодаря которым Турбо Ас- семблер знает, к каким ячейкам памяти вы можете адресоваться в данный момент. Директива ASSUME позволяет Турбо Ассемблеру проверить допус- тимость каждого обращения к именованной ячейке памяти с учетом значения текущего сегментного регистра. Рассмотрим следующий при- мер: . . . Data1 SEGMENT WORD 'DATA' Var1 DW 0 Data1 ENDS . . . Data2 SEGMENT WORD 'DATA' Var2 DW 0 Data2 ENDS Code SEGMENT WORD 'CODE' ASSUME CS:Code ProgramStart: mov ax,Data1 mov ds,ax ; установить DS в Data1 ASSUME DS:Data1 mov ax,[Var2] ; попытаться загрузить Var2 в AX ; это приведет к ошибке, так как ; Var2 недоступна в сегменте ; Data1 . . . mov ah,4ch ; номер функции DOS для ; завершения программы int 21h ; завершить программу Code ENDS END ProgramStart Турбо Ассемблер отмечает в данной программе ошибку, так как в ней делается попытка получить доступ к переменной памяти Var2, когда регистр DS установлен в значение сегмента Data1 (к Var2 нельзя адресоваться, пока DS не будет установлен в значение сег- мента Data2). Важно понимать, что Ассемблер на самом деле не знает, что регистр DS установлен в значение Data1. С помощью директивы


Страницы : 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


adfun.ru









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

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

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

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