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

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

Жанры

Ассемблер для процессоров 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.

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

Рассказы

Стаут Рекс
Детективы:
классические детективы
5.00
рейтинг книги
Рассказы

Герой

Бубела Олег Николаевич
4. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.26
рейтинг книги
Герой

Я до сих пор не бог. Книга XXXVII

Дрейк Сириус
37. Дорогой барон!
Фантастика:
аниме
попаданцы
5.00
рейтинг книги
Я до сих пор не бог. Книга XXXVII

"Фантастика 2023-139". Компиляция. Книги 1-20

Поселягин Владимир Геннадьевич
Фантастика 2023. Компиляция
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Фантастика 2023-139. Компиляция. Книги 1-20

Легат

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

Эволюционер из трущоб. Том 11

Панарин Антон
11. Эволюционер из трущоб
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Эволюционер из трущоб. Том 11

#Бояръ-Аниме. Газлайтер. Том 24

Володин Григорий Григорьевич
24. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.25
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 24

Киберпространство

Ливадный Андрей Львович
43. Экспансия: История Галактики
Фантастика:
космическая фантастика
7.69
рейтинг книги
Киберпространство

Сёгун

Клавелл Джеймс
Азиатская сага
Приключения:
исторические приключения
прочие приключения
9.41
рейтинг книги
Сёгун

Том 12. Из 'Автобиографии'. Из записных книжек 1865-1905. Избранные письма

Твен Марк
Проза:
классическая проза
5.00
рейтинг книги
Том 12. Из 'Автобиографии'. Из записных книжек 1865-1905. Избранные письма

Железная маска (сборник)

Дюма-отец Александр
Приключения:
исторические приключения
5.00
рейтинг книги
Железная маска (сборник)

Голубая Сфера

Мак Иван
21. Легенды Вселенной
Фантастика:
боевая фантастика
3.40
рейтинг книги
Голубая Сфера

Возвращение Томаса. Башня-2 (сборник)

Никитин Юрий Александрович
Фантастика:
фэнтези
7.00
рейтинг книги
Возвращение Томаса. Башня-2 (сборник)

Долина совести

Дяченко Марина и Сергей
Фантастика:
социально-философская фантастика
8.64
рейтинг книги
Долина совести