-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathci386.txt
More file actions
60 lines (58 loc) · 5.16 KB
/
ci386.txt
File metadata and controls
60 lines (58 loc) · 5.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Регистры есть доступные в привилегированном режиме и в ограниченном. Речь будет идти только о регистрах работающих в ограниченном режиме.
3 типа регистров: общего назначения, сегментные, специальные.
Сегментые регистры:
CS, DS, SS, ES, GS, FS (используются только в "плоской" модели, больше о них ни слова)
Регистры общего назначения:
EAX - accumulator.
- Регистр участвующий в любых арифметических операциях в качестве операнда или кудa
помещают результат.
EBX - base.
- Особая роль была в 16-битных процессорах. Сейчас особой роли нет.
ECX - counter.
- Подразумевает некоторое количество итераций.
EDX - data.
- Выполняет особую роль для хранения результата целочисленного умножения (для
хранения результата не поместившегося в аккумулятор) и при целочисленном
делении (для хранения старшей части делимого, а после выполнения деления
для хранения остатка от деления)
ESI и EDI - source index, destination index, соответственно.
- Используются в командах использующие массивы данных. ESI хранит адрес текущей
позиции в массиве-источнике (например, в области памяти, которую надо
скопировать). EDI хранит адрес текущей позиции в массиве-цели (в области
памяти, куда производится копирование или записываются данные)
EBP - base pointer.
- Как правило, используется для хранения базового адреса стекового фрейма в
подпрограммах, имеющих параметры и локальные переменные.
ESP - stack pointer.
- Всегда используется для хранения адреса текущей позиции вершины аппаратного
стека.
Специальные регистры:
EIP - extendet instruction pointer.
- Счётчик команд, указатель текущей инструкции. Хранит в себе адрес того места в
оперативной памяти, откуда процессору следует извлечь следующую машинную
инструкцию. После извлечения инструкции, значение в регистре EIP
автоматически увеличивается на длину прочитанный инструкции. Инструкция
может занимать от 1 до 11 ячеек (??? УТОЧНИТЬ ЧТО ЗА ЯЧЕЙКИ ???)
FLAGS - flags. :)
- Данный регистр не рассматривается как число. Каждый бит данного регистра
представляет собой флаг. EFLAGS доступен только в привилегированном режиме.
- ZF - zero flag.
- Этот флаг устанавливается в ходе выполнения арифметических и
сравнительных операций. Если результат операции 0, тогда ZF = 1
- CF - carry flag.
- Флаг переноса. CF = 1, при выполнениях операций с безнаковыми числами:
Если результат сложения потребовал перенос в несуществующий разряд или
если вычитаемое оказалось больше вычитаемого.
- SF - sign flag.
- Устанавливается равным старшему биту результата, который для знаковых
чисел соответствует знаку числа.
- OF - overflow flag.
- Выставляется в единицу при переполнении знакового числа.
- DF - direction flag.
- этот флаг можно установить командой std и обнулить командой cld.
(??? УТОЧНИТЬ ДЛЯ КАКИХ СТРОКОВЫХ ОПЕРАЦИЙ ИСПОЛЬЗУЕТСЯ ???)
- PF and AF - parity flag and auxiliary carry flag.
- Флаг чётности и флаг полупереноса. Речи о них больше не будет.
- IF and TF - interrupt flag and trap flag.
- Флаг разрешения прерываний и флаг ловушки. Доступны только в
привилегированном режиме.