Introduction and Basics
Computers are not complicated device,
They are not infinitely intelligent
They do not think better than people.
A computer can only do what a programs
instruct through programs
A program is just a sequence of simple
commands that help a computer solve a
Computers execute instructions very fast .
The power and magic of a computer
lies in the speed at which it executes
instructions without a mistake
The sequence of instructions executed
per second are very many (millions
steps) appears complicated altogether.
These are considered to be a series of
very simple steps or commands
The microprocessor is a simple integrated
circuit (IC). Or very small computer have the
same commands or instructions they can
The names used to describe the commands
make them vary.
Microprocessors have commands that can,
move data around, do maths (add,multiply
etc) bring data in side the microprocessor
from out side the system and also send it out
side the system
A typical Microprocessor has three basic parts inside
it: the program counter (PC) ,memory and
The program counter keeps track of which program is
to be executed
The memory contains commands to be executed.
The I/O deals with transferring of data from and to the
Microprocessors are housed inside chips.
A microprocessor encounter branches during
program execution.Both conditional and non
The most difficult part of programming a
microprocessor is to define the problem
This is called the logical thought
It is a good understanding of the
Decimal, Binary and Hex
Microprocessors use binary numbering
system rather than the decimals for
counting ., and its why the computers are
called binary computers.
Decimal is base 10 and binary is base 2. Hex-
decimal is base 16.
The base of a system defines how many
possible numbers can be in each digit
Decimal: 0 to 9
Binary: 0 or 1
Hex 0 to 9, A, B C, D, E and F.
Microprocessors have instructions that they
send. The decimal, binary and hexadecimal
number indicated earlier are key to the
There are many kinds of memories in a
system. There is the unrear memory called
These are single bit numbers that are used to
indicate different conditions in a system.
Ther are flags coz they flag the program of
events or conditiond
If a flag is raised or has a 1 in it, then it is said
to be SET, otherwise if its 0 then it is said to b
In 8-bit byte, referred to as bit 0 through 7, 0
is right most and the least significant bit(LSB)
and 7 the most significant bit.
Inside a microprocessor there are many
registers. These vary from one CPU to CPU.
All have a register called the accumulator,
sometimes called the A register.
The accumulator is used in for temporary
results and is 8 bits wide or a byte .
In the CPU we will be using there are four
types of instructions, with a number of
variations. These four types are Arithmetic,
Logical, Branching, and Data Transfer. We
look at them independently next:
These include, addition, subtraction,
multiplication division, incrementing and
decrementing. In most early CPUs the
multiplications and division are not available.
There are two flags used in Arithmetic that tell
the program the outcome of an instruction.
- Carry (C) flag
- Zero (Z) flag
the Z flag if set, indicates that the instruction
left a value 0 in the accumulator.
These are also mathematical
instructions, and they include
-OR, AND, XOR, ROTATE,
COMPLEMENT and CLEAR
These commands are concerned with
the value or state of each bit in the data
rather than the value of the data they
These are jumps or branches that help the
program flow commands. They are termed
differently depending on the way a jump is
done or the condition under which it is done,
e.g. overflow or underflow., zero result or not
But all stop the normal sequential execution
of the program, and jump to another location,
other than the next instruction in sequence
These use Moving and Exchanging
Moving helps move data across
registers and memory
Exchange is a variation on the move
instruction. Data is moved between two
Memory and Addressing
There are several different types of
memory in a micro.
One is Program memory.
This is where the program is located.
Another is Data memory.
Where data, that might be used by the
program, is located.
Memory and Addressing-
They both reside in the same memory space
and can be changed by the program.
That’s right, a program can actually alter itself
if that was necessary.
Two terms are used when talking about
Reading (load) is getting a value from
memory and Writing (store) is putting a value
Types of Buses & their
There are three system buses associated
with the memory subsystem.
It's important for you to know exactly how they work,
because these busses transport data and addresses
everywhere within the system.
All these buses are connected to the memory system,
which makes them interact with the microprocessors.
We have different types of microprocessors:
8085, 8086 and other more types….
In the 8085 microprocessor, the address bus
is 16-bits wide. It selects one of locations in
The control bus determines whether this will
be a read or a write
In the case of an instruction fetch, the control bus is set
up for a read operation.
Data is read or written through the data bus,
which is 8 bits wide. Explains why registers
and memory is 8-bits wide.
Bytes and Microprocessors
A byte is the most used number in a
microprocessor because each memory
location or register is one byte wide.
Memory has to be thought of as a sort of file
cabinet with each location in it being a folder in
To get to each memory location, a
different method is used, that is
a unique address is assigned to each location.
In most microprocessors the address is
a word or 16 bits, or 4 digit hex.
This allows for a maximum of 65536 (216
64K) unique addresses or memory locations
that can be accessed.
The Program Counter is what holds this
address when the microprocessor is
The reason instructions are read sequentially,
is because the program counter automatically
increments after fetching the current
It does this even before the current instruction
is acted upon.
The sequence is that the program
counter's contents are placed on the
memory address bus.
this allows the instruction to be fetched
from memory through the data bus, and
immediately the program counter is
incremented by 1.
Then the microprocessor looks at the
instruction and starts processing it
Program, data and stack memories occupy the
same memory space.
The total addressable memory size is 1MB KB.
As the most of the processor instructions use
16-bit pointers the processor can effectively
address only 64 KB of memory.
To access memory outside of 64 KB the CPU
uses special segment registers to specify
where the code, stack and data 64 KB
segments are positioned within 1 MB of
16-bit pointers and data are stored as:
address: low-order byte
address+1: high-order byte
32-bit addresses are stored in
"segment:offset" format as:
address: low-order byte of segment
address+1: high-order byte of segment
address+2: low-order byte of offset
address+3: high-order byte of offset
Physical memory address pointed by
segment:offset pair is calculated as:
address = (<segment> * 16) + <offset>
Program memory - program can be
located anywhere in memory.
Jump and call instructions can be used
for short jumps within currently
selected 64 KB code segment, as well
as for far jumps anywhere within 1 MB
All conditional jump instructions can be
used to jump within approximately
+127 to -127 bytes from current
Data memory - the processor can access
data in any one out of 4 available segments,
which limits the size of accessible memory to
256 KB (if all four segments point to different
64 KB blocks).
Accessing data from the Data, Code, Stack or
Extra segments can be usually done by
prefixing instructions with the DS:, CS:, SS: or
Some registers and instructions by default
may use the ES or SS segments instead of DS
Word data can be located at odd or even byte
The processor uses two memory accesses to
read 16-bit word located at odd byte
boundaries. Reading word data from even byte
boundaries requires only one memory access.
Stack memory can be placed anywhere in
memory. The stack can be located at odd
memory addresses, but it is not recommended
for performance reasons.
0000h - 03FFh are reserved for interrupt
Each interrupt vector is a 32-bit pointer
in format segment:offset.
FFFF0h - FFFFFh - after RESET the
processor always starts program
execution at the FFFF0h address.
The processor has the following interrupts:
INTR is a maskable hardware interrupt. The interrupt
can be enabled/disabled using STI/CLI instructions or
using more complicated method of updating the FLAGS
register with the help of the POPF instruction.
When an interrupt occurs, the processor stores FLAGS
register into stack, disables further interrupts, fetches
from the bus one byte representing interrupt type, and
jumps to interrupt processing routine address of which
is stored in location 4 * <interrupt type>.
Interrupt processing routine should return with the IRET
NMI is a non-maskable interrupt. Interrupt is
processed in the same way as the INTR
Interrupt type of the NMI is 2, i.e. the address
of the NMI processing routine is stored in
This interrupt has higher priority than the
Software interrupts can be caused
INT instruction - breakpoint interrupt. This
is a type 3 interrupt.
INT <interrupt number> instruction - any
one interrupt from available 256 interrupts.
INTO instruction - interrupt on overflow
Single-step interrupt - generated if the TF
flag is set. This is a type 1 interrupt.
When the CPU processes this interrupt it
clears TF flag before calling the
interrupt processing routine.
Processor exceptions: divide error (type 0),
unused opcode (type 6) and escape opcode
Software interrupt processing is the
same as for the hardware interrupts.
65536 8-bit I/O ports. These ports can be also
addressed as 32768 16-bit I/O ports
Most of the registers contain
data/instruction offsets within 64 KB
There are four different 64 KB segments
for instructions, stack, data and extra
To specify where in 1 MB of processor
memory these 4 segments are located
the processor uses four segment
Code segment (CS) is a 16-bit register containing
address of 64 KB segment with processor instructions.
The processor uses CS segment for all accesses to
instructions referenced by instruction pointer (IP)
register. CS register cannot be changed directly. The CS
register is automatically updated during far jump, far
call and far return instructions.
Stack segment (SS) is a 16-bit register containing
address of 64KB segment with program stack. By
default, the processor assumes that all data referenced
by the stack pointer (SP) and base pointer (BP)
registers is located in the stack segment. SS register
can be changed directly using POP instruction.
Data segment (DS) is a 16-bit register containing
address of 64KB segment with program data. By
default, the processor assumes that all data referenced
by general registers (AX, BX, CX, DX) and index
register (SI, DI) is located in the data segment. DS
register can be changed directly using POP and LDS
Extra segment (ES) is a 16-bit register containing
address of 64KB segment, usually with program data.
By default, the processor assumes that the DI register
references the ES segment in string manipulation
instructions. ES register can be changed directly using
POP and LES instructions.
It is possible to change default
segments used by general and
index registers by prefixing
instructions with a CS, SS, DS or
All general registers of the 8086
microprocessor can be used for
arithmetic and logic operations.
Accumulator register consists of 2 8-bit
registers AL and AH, which can be combined
together and used as a 16-bit register AX. AL
in this, it case contains the low-order byte of
the word, and AH contains the high-order
Accumulator can be used for I/O operations
and string manipulation.
Base register consists of 2 8-bit registers BL
and BH, which can be combined together and
used as a 16-bit register BX. BL in this case
contains the low-order byte of the word, and
contains the high-order byte. BX register usually
contains a data pointer used for based, based indexed
or register indirect addressing.
Count register consists of 2 8-bit registers CL and CH,
which can be combined together and used as a 16-bit
When combined, CL register contains the low-order byte
of the word, and CH contains the high-order byte.
Count register can be used as a counter in string
manipulation and shift/rotate instructions.
General Registers – Cont’n
Data register consists of 2 8-bit registers DL and
DH, which can be combined together and used as a
16-bit register DX.
When combined, DL register contains the low-order
byte of the word, and DH contains the high-order
Data register can be used as a port number in I/O
In integer 32-bit multiply and divide instruction the DX
register contains high-order word of the initial or
Stack Pointer (SP) is a 16-bit register pointing to
Base Pointer (BP) is a 16-bit register pointing to data
in stack segment. BP register is usually used for based,
based indexed or register indirect addressing.
Source Index (SI) is a 16-bit register. SI is used for
indexed, based indexed and register indirect
addressing, as well as a source data address in string
Destination Index (DI) is a 16-bit register. DI is used
for indexed, based indexed and register indirect
addressing, as well as a destination data address in
string manipulation instructions.
Instruction Pointer (IP) is
a 16-bit register.
Flags is a 16-bit register
containing 9 1-bit flags:
Overflow Flag (OF) - set if
the result is too large
positive number, or is too
small negative number to
fit into destination operand.
Direction Flag (DF) - if set
then string manipulation
instructions will auto-
decrement index registers.
If cleared then the index
registers will be auto-
Interrupt-enable Flag (IF) -
setting this bit enables
Single-step Flag (TF) - if set
then single-step interrupt
will occur after the next
Sign Flag (SF) - set if the
most significant bit of the
result is set.
Zero Flag (ZF) - set if the
result is zero.
Auxiliary carry Flag (AF) -
set if there was a carry
from or borrow to bits 0-3
in the register.
Parity Flag (PF) - set if parity (the
number of "1" bits) in the low-
order byte of the result is even.
Carry Flag (CF) - set if there was a
carry from or borrow to the most
significant bit during last result
8086 instruction set consists of the following
Data moving instructions.
Arithmetic - add, subtract, increment, decrement, convert
byte/word and compare.
Logic - AND, OR, exclusive OR, shift/rotate and test.
String manipulation - load, store, move, compare and scan
Control transfer - conditional, unconditional, call
subroutine and return from subroutine.
Other - setting/clearing flag bits, stack operations,
software interrupts, etc.
Implied - the data value/data address is
implicitly associated with the instruction.
Register - references the data in a register or
in a register pair.
Immediate - the data is provided in the
Direct - the instruction operand specifies the
memory address where data is located.
Register indirect - instruction specifies a
register containing an address, where data is
located. This addressing mode works with SI,
DI, BX and BP registers.
Based - 8-bit or 16-bit instruction operand is added to the
contents of a base register (BX or BP), the resulting value is a
pointer to location where data resides.
Indexed - 8-bit or 16-bit instruction operand is added to the
contents of an index register (SI or DI), the resulting value is
a pointer to location where data resides.
Based Indexed - the contents of a base register (BX or BP)
is added to the contents of an index register (SI or DI), the
resulting value is a pointer to location where data resides.
Based Indexed with displacement - 8-bit or 16-bit
instruction operand is added to the contents of a base register
(BX or BP) and index register (SI or DI), the resulting value is
a pointer to location where data resides.