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




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

ASSUME вы указали Турбо Ассемблеру, что нужно сделать такое допу-
щение.  Директива ASSUME дает вам способ в любой момент  сообщить
Ассемблеру о значении сегментного регистра,  после чего Турбо Ас-
семблер будет сообщать вам,  если вы пытаетесь сделать  невозмож-
ное.

     Однако Турбо Ассемблер не может перехватывать  все  подобные
ошибки.  Когда  в ссылке на память используется именованная пере-
менная памяти (такая, как Var1 и Var2 в предыдущем примере), Тур-
бо  Ассемблер  может проверить допустимость этой ссылки,  так как
каждая именованная переменная памяти явным образом связана с сег-
ментом.  Невозможно сообщить Турбо Ассемблеру,  к какому сегменту
пытается обратиться инструкция:

        mov     al,[bx]

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

     Если в  данный  момент сегментный регистр не указывает ни на
какой именованный сегмент,  то чтобы сообщить об этом Ассемблеру,
можно  использовать  в  директиве  ASSUME ключевое слово NOTHING.
Например:

        .
        .
        .
        mov     ax,0b800h
        mov     ds,ax
        ASSUME  ds:NOTHING
        .
        .
        .

     Здесь регистр DS устанавливается таким образом, чтобы указы-
вать на цветной графический экран, а затем Турбо Ассемблеру сооб-
щается, что регистр DS не указывает ни на какой именованный  сег-
мент. Вот еще один способ ссылки на цветной графический экран:

        .
        .
        .
ColorTextSeg    SEGMENT AT 0B8000h
ColorTextMemory LABEL   BYTE
ColorTextSeg    ENDS
        .
        .
        .
        mov     ax,ColorTextSeg
        mov     ds,ax
        ASSUME  ds:ColorTextSeg
        .
        .
        .

     Обратите внимание, что в директиве AT,  которая  следует  за
директивой SEGMENT, задается явный начальный адрес сегмента.

     Сделаем последнее замечание по директиве 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,Data2
        mov      es,ax       ; установить ES в Data2
        ASSUME   ES:Data2
        mov      ax,[Var2]   ; загрузить Var2 в AX -
                             ; Турбо Ассемблер укажет
                             ; процессору 8086, что
                             ; загрузку нужно выполнять
                             ; относительно ES, так как
                             ; к Var2 нельзя получить
                             ; доступ относительно DS
        .
        .
        .
        mov      ah,4ch      ; функция DOS завершения
                             ; работы программы





int 21h ; завершить программу Code ENDS END ProgramStart Данный пример должен быть вам знаком: это модифицированная версия фрагмента программы, использованного нами ранее для того, чтобы показать, как директива ASSUME позволяет Турбо Ассемблеру указать вам, когда вы пытаетесь использовать недопустимую ссылку на память. Однако в данном примере сообщение об ошибке не выво- дится. Но это не означает, что Турбо Ассемблер позволяет вам сде- лать ошибку. Он модифицирует инструкцию: mov ax,[Var2] для доступа к Var2 относительно сегментного регистра ES, а не сегментного регистра DS. Это происходит по следующим причинам. Две директивы ASSUME информируют Турбо Ассемблер о том, что регистр DS установлен в значение сегмента Data1, а ES установлен в значение сегмента Data2. Турбо Ассемблер совершенно правильно заключает, что к Var2 нельзя получить доступ относительно регистра DS, однако Var2 дос- тупно относительно сегментного регистра ES. В итоге Турбо Ассем- блер включает перед инструкцией MOV специальный код (префикс пе- реопределения сегмента), чтобы указать процессору 8086, что вмес- то сегментного регистра DS нужно использовать сегментный регистр ES. Какое все это имеет для вас значение? Это значит, что если вы корректно используете директивы ASSUME, позволяя Турбо Ассем- блеру узнать о текущих установленных для регистров DS и ES значе- ниях, то он может автоматически вам помочь, проверяя возможность доступа к именованным переменным в памяти и в некоторых случаях даже может выполнить автоматическую корректировку сегмента. Общее обсуждение префиксов переопределения сегментов и стан- дартные директивы определения сегментов обсуждаются в Главе 10. Стандартные или упрощенные директивы определения сегментов? ----------------------------------------------------------------- Теперь, когда вы познакомились и с упрощенными, и со стан- дартными директивами определения сегментов, возникает вопрос, ка- кой набор директив определения сегментов следует использовать? Ответ зависит от типа выполняемого программирования на Ассембле- ре. Если вы компонуете модули на Ассемблере с языками высокого уровня, почти всегда желательно использовать упрощенные директивы определения сегментов. Эти директивы выполняют всю работу по наи- менованию сегментов и все функции, связанные с моделью памяти и организации интерфейса с языками высокого уровня. Если вы пишете большие автономные программы на Ассемблере, используя много сегментов и смешанные модели памяти (код ближнего и дальнего типа и/или данные ближнего и дальнего типа в одной программе), то вам потребуется использовать стандартные директивы определения сегментов, что позволит вам полностью управлять типом сегмента, выравниванием, наименованием сегментов и способом их комбинирования (сочетания). Кратко можно сформулировать следующее правило: используйте упрощенные директивы определения сегментов, пока вы не обнаружи- те, что вам необходимо получить полное управление определениями сегментов, которое может обеспечить только стандартное (полное) определение сегментов. Выделение данных ----------------------------------------------------------------- Теперь, когда вы знаете, как создавать сегменты, давайте рассмотрим, как можно заполнить эти сегменты осмысленными данны- ми. Сегмент стека проблемы не представляет: там находится стек, а к стеку вы можете обратиться с помощью инструкций PUSH и POP и адресоваться через регистр BP. Сегмент кода заполняется инструк- циями, которые генерируются в соответствии с мнемоникой инструк- ций вашей программы, поэтому проблемы здесь также нет. Остается сегмент данных. В Турбо Ассемблере предусмотрено множество способов определения переменных в сегменте данных, как инициализируемых некоторым значением, так и неинициализированных. Чтобы понять, какие данные позволяет вам определять Турбо Ассемб- лер, мы должны сначала немного рассказать вам основных типах дан- ных Ассемблера. Биты, байты и основания ----------------------------------------------------------------- Основной единицей памяти компьютера является бит. В бите мо- жет храниться значение 0 или 1. Бит сам по себе не особенно поле- зен. Процессор 8086 не работает непосредственно с битами, он ра- ботает с байтами, которые состоят из 8 бит. Так как бит на самом деле представляет собой цифру с основа- нием 3, байт содержит 8-разрядное число с основанием 2. Наиболь- шие возможные числа с основанием 2 - это следующие числа: 2 в степени 0: 1 2 в степени 1: 2 2 в степени 2: 4


Страницы : 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
Форумы политика, лучшие анекдоты
знакомства.