8086 и 8088 - 16-битные процессоры - их регистры имеют ширину 16 байт (AX и DX могут быть объединены в один 32-битный регистр)
Обратите внимание, что 8086 имеет 16-битную шину данных; 8088 имеет 8-битную шину данных (хотя они оба имеют внутреннюю 16-битную адресацию)
РЕГИСТРЫ ОБЩЕГО НАЗНАЧЕНИЯ
8086 CPU имеет 8 регистров общего назначения, каждый из которых имеет свое имя:
AX - регистр аккумулятора (делится на AH / AL):
Generates shortest machine code
Arithmetic, logic and data transfer
One number must be in AL or AX
Multiplication & Division
Input & Output
BX - регистр базового адреса (разделенный на BH / BL).
CX - регистр счета (делится на CH / CL):
Iterative code segments using the LOOP instruction
Repetitive operations on strings with the REP command
Count (in CL) of bits to shift and rotate
DX - регистр данных (разделенный на DH / DL):
DX:AX concatenated into 32-bit register for some MUL and DIV operations
Specifying ports in some IN and OUT operations
SI - регистр исходного индекса:
Can be used for pointer addressing of data
Used as source in some string processing instructions
Offset address relative to DS
DI - регистр индекса назначения:
Can be used for pointer addressing of data
Used as destination in some string processing instructions
Offset address relative to ES
BP - базовый указатель:
Primarily used to access parameters passed via the stack
Offset address relative to SS
SP - указатель стека:
Always points to top item on the stack
Offset address relative to SS
Always points to word (byte at even address)
An empty stack will had SP = FFFEh
РЕГИСТРЫ СЕГМЕНТА
CS - указывает на сегмент, содержащий текущую программу.
DS - обычно указывает на сегмент, где определены переменные.
ES - регистр дополнительного сегмента, кодер определяет его использование.
SS - указывает на сегмент, содержащий стек.
Хотя в сегментных регистрах можно хранить любые данные, это не очень хорошая идея. Сегментные регистры имеют особую цель - указывать на доступные блоки памяти.
Сегментные регистры работают вместе с регистром общего назначения для доступа к любому значению памяти. Например, если мы хотим получить доступ к памяти по физическому адресу 12345h (шестнадцатеричный), мы могли бы установить DS = 1230h и SI = 0045h. Таким образом, мы можем получить доступ к гораздо большему объему памяти, чем с помощью одного регистра, который ограничен 16-битными значениями.
Процессор вычисляет физический адрес, умножая регистр сегмента на 10h и добавляя в него регистр общего назначения (1230h * 10h + 45h = 12345h):
Адрес, сформированный из 2 регистров, называется эффективным адресом.
По умолчанию регистры BX, SI и DI работают с регистром сегмента DS;
BP и SP работают с регистром сегмента SS.
Другие регистры общего назначения не могут сформировать эффективный адрес.
Кроме того, хотя BX может формировать эффективный адрес, BH и BL не могут.
РЕГИСТРЫ СПЕЦИАЛЬНОГО НАЗНАЧЕНИЯ
IP - указатель инструкции:
Always points to next instruction to be executed
Offset address relative to CS
Регистр IP всегда работает вместе с регистром сегмента CS и указывает на выполняемую в данный момент инструкцию.
РЕГИСТРАЦИЯ ФЛАГОВ
Flags Register - определяет текущее состояние процессора. Они автоматически модифицируются ЦП после математических операций, что позволяет определить тип результата и определить условия для передачи управления другим частям программы.
Как правило, вы не можете получить доступ к этим регистрам напрямую.
Carry Flag (CF) - this flag is set to 1 when there is an unsigned overflow. For example when you add bytes 255 + 1 (result is not in range 0...255). When there is no overflow this flag is set to 0.
Parity Flag (PF) - this flag is set to 1 when there is even number of one bits in result, and to 0 when there is odd number of one bits.
Auxiliary Flag (AF) - set to 1 when there is an unsigned overflow for low nibble (4 bits).
Zero Flag (ZF) - set to 1 when result is zero. For non-zero result this flag is set to 0.
Sign Flag (SF) - set to 1 when result is negative. When result is positive it is set to 0. (This flag takes the value of the most significant bit.)
Trap Flag (TF) - Used for on-chip debugging.
Interrupt enable Flag (IF) - when this flag is set to 1 CPU reacts to interrupts from external devices.
Direction Flag (DF) - this flag is used by some instructions to process data chains, when this flag is set to 0 - the processing is done forward, when this flag is set to 1 the processing is done backward.
Overflow Flag (OF) - set to 1 when there is a signed overflow. For example, when you add bytes 100 + 50 (result is not in range -128...127).