Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Скалярные данные





Директива DB обеспечивает распределение и инициализацию 1 байта памяти для каждого из указанных значений. В качестве значения может кодироваться целое число, строковая константа, оператор DUP, абсолютное выражение или знак?. Знак? обозначает неопределенное значение. Значения, если их несколько, должны разделяться запятыми.

Если директива имеет имя, создается переменная типа BYTE с соответствующим данному значению указателя позиции смещением.

Строковая константа может содержать столько символов, сколько помещается на одной строке.

 

Символы строки хранятся в памяти в порядке их следования, то есть, 1-й символ имеет самый младший адрес, последний — самый старший.

Директива DW обеспечивает распределение и инициализацию слова памяти (2 байта) для каждого из указанных значений. В качестве значения может кодироваться целое число, 1- или 2-х символьная константа, оператор DUP, абсолютное выражение, адресное выражение или знак?. Знак? обозначает неопределенное значение. Значения, если их несколько, должны разделяться запятыми.

Если директива имеет имя, создается переменная типа WORD с соответствующим данному значению указателя позиции смещением.

Строковая константа не может содержать более 2-х символов. Последний (или единственный) символ строки хранится в младшем байте слова. Старший байт содержит первый символ или, если строка односимвольная, 0.

Директива DD обеспечивает распределение и инициализацию двойного слова памяти (4 байта) для каждого из указанных значений. В качестве значения может кодироваться целое число, 1- или 2-х символьная константа, действительное число, кодированное действительное число, оператор DUP, абсолютное выражение, адресное выражение или знак?.

Знак? обозначает неопределенное значение. Значения, если их несколько, должны разделяться запятыми.

Если директива имеет имя, создается переменная типа DWORD с соответствующим данному значению указателя позиции смещением.

Строковая константа не может содержать более 2-х символов. Последний (или единственный) символ строки хранится в младшем байте слова. Второй байт содержит первый символ или, если строка односимвольная, 0. Остальные байты заполняются нулями.

Директива DQ обеспечивает распределение и инициализацию 8 байтов памяти для каждого из указанных значений. В качестве значения может кодироваться целое число, 1- или 2-х символьная константа, действительное число, кодированное действительное число, оператор DUP, абсолютное выражение, адресное выражение или знак?.

Знак? обозначает неопределенное значение. Значения, если их несколько, должны разделяться запятыми.

Если директива имеет имя, создается переменная типа QWORD с соответствующим данному значению указателя позиции смещением.

Строковая константа не может содержать более 2-х символов. Последний (или единственный) символ строки хранится в младшем байте слова. Второй байт содержит первый символ или, если строка односимвольная, 0. Остальные байты заполняются нулями.

Директива DT обеспечивает распределение и инициализацию 10 байтов памяти для каждого из указанных значений. В качестве значения может кодироваться целое выражение, упакованное десятичное число, 1- или 2-х символьная константа, кодированное действительное число, оператор DUP или знак?. Знак? обозначает неопределенное значение. Значения, если их несколько, должны разделяться запятыми.

Если директива имеет имя, создается переменная типа TWORD с соответствующим данному значению указателя позиции смещением.

Строковая константа не может содержать более 2-х символов. Последний (или единственный) символ строки хранится в младшем байте слова. Второй байт содержит первый символ или, если строка односимвольная, 0. Остальные байты заполняются нулями.

При обработке директивы DT подразумевается, что константы, содержащие десятичные цифры, представляют собой не целые, а десятичные упакованные числа. В случае необходимости определить 10-байтовое целое число следует после числа указать спецификатор системы счисления (D или d для десятичных чисел, H или h для 16-ричных).

Если в одной директиве определения памяти заданы несколько значений, им распределяются последовательные байты памяти.

Во всех директивах определения памяти в качестве одного из значений может быть задан оператор DUP.

Он имеет следующий формат:

счетчик DUP (значение,...)

Указанный в скобках () список значений повторяется многократно в соответствии со значением счетчика. Каждое значение в скобках может быть любым выражением, имеющим значением целое число, символьную константу или другой оператор DUP (допускается до 17 уровней вложенности операторов DUP). Значения, если их несколько, должны разделяться запятыми.


Оператор DUP может использоваться не только при определении памяти, но и в других директивах.

Примеры директив определения скалярных данных:

integer1 DB 16

string1 DB 'abCDf'

empty1 DB?

integer2 DW 16728

contan2 DW 4*3

multip2 DW 1,'$'

arr2 DW array

string3 DD 'ab'

real3 DD 1.5

encode3 DD 3F000000r

high3 DD 4294967295

charu DQ 'b'

encodeu DQ 3F00000000000000r

highu DQ 18446744073709551615

pack5 DT 1234567890

real5 DT 1.5

mult5 DT 'a',3F000000000000000000r

high5 DT 1208925819614629174706175d

db6 DB 5 DUP(5 DUP(5 DUP(10)))

dw6 DW DUP(1,2,3,4,5)

Записи

Запись представляет собой набор полей бит, объединенных одним именем. Каждое поле записи имеет собственную длину, исчисляемую в битах, и не обязана занимать целое число байтов.

Объявление записи в программе на языке Ассемблера включает в себя 2 действия:

1. Объявление шаблона или типа записи директивой RECORD.

2. Объявление собственно записи.

Формат директивы RECORD:

имя-записи RECORD

имя-поля:длина[[=выражение]],...

Директива RECORD определяет вид 8- или 16-битовой записи, содержащей одно или несколько полей.

Имя-записи представляет собой имя типа записи, которое будет использоваться при объявлении записи. Имя-поля и длина (в битах) описывают конкретное поле записи. Выражение, если оно указано задает начальное (умалчиваемое) значение поля.

Описания полей записи в директиве RECORD, если их несколько, должны разделяться запятыми. Для одной записи может быть задано любое число полей, но их суммарная длина не должна превышать 16 бит.

Длина каждого поля задается константой в пределах от 1 до 16. Если общая длина полей превышает 8 бит, Ассемблер выделяет под запись 2 байта, в противном случае — 1 байт.

Если задано выражение, оно определяет начальное значение поля. Если длина поля не меньше 7 бит, в качестве выражения может быть использован символ в коде ASCII. Выражение не должно содержать ссылок вперед.

Внутри записи поля размещаются слева направо в порядке описания в директиве RECORD. Поэтому объявленное первым поле содержит самые значимые биты записи, если рассматривать ее как двоичное число. Если суммарная длина полей не равна 8 или 16, запись расширяется до целой границы байта нулевыми битами слева, и, таким образом, последний бит последнего поля всегда является самым младшим битом записи.

При обработке директивы RECORD формируется шаблон записи, а сами данные создаются при объявлении записи, которое имеет следующий вид:

[[имя]] имя-записи <[[значение,...]]>

По такому объявлению создается переменная типа записи с 8- или 16-битовым значением и структурой полей, соответствующей шаблону, заданному директивой RECORD с именем имя-записи.

Имя задает имя переменной типа записи. Если имя опущено, MASM распределяет память, но не создает переменную, которую можно было бы использовать для доступа к записи.

В скобках <> указывается список значений полей записи. Значения в списке, если их несколько, должны разделяться запятыми. Каждое значение может быть целым числом, строковой константой или выражением и должно соответствовать длине данного поля. Для каждого поля может быть задано одно значение.


Скобки <> обязательны, даже если начальные значения не заданы.

Если в качестве значения используется оператор DUP, в скобки <> следует заключать список значений оператора DUP. Следует иметь ввиду, что при использовании оператора DUP создается несколько переменных типа запись.

Задавать значения всех полей записи необязательно. Если Ассемблер вместо значения обнаружит левый пробел, будет использовано начальное значение поля, заданное директивой RECORD, а если оно и там опущено, значение поля будет не определено.







Date: 2015-05-22; view: 470; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.01 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию