
- •Основы алгоритмизации и программирования
- •29 Декабря 2011, протокол № 4
- •Введение
- •Этапы развития эвм
- •Поколения эвм
- •Машинно-ориентированные языки программирования
- •Архитектура эвм
- •Микропроцессоры intel
- •Набор регистров
- •Регистры общего назначения
- •Сегментные регистры
- •Регистры состояния и управления
- •Организация памяти
- •Сегментная организация памяти
- •Типы данных
- •Символы
- •Целые числа
- •Указатель на память
- •Цепочки
- •Вещественые числа
- •Двоично-десятичные числа (bcd)
- •Формат команд
- •Обработка прерываний
- •Int тип_прерывания
- •Синтаксис ассемблера
- •Алфавит ассемблера
- •Директивы сегментации
- •Упрощённые директивы сегментации
- •Директивы резервирования и инициализации данных
- •Операнды
- •Способы задания операндов Прямая адресация
- •Косвенная адресация
- •Косвенная базовая адресация
- •Косвенная базовая адресация со смещением
- •Косвенная индексная адресация со смещением
- •Косвенная базовая индексная адресация
- •Косвенная базовая индексная адресация со смещением
- •Операторы
- •Функциональная классификация машинных команд
- •Команды пересылки данных Команды общего назначения
- •Работа с адресами и указателями
- •Преобразование данных
- •Xlat [адрес_таблицы_перекодировки]
- •Ввод из порта и вывод в порт
- •Работа со стеком
- •Арифметические команды Форматы арифметических данных
- •Арифметические операции над целыми двоичными числами
- •Логические команды
- •Команды передачи управления
- •Команда безусловного перехода
- •Условные переходы
- •Организация циклов
- •Основы алгоритмизации и программирования
Директивы резервирования и инициализации данных
Для описания простых типов данных используются специальные директивы резервирования и инициализации данных, которые являются указаниями транслятору на выделение определенного объема оперативной памяти.
В таблице 4 представлены поддерживаемые TASM директивы резервирования и инициализации данных.
Таблица 5 – Директивы инициализации и резервирования данных
Длина, байт |
Директива инициализации |
Описание |
1 |
DB (Define Byte) |
определить байт |
2 |
DW (Define Word) |
определить слово |
4 |
DD (Define Double word) |
определить двойное слово |
6 |
DF (Define Far word) |
определить дальнее слово |
6 |
DP (Define Pointer) |
определить указатель |
8 |
DQ (Define Quarted word) |
определить учетверенное слово |
10 |
DT (Define Ten bytes) |
определить десять байт |
В общем случае все директивы объявления данных имеют такой синтаксис:
[имя] директива выражение
Синтаксис параметра выражение может быть следующим:
? – неинициализированные данные;
Пример:
N dw ?
Per1 db ?
значение инициализации – значение элемента данных, которое будет занесено в память после загрузки программы;
Пример:
z dd 0
x1 db ‘Hello’
a dw 0,1,2,3,4,5,6,7,8,9
количество_повторов DUP (dup_выражение [,dup_выражение ]) – позволяет повторить занесение в физическую память выражения в скобках столько раз, сколько повторений указано (объвление и инициализация массивов);
Пример:
arr dt 10 dup (?)
mas db 250 dup (‘ ’)
некоторое символическое имя метки или ячейки памяти в сегменте данных.
Пример:
y dd a
b dw mas
Для описания двоично-десятичных чисел в программе используются только две директивы – db и dt. Например:
per1 db 2,3,4,6,8,2 ; неупакованное BCD число 286432
per2 dt 9875645 ; упакованное BCD число 987545
Операнды
Операнды – это объекты, над которыми или при помощи которых выполняются действия, задаваемые инструкциями или директивами.
Машинные команды могут либо совсем не иметь операндов, либо иметь один или два операнда. Большинство команд требует двух операндов, один из которых является источником, а другой – приемником (операндом назначения).
В двухоперандной машинной команде возможны следующие сочетания операндов:
регистр — регистр;
регистр — память;
память — регистр;
непосредственный операнд — регистр;
непосредственный операнд — память.
Здесь важно подчеркнуть, что один операнд может располагаться в регистре или памяти, а второй операнд обязательно должен находиться в регистре или непосредственно в команде. Непосредственный операнд может быть только источником.
Для приведенных ранее правил сочетания типов операндов есть исключения, которые касаются:
команд работы с цепочками, которые могут перемещать данные из памяти в память;
команд работы со стеком, которые могут переносить данные из памяти в стек, также находящийся в памяти;
команд типа умножения, которые, кроме операнда, указанного в команде, неявно используют еще и второй операнд.
Операндами могут быть числа, регистры, ячейки памяти, символьные идентификаторы. При необходимости для расчета некоторого значения или определения ячейки памяти, на которую будет воздействовать данная команда или директива, используются выражения, то есть комбинации чисел, регистров, ячеек памяти, идентификаторов с арифметическими, логическими, побитовыми и атрибутивными операторами.
Классификация операндов, поддерживаемых транслятором ассемблера.
Операнд задается неявно на микропрограммном уровне. В этом случае команда явно не содержит операндов. Алгоритм выполнения команды использует некоторые объекты по умолчанию (регистры, флаги в EFLAGS и т. д.).
Операнд задается в самой команде (непосредственный операнд). Это может быть число, строка, имя или выражение, имеющее некоторое фиксированное (константное) значение. Физически непосредственный операнд находится в коде команды, то есть является ее частью.
Адресные операнды задают физическое расположение операнда в памяти путем указания двух составляющих адреса: сегмента и смещения.
Перемещаемые операнды – любые символьные имена, представляющие некоторые адреса памяти. Эти адреса могут обозначать местоположение в памяти некоторой инструкции (если операнд – метка) или данных (если операнд – имя области памяти в сегменте данных).
Счетчик адреса — специфический вид операнда. Он обозначается знаком $. Специфика этого операнда в том, что когда транслятор ассемблера встречает в исходной программе этот символ, то он подставляет вместо него текущее значение счетчика адреса.
Регистровый операнд — это просто имя регистра. В программе на ассемблере можно использовать имена всех регистров общего назначения и некоторых системных регистров.
Операнд – порт ввода-вывода. Помимо адресного пространства оперативной памяти процессор поддерживает адресное пространство ввода-вывода, которое используется для доступа к устройствам ввода-вывода. Объем адресного пространства ввода-вывода составляет 64 Кбайт. Для любого устройства компьютера в этом пространстве выделяются адреса. Конкретное значение адреса в пределах этого пространства называется портом ввода-вывода.
Структурные операнды используются для доступа к конкретному элементу сложного типа данных, называемого структурой.
Записи (аналогично структурному типу) используются для доступа к битовому полю некоторой записи.
Операнд находится в стеке.
Операнд располагается в памяти. Это наиболее сложный и в то же время наиболее гибкий способ задания операндов. Он позволяет реализовать прямой и косвенный варианты адресации, являющиеся основными видами адресации.