Ассемблер в примерах и задачах [Наталья Юрьевна Добровольская] (pdf) читать постранично, страница - 4
Книга в формате pdf! Изображения и текст могут не отображаться!
[Настройки текста] [Cбросить фильтры]
к другому сегменту. Существовали так называемые «ближние» и
«дальние» переходы. Если команда, на которую надо совершить
переход, находилась в том же сегменте, то для перехода
достаточно было изменить только значение регистра IP. Такой
переход назывался ближним. Если же команда, на которую надо
совершить переход, находилась в другом сегменте, то для
перехода необходимо было изменить как значение регистра CS, так
и значение регистра IP. Такой переход назывался дальним и
осуществлялся дольше.
32-битные регистры позволяют адресовать 4 Гб памяти, что
уже достаточно для любой программы. Каждую Win32-программу
Windows запускает в отдельном виртуальном пространстве. Это
означает, что каждая Win32-программа будет иметь
4-гигабайтовое адресное пространство, но вовсе не означает, что
каждая программа имеет 4 Гб физической памяти, а только то, что
программа может обращаться по любому адресу в этих пределах.
А Windows сделает все необходимое, чтобы память, к которой
программа обращается, «существовала».
Под архитектурой Win32 отпала необходимость в разделении
адреса на базу и смещение и необходимость в моделях памяти. На
32-битной архитектуре существует только одна модель памяти —
14
Регистры процессоров семейства IA-32
flat (сплошная или плоская). Сегментные регистры остались, но
используются по-другому.
2.1.2. Регистр командного указателя EIP
Регистр указателя команд EIP1 содержит смещение на
команду, которая должна быть выполнена следующей.
EIP d
CS →
Сегмент команд
d
IP →
Текущая команда
2.1.3. Регистр флагов
Флаг — это бит, принимающий значение 1 («флаг
установлен»), если выполнено некоторое условие, и значение 0
(«флаг сброшен») в противном случае. Процессор имеет регистр
флагов, содержащий набор флагов, отражающий текущее
состояние процессора.
31
22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
I
V V
Зарезервированы I
A V R
N O
O D I T S Z
A
P
C
I I
0
0
0
1
C MF
F
F
F
(установлены в 0) D
T P
F F F F F F
P P
L
FLAGS
№
Флаг
Название
Описание
Тип флага
FLAGS
0
CF
1
1
1
Carry Flag
Флаг переноса
Зарезервирован
Instruction pointer – указатель команд.
15
Состояние
Ассемблер в примерах и задачах
№
Флаг
Название
Описание
Parity Flag Флаг чётности
Тип флага
Состояние
2
PF
3
0
4
AF
5
0
6
ZF
Zero Flag
Флаг нуля
Состояние
7
SF
Sign Flag
Флаг знака
Состояние
8
TF
Trap Flag
Флаг трассировки
Системный
9
IF
10
DF
11
OF
12
13
IOPL
14
NT
15
0
Зарезервирован
Auxiliary
Carry Flag
Вспомогательный
флаг переноса
Состояние
Зарезервирован
Interrupt
Флаг разрешения
Enable Flag прерываний
Direction
Флаг направления
Flag
Overflow
Флаг переполнения
Flag
I/O
Уровень приоритета
Privilege
ввода-вывода
Level
Nested Task Флаг вложенности
задач
Системный
Управляющий
Состояние
Системный
Системный
Зарезервирован
EFLAGS
16
RF
Resume Flag Флаг возобновления
Системный
17
VM
Virtual8086 Mode
Режим виртуального
процессора 8086
Системный
18
AC
Alignment
Check
Проверка
выравнивания
Системный
VIF
Virtual
Interrupt
Flag
Виртуальный флаг
разрешения
прерываний
Системный
VIP
Virtual
Interrupt
Pending
Ожидающее
виртуальное
прерывание
Системный
19
20
16
Регистры процессоров семейства IA-32
№
21
Флаг
ID
Название
ID Flag
Описание
Проверка на
доступность
инструкции CPUID
Тип флага
Системный
22
...
31
Зарезервированы
Значение флагов CF, DF и IF можно изменять напрямую в
регистре флагов с помощью специальных инструкций (например,
CLD для сброса флага направления), но нет инструкций, которые
позволяют обратиться к регистру флагов как к обычному регистру.
Однако можно сохранять регистр флагов в стек или регистр AH и
восстанавливать регистр флагов из них с помощью инструкций
LAHF, SAHF, PUSHF, PUSHFD, POPF и POPFD.
Флаги состояния (биты 0, 2, 4, 6, 7 и 11) отражают результат
выполнения арифметических инструкций, таких как ADD, SUB,
MUL, DIV.
− Флаг переноса CF устанавливается при переносе из
старшего значащего бита / заёма в старший значащий бит и
показывает наличие переполнения в беззнаковой целочисленной
арифметике. Также используется в длинной арифметике;
− Флаг чётности PF устанавливается, если младший
значащий байт результата содержит чётное число единичных
битов. Изначально этот флаг был ориентирован на использование
в коммуникационных программах: при передаче данных по
линиям связи для контроля мог также передаваться бит чётности и
инструкции для проверки флага чётности облегчали проверку
целостности данных;
− Вспомогательный флаг переноса AF устанавливается при
переносе из
Последние комментарии
18 часов 4 минут назад
1 день 2 часов назад
1 день 16 часов назад
1 день 20 часов назад
1 день 20 часов назад
1 день 21 часов назад