Section 2
CPU REGISTERS
INTRODUCTION
This section will cover the programmable CPU registers. The Assembly language programmer must be familiar with the references and uses of each register in order to program effectively. Other registers are discussed in the section on different 80X86 processors.
The following is a list of the 16-bit registers and their references:
| AX
| Accumulator
|
| FL
| Flags
|
|
| X|X|X|X|OF|DF|IF|TF|SF|ZF|X|AF|X|PF|X|CF
|
| BX
| Base Index
|
| BP
| Base Pointer
|
| CX
| Counter
|
| DX
| Data I/O Index
|
| DI
| Destination Index
|
| SI
| Source Index
|
| SP
| Stack Pointer
|
| IP
| Instruction Pointer
|
| CS
| Code Segment
|
| SS
| Stack Segment
|
| DS
| Data Segment
|
| ES
| Extra Segment
|
Some registers can be divided and accessed as two eight-bit registers for byte operations. They are referenced as follows:
| AH
| AX
| High byte
|
| AL
| AX
| Low byte, eight bit accumulator
|
| BH
| BX
| High byte
|
| BL
| BX
| Low byte
|
| CH
| CX
| High byte
|
| CL
| CX
| Low byte, shift counter
|
| DH
| DX
| High byte
|
| DL
| DX
| Low byte
|
- AX and AL are the Accumulator
- AX = AH+AL. AX is the 16-bit reference for the accumulator; AL is the 8-bit reference. AL is the low half of AX with AH as the high half. The accumulator is the primary data register. Most instructions for handling data execute faster if the data is in the accumulator.
- FL Flag Register
- The Flag register is a 16-bit data register used to keep track of CPU activity. This includes all logical, arithmetic, and comparing results as well as interrupt controls, debug tracing, string direction flags, etc.
Most conditional jumping instructions use the contents of this register to determine if branch conditions are true or not true.
- Flag Bits X|X|X|X|OF|DF|IF|TF|SF|ZF|X|AF|X|PF|X|CF
- The bit positions with X are not defined for the 8086/8088 CPU but are reserved by Intel for use with other processors in the series.
- OF Overflow Flag
- This bit is set if the last data manipulation caused the high bit to change.
- DF Direction Flag
- This bit is used by the CPU to decide the direction of string operations. Clearing the bit causes string operations to go forward and setting the bit causes string operations to go backward.
- IF Interrupt Flag
- This bit can be set or cleared by the programmer to prevent or allow maskable interrupts to occur.
- TF Trace Flag
- This bit is used in the debugging mode for single stepping through program logic.
- SF Sign Flag
- This bit is reset by logical operations to be equal to the high bit of the resulting data.
- ZF Zero Flag
- This bit is set if the last data manipulation produced a zero condition.
- AF Aux Carry Flag
- This bit is used by logical instructions that deal with data in nibbles (four bit).
- PF Parity Flag
- This bit is reset by the last data manipulation instruction to reflect if the operation produced an even or odd parity condition. A 1 means even parity and a 0 means odd parity.
- CF Carry Flag
- When adding, the carry bit is set if an overflow occurs. If subtracting, the bit is set if it had to borrow a bit because the subtraction resulted in a sign flip.
- BX Base Index
- BX is the most flexible of the indexing registers. It is a 16-bit register that can also be addressed in 8-bit format as BH (high) and BL (low) where BX = BH+BL. BX may beadded to other index registers for working with morecomplex indexing offsets. Examples: [BX+offset], [BX+SI+offset], [BX+DI+offset]
- BP Base Pointer
- BP is the base pointer register used to index data in the stack area. This register is used by many compilers to index data frames in the stack area. BP may be combined with DI or SI to index data in the stack area. Examples: [BP+SI+offset], [BP+DI+offset]
- SI Source Index
- SI is the source index register used by the string instructions. It may be combined with BX or BP to index data. Example: [SI+BX+offset]
- DI Destination Index
- DI is the destination index register used by the string instructions. It may be combined with BX or BP to index data. Example: [DI+BX+offset]
- SP Stack Pointer
- SP is the stack pointing register used by the push, pop, call, interrupt, and return instructions. It always indexes the last word pushed onto the stack.
- CX Counter
- CX is the counter register used by the string, repeat, and loop instructions.
- DX Data Register, I/O index
- DX is the data register. DX is only used as an index for I/O port functions. It is used for the 16 by 16 bit multiply and the 32 by 16 bit divide instructions. The results from a 16 bit multiply are put into DX:AX where DX holds the high 16 bits and AX holds the low 16 bits. For a 32 bit by 16 bit divide, DX will hold the leftover (modulo) data resulting from the divide.
- IP Instruction Pointer
- IP is used to index the next instruction to execute. It is reset by call and jump instructions.