321.12K
Categories: programmingprogramming softwaresoftware

Ассемблер

1.

АССЕМБЛЕР

2.

Об ассемблере
Язык ассемблера — это символическое
представление машинного языка.

3.

4.

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

5.

Модель микропроцессора
Программная модель микропроцессора
содержит 32 регистра в той или иной мере
доступных для использования программистом.
Данные регистры можно разделить на две
большие группы:
16 пользовательских регистров;
16 системных регистров.
Большинство
регистров
имеют
определенное функциональное назначение.

6.

7.

Пользовательские регистры
Программист может использовать их при
написании своих программ.
восемь 32-битных регистров, которые могут
использоваться программистами для
хранения данных и адресов (их еще называют
регистрами общего назначения (РОН)).
шесть регистров сегментов.
регистры состояния и управления.

8.

РОН
Регистры
РОН
физически
находятся
в
микропроцессоре внутри арифметико-логического
устройства (АЛУ), их еще называют регистрами АЛУ:
eax/ax/ah/al (Accumulator register) — аккумулятор.
Применяется для хранения промежуточных данных.
В некоторых командах использование этого регистра
обязательно;
ebx/bx/bh/bl (Base register) — базовый регистр.
Применяется для хранения базового адреса
некоторого объекта в памяти;

9.

ecx/cx/ch/cl (Count register) — регистрсчетчик.
Применяется в командах, производящих
некоторые повторяющиеся действия. Его
использование зачастую неявно и скрыто в
алгоритме работы соответствующей команды.
edx/dx/dh/dl (Data register) — регистр данных.
Так же, как и регистр eax/ax/ah/al, он хранит
промежуточные данные.

10.

esi/si (Source Index register) — индекс
источника.
Этот регистр в цепочечных операциях
содержит текущий адрес элемента в
цепочке-источнике;
edi/di (Destination Index register) — индекс
приемника (получателя).
Этот регистр в цепочечных операциях
содержит текущий адрес в цепочкеприемнике.

11.

esp/sp
(Stack
Pointer
register)

регистр
указателя
стека.
Содержит указатель вершины стека в
текущем сегменте стека.
ebp/bp
(Base
Pointer
register)

регистр указателя базы кадра стека.
Предназначен
для
организации
произвольного доступа к данным внутри
стека.

12.

Использование
жесткого
закрепления регистров для некоторых
команд позволяет более компактно
кодировать
их
машинное
представление.
Знание
этих
особенностей позволит вам при
необходимости хотя бы на несколько
байт сэкономить память, занимаемую
кодом программы.

13.

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

14.

команды или инструкции, представляющие собой
символические аналоги машинных команд.
макрокоманды — оформляемые определенным
образом предложения текста программы,
замещаемые во время трансляции другими
предложениями;
директивы, являющиеся указанием транслятору
ассемблера на выполнение некоторых действий. У
директив нет аналогов в машинном представлении;
строки комментариев, содержащие любые
символы, в том числе и буквы русского алфавита.
Комментарии игнорируются транслятором.

15.

16.

Допустимыми символами при написании
текста программ являются:
все латинские буквы: A—Z, a—z. При этом
заглавные и строчные буквы считаются
эквивалентными;
цифры от 0 до 9;
знаки ?, @, $, _, &;
разделители , . [ ] ( ) < > { } + / * % ! ' " ? \ = # ^.

17.

Практически каждое предложение содержит
описание объекта, над которым или при помощи
которого выполняется некоторое действие. Эти
объекты называются операндами.
Операнды — это объекты (некоторые
значения, регистры или ячейки памяти), на
которые действуют инструкции или директивы,
либо это объекты, которые определяют или
уточняют действие инструкций или директив.

18.

Возможно провести следующую
классификацию операндов:
постоянные, или непосредственные, операнды
адресные операнды
перемещаемые операнды
счетчик адреса
регистровый операнд
базовый и индексный операнды
структурные операнды
Записи

19.

Постоянные или
непосредственные операнды
Число, строка, имя или выражение,
имеющие некоторое фиксированное значение.
Имя не должно быть перемещаемым, то есть
зависеть от адреса загрузки программы в
память.

20.

Адресные операнды
Адресные операнды — задают физическое
расположение операнда в памяти с помощью
указания
двух
составляющих
адреса: сегмента и смещения.
mov ax,0000h
mov ds,ax
mov ax,ds:0000h
;записать слово в ax
из области памяти
по
;физическому адресу
0000:0000

21.

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

22.

Операторы
Арифметические операторы. К ним относятся:
унарные “+” и “–”;
бинарные “+” и “–”;
умножения “*”;
целочисленного деления “/”;
получения остатка от деления “mod”.
Операторы сдвига выполняют сдвиг выражения
на указанное количество разрядов
Операторы сравнения (возвращают значение
“истина”
или
“ложь”)
предназначены
для
формирования логических выражений . Логическое
значение “истина” соответствует цифровой единице, а
“ложь” — нулю.

23.

Типы данных
При
программировании
на
языке
ассемблера используются данные следующих
типов:
1.Непосредственные
данные,
представляющие
собой
числовые
или
символьные значения, являющиеся частью
команды.
Непосредственные
данные
формируются программистом в процессе
написания программы для конкретной команды
ассемблера.

24.

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

25.

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

26.

С точки зрения размерности (физическая
интерпретация),
микропроцессор
аппаратно
поддерживает следующие основные типы данных:
байт — восемь последовательно расположенных
битов, пронумерованных от 0 до 7, при этом бит 0
является самым младшим значащим битом;
слово — последовательность из двух байт, имеющих
последовательные адреса. Размер слова — 16 бит;
биты в слове нумеруются от 0 до 15. Байт,
содержащий нулевой бит, называется младшим
байтом, а байт, содержащий 15-й бит - старшим
байтом.
Микропроцессоры
Intel
имеют
важную
особенность — младший байт всегда хранится по
меньшему адресу. Адресом слова считается адрес
его младшего байта. Адрес старшего байта
может быть использован для доступа к старшей
половине слова.

27.

двойное слово — последовательность из четырех байт (32
бита), расположенных по последовательным адресам.
Нумерация этих бит производится от 0 до 31. Слово,
содержащее нулевой бит, называется младшим словом, а
слово, содержащее 31-й бит, - старшим словом. Младшее
слово хранится по меньшему адресу. Адресом двойного слова
считается адрес его младшего слова. Адрес старшего слова
может быть использован для доступа к старшей половине
двойного слова.
учетверенное слово — последовательность из восьми байт (64
бита), расположенных по последовательным адресам.
Нумерация бит производится от 0 до 63. Двойное слово,
содержащее нулевой бит, называется младшим двойным
словом, а двойное слово, содержащее 63-й бит, — старшим
двойным словом. Младшее двойное слово хранится по
меньшему адресу. Адресом учетверенного слова считается
адрес его младшего двойного слова. Адрес старшего двойного
слова может быть использован для доступа к старшей
половине учетверенного слова.
English     Русский Rules