Чтение онлайн

на главную - закладки

Жанры

Ассемблер для процессоров Intel Pentium

Магда Юрий

Шрифт:

– DQ – распределение и инициализация 8 байт памяти для каждого из указанных значений. В качестве значения может кодироваться целое число, одно-или двухсимвольная константа, действительное число, кодированное действительное число, оператор DUP, абсолютное выражение, адресное выражение или знак ?. Знак ? обозначает неопределенное значение. Значения, если их несколько, должны разделяться запятыми. Если директива имеет имя, создается переменная типа QW0RD с соответствующим данному значению указателя позиции смещением. Строковая константа не может содержать более двух символов. Последний (или единственный) символ строки хранится в младшем байте слова. Второй байт содержит первый символ или, если строка односимвольная, ноль. Остальные байты заполняются нулями;

– DT – распределение и инициализация 10 байт памяти для каждого из указанных значений. В качестве значения может кодироваться целое выражение, упакованное десятичное число, одно– или двухсимвольная константа, кодированное действительное число, оператор DUP или знак ?. Знак ? обозначает неопределенное значение. Значения, если их несколько, должны разделяться запятыми. Если директива имеет имя, создается переменная типа TW0RD с соответствующим данному значению указателя позиции смещением. Строковая константа не может содержать более двух символов. Последний (или единственный) символ строки хранится в младшем байте слова. Второй байт содержит первый символ или, если строка односимвольная, ноль. Остальные байты заполняются нулями. При обработке директивы DT подразумевается, что константы, содержащие десятичные цифры, представляют собой не целые, а десятичные упакованные числа. Чтобы в случае необходимости определить 10-байтовое целое число, следует после числа указать спецификатор системы счисления (D или d для десятичных чисел, H или h для шестнадцатеричных и так далее). Если в одной директиве определения памяти заданы несколько значений, им распределяются последовательные байты памяти.

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

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

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

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

dbl DB 1

db2 DB 'ABCD'

db3 DB ?

dwl DW 9325

dw2 DW 4*3

dw3 DW 1,'$'

dw4 DW array

ddl DD 'xyz'

dd2 DD 1.5

dql DQ 18446744073709551615

mixl DB 5 DUP(5 DUP(5 DUP(IO)))

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

Рассмотрим способы представления (кодировки) для различных типов данных. Вещественные числа (числа с плавающей точкой) кодируются с использованием одной из форм:

xxxx.xxxx[R]

[[+|-]]хххх.хххх[[Е[[+|-]]хххх];

Здесь х – одна из цифр от 0 до 9.

Кодированные вещественные числа могут использоваться в директивах DD, DQ и DT, например:

al DD 56.23R

а2 DD -45.6R

аЗ DD 211.77E-2

Десятичные числа кодируются так, как показано далее:

[[+|-]]хххх

Здесь х – одна из цифр от 0 до 9.

Следующий тип данных, который мы рассмотрим, – знаковые и строковые константы.

Они могут быть представлены следующим образом:

`сссссс` «ссссс»

Здесь с – символы из допустимого диапазона.

Часть строки исходного текста после символа точки с запятой (если он не является элементом знаковой константы или строки знаков) считается комментарием и ассемблером игнорируется. Комментарии вносятся в программу как поясняющий текст и могут содержать любые знаки до ближайшей комбинации символов возврата каретки и перевода строки (CR/LF).

В языке ассемблера очень часто используются так называемые символические имена, которые существенно упрощают программирование. Описание символических имен выполняется с помощью специальных директив.

Символические имена могут представлять собой число, текст, инструкцию или адрес. Для описания символических имен в языке ассемблера служат директивы EQU, LABEL и директива присваивания =.

Директива присваивания имеет такой формат:

имя=выражение

При помощи этой директивы создается имя, представляющее собой значение, равное текущему значению указанного выражения. Для хранения этого значения память не выделяется. Вместо этого каждое появление указанного имени в программном коде замещается значением выражения.

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

Выражение может быть целым числом, одно– или двухсимвольной строковой константой, константным или адресным выражением. Его значение не должно превышать 65 535.

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

int = 167

stringl = 'ab'

const = 7*4

addrl = stringl

Директива EQU имеет следующий формат:

имя EQU выражение

Директива EQU создает абсолютное имя, псевдоним или текстовое имя путем присваивания имени указанного выражения. Под абсолютным именем здесь подразумевается имя, представляющее собой 16-разрядное значение, а псевдонимом называется ссылка на другое имя. В качестве текстового имени может использоваться строка символов. При компиляции исходного текста каждое появление имени ассемблер замещает текстом или значением выражения, в зависимости от типа выражения. Имя должно быть уникальным и не может быть переопределено. В качестве выражения может задаваться целое число, строковая константа, вещественное число, кодированное вещественное число, мнемоника инструкции, константное или адресное выражение. Выражение, имеющее значением целое число, порождает имя, вхождения которого ассемблер замещает этим значением. Для всех остальных выражений вхождения имени замещаются текстом.

Примеры применения директивы EQU:

k EQU 1024

adr EQU [BP]

de EQU X0R АХ,АХ

cl EQU BYTE PTR

t EQU 'File'

MASM EQU 5.1 + 0.9

Msft EQU <Microsoft>

mat EQU 20*30

Директива LABEL имеет следующий формат:

имя LABEL тип

Директива LABEL порождает новую переменную или метку путем присваивания имени указанного типа и текущего значения указателя позиции. Имя должно быть уникальным и не может быть переопределено. В качестве типа может быть задано одно из следующих ключевых слов: BYTE, WORD, DWORD, QWORD, TBYTE, NEAR, FAR.

Поделиться:
Популярные книги

Черный Маг Императора 11

Герда Александр
11. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Черный Маг Императора 11

Кодекс Охотника. Книга XXIV

Винокуров Юрий
24. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXIV

Инкарнатор

Прокофьев Роман Юрьевич
1. Стеллар
Фантастика:
боевая фантастика
рпг
7.30
рейтинг книги
Инкарнатор

Блуждающие огни

Панченко Андрей Алексеевич
1. Блуждающие огни
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
Блуждающие огни

Отмороженный 7.0

Гарцевич Евгений Александрович
7. Отмороженный
Фантастика:
рпг
аниме
5.00
рейтинг книги
Отмороженный 7.0

Светлая тьма. Советник

Шмаков Алексей Семенович
6. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Светлая тьма. Советник

Глэрд VIII: Базис 2

Владимиров Денис
8. Глэрд
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Глэрд VIII: Базис 2

Лекарь Империи 8

Лиманский Александр
8. Лекарь Империи
Фантастика:
попаданцы
городское фэнтези
аниме
5.00
рейтинг книги
Лекарь Империи 8

Клан

Русич Антон
2. Долгий путь домой
Фантастика:
боевая фантастика
космическая фантастика
5.60
рейтинг книги
Клан

Ружемант

Лисицин Евгений
1. Ружемант
Фантастика:
попаданцы
рпг
аниме
5.00
рейтинг книги
Ружемант

Адвокат Империи 6

Карелин Сергей Витальевич
6. Адвокат империи
Фантастика:
городское фэнтези
аниме
дорама
попаданцы
5.00
рейтинг книги
Адвокат Империи 6

Гранит науки. Том 4

Зот Бакалавр
4. Герой Империи
Фантастика:
боевая фантастика
городское фэнтези
попаданцы
5.00
рейтинг книги
Гранит науки. Том 4

Газлайтер. Том 19

Володин Григорий Григорьевич
19. История Телепата
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Газлайтер. Том 19

Зург 4: Я из будущего

Поселягин Владимир Геннадьевич
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
6.40
рейтинг книги
Зург 4: Я из будущего