Справочник по языку Ассемблера IBM PC



         

Типы данных - часть 5


  • выражение или константу, принимающую значение из диапазона:
    • для i8086:
      • для чисел со знаком –32 768...+32 767;
      • для чисел без знака 0...65 535;
      • для i386 и выше:
        • для чисел со знаком –2 147 483 648...+2 147 483 647;
        • для чисел без знака 0...4 294 967 295;
        • Рис. 4. Окно дампа памяти для программы листинга 1

          Обсудим рис. 4. На нем вы видите данные вашего сегмента в двух представлениях: шестнадцатеричном и символьном. Видно, что со смещением 0000 расположены символы, входящие в строку message. Она занимает 34 байта. После нее следует байт, имеющий в сегменте данных символическое имя perem_1, содержимое этого байта offh.
          Теперь обратите внимание на то, как размещены в памяти байты, входящие в слово, обозначенное символическим именем perem_2. Сначала следует байт со значением 7fh, а затем со значением 3ah. Как видите, в памяти действительно сначала расположен младший байт значения, а затем старший.
          Теперь посмотрите и самостоятельно проанализируйте размещение байтов для поля, обозначенного символическим именем perem_3.
          Оставшуюся часть сегмента данных вы можете теперь проанализировать самостоятельно.
          Остановимся лишь на двух специфических особенностях использования директив резервирования и инициализации памяти. Речь идет о случае использования в поле операндов директив dw и dd символического имени из поля имя этой или другой директивы резервирования и инициализации памяти. В нашем примере сегмента данных это директивы с именами adr и adr_full.
          Когда транслятор встречает директивы описания памяти с подобными операндами, то он формирует в памяти значения адресов тех переменных, чьи имена были указаны в качестве операндов. В зависимости от директивы, применяемой для получения такого адреса, формируется либо полный адрес (директива dd) в виде двух байтов сегментного адреса и двух байтов смещения, либо только смещение (директива dw). Найдите в дампе на рис. 4 поля, соответствующие именам adr и adr_full, и проанализируйте их содержимое.

          Любой переменной, объявленной с помощью директив описания простых типов данных, ассемблер присваивает три атрибута:

          1. Сегмент (seg) — адрес начала сегмента, содержащего переменную;
          2. Смещение (offset) в байтах от начала сегмента с переменной;
          3. Тип (type) — определяет количество памяти, выделяемой переменной в соответствии с директивой объявления переменной.

          Получить и использовать значение этих атрибутов в программе можно с помощью рассмотренных нами операторов ассемблера ,

          и .

          TASM поддерживает следующие сложные типы данных:

          • ;
          • ;
          • ;
          • .

          Разберемся более подробно с тем, как определить данные этих типов в программе и организовать работу с ними.




          Содержание  Назад  Вперед