1.24M
Категория: ПрограммированиеПрограммирование

Метки, символьные имена и константы

1.

04.03.2023
Метки, символьные
имена и константы
Предмет: МДК 01.04 Системное программирование

2.

Хранения
инициализированных
данных
Синтаксис стейтмента* выделения памяти для
инициализированных данных следующий:
[имя_переменной]
директива_определения
начальное_значение [,начальное_значение]...
Где
имя_переменной
является
идентификатором для каждого пространства
хранения данных. Ассемблер связывает значение
смещения с именем каждой переменной,
определенной в сегменте данных.
*Cтейтмент (англ. "statement") – это
наиболее распространённый тип
инструкций в программах. Это всё, что
заканчивается точкой с запятой (;) или
является управляющей конструкцией (но не
само ключевое слово).

3.

Есть 5 основных форм директивы
определения:
Пространство для хранения
Директива
Цель
DB
Определяет Byte
Выделяет 1 байт
DW
Определяет Word
Выделяет 2 байта
DD
Определяет Doubleword
Выделяет 4 байта
DQ
Определяет Quadword
Выделяет 8 байт
DT
Определяет 10 Byte
Выделяет 10 байт

4.

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

5.

• каждый байт символа хранится как его ASCIIзначение в шестнадцатеричном формате;
• каждое десятичное значение автоматически
конвертируется в 16-битный двоичный эквивалент и
сохраняется в виде шестнадцатеричного числа;
• процессор использует прямой порядок байтов;
• отрицательные числа конвертируются в форму
«two’s complement»;
• короткие и длинные числа типа с плавающей точкой
представлены с использованием 32 или 64 бит,
соответственно.

6.

Программа показывающая использование директивы определения:

7.

Что является
результатом
данной
программы?
Кто правильно ответил: у, тому 5.

8.

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

9.

Есть 5 основных форм директив резервирования:
Директива
Цель
RESB
Резервирует Byte
RESW
Резервирует Word
RESD
Резервирует Doubleword
RESQ
Резервирует Quadword
REST
Резервирует 10 Byte

10.

Можно иметь несколько стейтментов определения данных в программе.
Например:
1 choice DB 'Y' ; ASCII-значение для y = 79H
2 number1 DW 12345 ; 12345D = 3039H
3 number2 DD 123456789 ; 123456789D = 75BCD15H
Ассемблер выделяет смежную память для нескольких определений переменных.

11.

Несколько
инициализац
ий
Директива TIMES позволяет выполнить
несколько инициализаций одного значения.
Например, массив с именем marks длиной 9 может
быть определен и инициализирован нулем
следующим образом:
1 marks TIMES 9 DW 0
Директива TIMES полезна при определении
массивов и таблиц.

12.

Что выводит следующая программа?

13.

Определение
констант
NASM предоставляет
несколько директив,
определяющих константы:
директива EQU;
директива %assign;
директива %define.

14.

Директива EQU используется для определения
констант. Её синтаксис следующий:
ИМЯ_КОНСТАНТЫ EQU-выражение
Например:
Директива EQU
TOTAL_STUDENTS equ 50
Затем можно использовать эту константу в
программе:
mov ecx, TOTAL_STUDENTS
cmp eax, TOTAL_STUDENTS

15.

Операндом стейтмента EQU может быть выражение:
1 LENGTH equ 20
2
WIDTH equ 10
3
AREA equ length * width
Вышеприведенный фрагмент кода определит AREA как 200.

16.

17.

Директива %assign может быть использована для
определения числовых констант. Эта директива
допускает переопределение. Например, можно
определить константу TOTAL следующим образом:
Директива
%assign
1 %assign TOTAL 10
Затем в коде она переопределяется:
1 %assign TOTAL 20
Эта директива является чувствительной к
регистру.

18.

Директива
%define
Директива %define позволяет определять как
числовые, так и строковые константы. Эта
директива похожа на директиву #define в языке С.
Например, можно определить константу PTR
следующим образом:
1 %define PTR [EBP+4]
Вышеприведенный код заменяет PTR на [EBP+4].
Эта директива также допускает переопределение и
является чувствительной к регистру.
English     Русский Правила