Понятие типы данных носит двойственный характер: с точки зрения аппаратной поддержки и с точки зрения логической организации данных. С точки зрения аппаратной поддержки процессор поддерживает следующие типы данных:
Байт – объявляется директивой db в сегменте данных
Слово (2 байта) – объявляется директивой dw в сегменте данных
Двойное слово (4 байта) – объявляется директивой dd в сегменте данных
Учетверенное слово (8 байт) – объявляется директивой dq в сегменте данных (начиная с процессора I80486).
Необходимо отметить, что младший байт каждой переменной занимает младший адрес в памяти, этот адрес и является адресом операнда (переменной!)
С точки зрения логической организации данных, данные могут быть следующих типов:
Цифровые типы данных, которые делятся на целые числа без знака, целые числа со знаком и числа с плавающей запятой.
Целые – числа в диапазоне от 0 до 255 (1 байт)
Со знаком – числа в диапазоне от -128 до +127 (1 байт). Необходимо отметить, что числа со знаком представлены в виде дополнительного кода.
Числа с плавающей запятой – числа в диапазонеот 1.18∙10–38 до 3.40∙10 38 длиной в 32 бита и с точностью 24 бита. Эти числа хранятся в специальных регистрах данных с плавающей запятой (регистры FPU).
Указатели на память:
Ближний указатель (near) – 32-х или 16-ти разрядный адрес, представляющий собой смещение относительно начала сегмента. Его также называют эффективным (effective) адресом. Этот указатель используется в плоской модели памяти и в сегментной модели памяти, если нет необходимости выходить за пределы сегмента.
Дальний указатель (far) – 48-и разрядный адрес, состоящий из 16-и разрядного номера сегмента (селектора) и 32-х разрядного смещения внутри этого сегмента. Для 64-х разрядных операндов дальний указатель содержит 80 бит: 16-и разрядный селектор сегмента и 64-х разрядное смещение.
Битовое поле – представляет собой непрерывную последовательность битов, в которой каждый бит является независимым и может рассматриваться как отдельная переменная. Битовое поле может начинаться с любого бита в байте и может содержать до 32 битов. Доступ к битам и обработка битовых полей осуществляется с помощью специальных команд.
Двочно-десятичные типы данных, т.е.десятичные числа, записанные в двоичной системе счисления делятся на две группы:
Упакованные двоично-десятичные – каждая десятичная цифра записывается в одну тетраду
Неупакованные двоично-десятичные – каждаядесятичная цифра записывается в один байт
Массив – структурированный тип данных, состоящий из некоторого числа элементов одного типа. Несмотря на то, что массивы могут быть в общем случае n-мерными, необходимо четко представлять себе, что элементы массива располагаются в памяти последовательно друг за другом. Т.е. физически, двумерный или трехмерный массив ничем не отличается от одномерного массива. Доступ к элементам массива осуществляется с помощью индексов (смещения относительно начала массива).
Например:
Mass db 5,2,3
db 1,4,6
В массиве с именем Mass элемент «5» будет иметь индекс равный 0, элемент «2» – индекс равный 1, элемент «4» – индекс равный 4. И хотя пользователь пытался создать двумерный массив к массиву Mass можно обратиться как к одномерному. Чтобы обращаться к массиву Mass как к двумерному массиву необходимо использовать 2 индекса: адрес начала строки элементов массива и смещение элемента относительно адреса начала строки.
Структуры – тип данных, состоящий из фиксированного числа элементов разного типа. Перед использованием структуры необходимо задать её шаблон:
<имя_структуры> STRUC
<описание_полей>
< имя_структуры >ENDS
В отличие от массива элементы структуры могут быть разных типов. Обращение к полям структуры осуществляется по имени переменной и поля структуры, разделенным точкой.
Например:
Объявление шаблона:
Data STRUC
type db 30 dup (“”); описание типа данных, dup – оператор дублирования
znachen dw; значение типа данных
ENDS
Присвоение значений переменной типа Data:
Danny1 data <”какие-то данные”,'10202'>;
Danny2 data <”новые данные”,'393032'>;
Обращение к значениям переменной типа Data:
Mov ax,Danny1.znachen