Model of 8086
15 8 7 0
Four 16-bit general purpose registers
used to store operands and results.
Each can be accessed as a whole (AX,
BX, CX & DX)
or the upper and lower bytes can be accessed separately (AL, AH, BL, CL, CH, DL
AX is an implied operand for some
BX may be used as a base register in address
CX is an implied counter for certain
DX is sometimes used to hold the address
of I/O instructions.
to calculate physical memory addresses.
(Code Segment) is used in combination with IP to access the executing program
(Stack Segment) is used in combination with SP to access the executing program
(Data Segment) and ES (Extra Segment) are used to access the executing program
Segment, Pointer and other addressing registers are only 16 bits wide. On the
other hand, the address put on the bus by the 8086 (called Physical Address) is
20-bits. So, where do the missing 4-bits come from?
Effective Address or Offset
(CS) = 123A, (IP) = 341B
next instruction fetched at:
123A0 Segment Address
Status Word (PSW).
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OF DF IF
TF SF ZF AF PF CF The 8086 PSW contains 16 bits: 9 Flags & 7 not used.
Flags are divided into conditional and control.
• Conditional Flags
reflect the result of the previous operation involving the ALU
Flags control the execution of special functions or instructions.
• SF (Sign Flag) is equal to the most
significant bit (MSB) of the result (2’s complement numbers has a “1” as MSB).
• ZF (Zero
Flag) is ‘1’ if the result is zero.
• PF (Parity
Flag) is ‘1’ if the low order 8-bits of the result contain an even number of
• CF (Carry Flag) is ‘1’ if an
addition causes a carryout or a subtraction causes a borrow. X86 Assembly
Language Programming for the PC 23
(Auxiliary Flag) is ‘1’ if an addition causes a carry-out or a subtraction
causes a borrow in/by bit 3. This flag is used exclusively for BCD arithmetic.
• OF (Overflow Flag) is set if the result is out of range. • DF (Direction
Flag) is used by string manipulation instructions. If ‘1’ auto-increment;
otherwise, autodecrement. • IF (Interrupt Flag) if set, maskable interrupts are
recognized. • TF (Trap Flag) if set, a “trap” is executed after each
instruction (control is transferred to a subroutine after each instruction).