- •Структура мп ix86 фирмы Intel
- •Регистры общего назначения (регистры данных)
- •Регистры-указатели
- •Регистры сегментов (сегментные регистры)
- •Указатель команд и регистр флагов
- •Сегментация памяти
- •Структура команд мп
- •Формат «Регистр-регистр» (Рг-Рг) – 2 байта
- •Формат «Регистр-память» (Рг-яп) – 2÷4 байта
- •Формат «Регистр-непосредственный операнд» (Рг-но) – 3÷4 байта
- •Формат «Память-непосредственный операнд» (яп-но) – 3÷6 байтов
- •Представление данных в пэвм
- •Целые числа
- •Двоично-десятичные числа (bcd)
- •Символьные данные
- •Вещественные данные
- •Система команд мп семейства iх86 фирмы Intel
- •Команды сложения и вычитания
- •Дополнительные команды
- •Команды умножения и деления
- •Команды преобразования длины
- •Стековые команды
- •Доступ к элементам стека с помощью регистра вр
- •Команды передачи управления
- •Близкие и далекие переходы.
- •Адресация в переходах.
- •Конструкции языка Ассемблера Литература
Формат «Регистр-регистр» (Рг-Рг) – 2 байта
Например,
Mov AL, AH
Выполняет пересылку AL := AH
В общем виде
reg? := reg1 ¤ reg2
Формат команды (см. рис.4)
1-й байт |
2-й байт |
||||
КОП |
d |
w |
md |
reg1 |
reg2 |
Рис. 4
Здесь w – определяет размер операндов, т.е. w = 0 – слова (2 байта), w = 1 – байты;
d – бит направления пересылки, d = 0 – приемник результата - reg1, d = 1 – приемник результата – reg2;
md – поле режима адресации (2 бита), для формата «Рг-Рг» md = 11;
reg1, reg2 – содержат трехразрядный двоичный код, который обозначает конкретный регистр МП . (см. табл.1):
Таблица 1.
Значение поля reg |
000 |
001 |
010 |
011 |
100 |
101 |
110 |
111 |
|
Адресуемый |
w=0 |
AL |
CL |
DL |
BL |
AH |
CH |
DH |
BH |
регистр |
w=1 |
AX |
CX |
DX |
BX |
SP |
BP |
SI |
DI |
Формат «Регистр-память» (Рг-яп) – 2÷4 байта
Например,
Mov AX, X ; AX := ОП(X)
Mov X, AX ; ОП(X) := AX
Здесь запись ОП(X) означает ячейку оперативной памяти, адресованную при помощи имени X.
Формат команды (см. рис.5)
1-й байт |
2-й байт |
3-й, 4-й байты |
||||
КОП |
d |
w |
md |
reg |
r/m |
Adr (0 ÷ 2 байта) |
Рис. 5
Здесь w – см. выше;
d – см. выше, а именно при d = 0 – запись результата в ячейку памяти, при d = 1 – запись результата в регистр;
md – указывает, сколько байтов в команде занимает адрес в двоично-кодированном виде ( т.е. может принимать значения 00, 01, 10);
поле r/m указывает способ модификации адреса.
От сочетания полей md и r/m могут образоваться различные способы адресации.
Так при md = 00 и r/m = 110 – прямая адресация, т.е. в следующем 3-ем байте команды указан адрес ячейки памяти.
При других сочетаниях образуются следующие способы адресации:
- базово-индексная, при которой физический адрес вычисляется по выражению
[Рг Б] + [Рг И] + disp,
где disp – смещение, которое может быть константой или выражением;
[Рг Б] – содержимое базового регистра, а именно BP или BX;
[Рг И] – содержимое индексного регистра, а именно SI или DI;
- индексная адресация - [Рг И] + disp;
- базовая адресация - [Рг Б] + disp;
- при disp = 0 адресация называется косвенной.
Между индексной и базовой адресациями нет различий, они выделены для ограничения числа вариантов адресации, т.е при базово-индексной адресации не допускается использование двух регистров из одной группы. Например, нельзя использовать два базовых регистра в одной команде.
В программе на ЯА можно записать эти способы адресации разными формами записи (см табл. 2 ).
Таблица 2
-
Способ адресации
Обозначение операнда в команде ЯА
Базово-индексная
disp[Рг Б] [Рг И]
disp[Рг Б] + [Рг И]
disp[Рг Б + Рг И]
Индексная
disp[Рг И]
[Рг И] + disp
Базовая
disp[Рг Б]
[Рг Б] + disp
Косвенная
[Рг И]
[Рг Б]
В поле adr содержится указание адреса в “польской инверсной записи” (или LEM – little endian method), при которой младший байт располагается раньше старшего.
Например, адрес 620Bh займет в команде 2 байта
1-й байт |
2-й байт |
3-й байт |
4-й байт |
|
|
0B |
62 |