Chapter 1
Chapter 1
8085 Architecture
The 8085 microprocessor is an 8-bit microprocessor that was developed by Intel in the mid-1970s.
It was widely used in the early days of personal computing and was a popular choice for hobbyists
and enthusiasts due to its simplicity and ease of use. The architecture of the 8085 microprocessor
consists of several key components, including the accumulator, registers, program counter, stack
pointer, instruction register, flags register, data bus, address bus, and control bus.
The accumulator is an 8-bit register that is used to store arithmetic and logical results. It is the most
used register in the 8085 microprocessor and is used to perform arithmetic and logical operations such
as addition, subtraction, and bitwise operations.
1. The 8085 microprocessor has six general-purpose registers, including B, C, D, E, H, and L,
which can be combined to form 16-bit register pairs. The B and C registers can be combined
to form the BC register pair, the D and E registers can be combined to form the DE register
pair, and the H and L registers can be combined to form the HL register pair. These register
pairs are commonly used to store memory addresses and other data. The program counter is a
16-bit register that contains the memory address of the next instruction to be executed. The
program counter is incremented after each instruction is executed, which allows the
microprocessor to execute instructions in sequence. The stack pointer is a 16-bit register that
is used to manage the stack. The stack is a section of memory that is used to store data
temporarily, such as subroutine addresses and other data. The stack pointer is used to keep
track of the top of the stack. The instruction register is an 8-bit register that contains the
current instruction being executed. The instruction register is used by the microprocessor to
decode and execute instructions.
2. The flags register is an 8-bit register that contains status flags that indicate the result of an
arithmetic or logical operation. These flags include the carry flag, zero flag, sign flag, and
parity flag. The carry flag is set when an arithmetic operation generates a carry, the zero flag
is set when the result of an arithmetic or logical operation is zero, the sign flag is set when the
result of an arithmetic or logical operation is negative, and the parity flag is set when the
result of an arithmetic or logical operation has an even number of 1 bits.
3. The data bus is an 8-bit bus that is used to transfer data between the microprocessor and
memory or other devices. The data bus is bidirectional, which means that it can be used to
read data from memory or write data to memory. The address bus is a 16-bit bus that is used
to address memory and other devices. The address bus is used to select the memory location
or device that the microprocessor wants to access.
4. The control bus is a set of signals that controls the operations of the microprocessor, including
the read and write operations. The control bus includes signals such as the read signal, write
signal, interrupt signal, and reset signal. The read signal is used to read data from memory or
other devices, the write signal is used to write data to memory or other devices, the interrupt
signal is used to signal the microprocessor that an interrupt has occurred, and the reset signal
is used to reset the microprocessor to its initial state.
0 1 1 Opcode fetch
0 1 0 Memory read
0 0 1 Memory write
1 1 0 I/O read
1 0 1 I/O write
1 1 1 Interrupt acknowledge
0 0 0 Halt
RD’ – It is a signal to control READ operation. When it is low the selected memory
or input-output device is read.
WR’ – It is a signal to control WRITE operation. When it goes low the data on the
data bus is written into the selected memory or I/O location.
READY – It senses whether a peripheral is ready to transfer data or not. If READY is
high(1) the peripheral is ready. If it is low(0) the microprocessor waits till it goes
high. It is useful for interfacing low speed devices.
3. Power Supply and Clock Frequency:
Vcc – +5v power supply
Vss – Ground Reference
XI, X2 – A crystal is connected at these two pins. The frequency is internally divided
by two, therefore, to operate a system at 3MHZ the crystal should have frequency of
6MHZ.
CLK (OUT) – This signal can be used as the system clock for other devices.
4. Interrupts and Peripheral Initiated Signals:
o The 8085 has five interrupt signals that can be used to interrupt a program execution.
o INTR
o RST 7.5
o RST 6.5
o RST 5.5
o TRAP
The microprocessor acknowledges Interrupt Request by INTA’ signal. In addition to
Interrupts, there are three externally initiated signals namely RESET, HOLD and READY. To
respond to HOLD request, it has one signal called HLDA.
o INTR – It is an interrupt request signal.
o INTA’ – It is an interrupt acknowledgement sent by the microprocessor after INTR is
received.
5. Reset Signals:
RESET IN’ – When the signal on this pin is low(0), the program-counter is set to
zero, the buses are tristate and the microprocessor unit is reset.
RESET OUT – This signal indicates that the MPU is being reset. The signal can be
used to reset other devices.
6. DMA Signals:
HOLD – It indicates that another device is requesting the use of the address and data bus.
Having received HOLD request the microprocessor relinquishes the use of the buses as
soon as the current machine cycle is completed. Internal processing may continue. After
the removal of the HOLD signal the processor regains the bus.
HLDA – It is a signal which indicates that the hold request has been received after the
removal of a HOLD request, the HLDA goes low.
7. Serial I/O Ports:
Serial transmission in 8085 is implemented by the two signals,
SID and SOD – SID is a data line for serial input where as SOD is a data line for serial
output.
Advantages of the 8085-microprocessor pin diagram:
The pin diagram is easy to understand and remember because of its logical and systematic
arrangement.
It has a simple structure with fewer pins compared to other microprocessors, making it easy to
design and implement in electronic circuits.
It has a dedicated pin for interrupt handling, which makes it easy to interface with external
devices that require interrupt-driven communication.
Disadvantages of the 8085-microprocessor pin diagram:
It has limited addressing capability due to its 8-bit architecture, which can limit its use in
applications that require large amounts of memory.
It has a limited number of pins, which can be a constraint in designing complex systems that
require more input/output devices or peripherals.
It has separate pins for input/output and memory access, which can make it more difficult to
design memory-mapped input/output circuits.
Addressing Mode
The 8085 microprocessor has several addressing modes that are used to access memory
locations. Some of the most commonly used addressing modes in the 8085 microprocessor are:
The way of specifying data to be operated by an instruction is called addressing mode.
Why use addressing modes in 8085 microprocessor ?
Here are some reasons why addressing modes are used in the 8085 microprocessor:
1. Flexibility: Addressing modes provide a flexible way to access data and instructions in
memory. Different addressing modes allow programmers to choose the most appropriate
addressing technique for a particular task, depending on the type of data being accessed, the
size of the data, and other factors.
2. Memory optimization: Addressing modes can help to optimize the use of memory resources
by allowing data and instructions to be accessed in the most efficient way possible. For
example, using indirect addressing modes can reduce the amount of memory needed to store
addresses, while using indexed addressing modes can reduce the number of memory accesses
needed to access a large array of data.
3. Performance optimization: Addressing modes can also help to optimize the performance of
the microprocessor by reducing the number of memory accesses needed to fetch data or
instructions. This can help to speed up the execution of programs and improve the overall
efficiency of the microprocessor.
4. Reduced code size: Addressing modes can help to reduce the size of code needed to perform a
particular task. By using addressing modes that allow data and instructions to be accessed
using fewer instructions, programmers can write more compact and efficient code.
Types of addressing modes –
In 8085 microprocessor there are 5 types of addressing modes:
1.Immediate Addressing Mode – In immediate addressing mode the source operand is always data.
If the data is 8-bit, then the instruction will be of 2 bytes, if the data is of 16-bit then the instruction
will be of 3 bytes.
Examples:
MVI B 45 (move the data 45H immediately to register B)
LXI H 3050 (load the H-L pair with the operand 3050H immediately)
JMP address (jump to the operand address immediately)
2.Register Addressing Mode – In register addressing mode, the data to be operated is available
inside the register(s) and register(s) is(are) operands. Therefore the operation is performed within
various registers of the microprocessor.
Examples:
MOV A, B (move the contents of register B to register A)
ADD B (add contents of registers A and B and store the result in register A)
INR A (increment the contents of register A by one)
3.Direct Addressing Mode – In direct addressing mode, the data to be operated is available inside a
memory location and that memory location is directly specified as an operand. The operand is directly
available in the instruction itself.
Examples:
LDA 2050 (load the contents of memory location into accumulator A)
LHLD address (load contents of 16-bit memory location into H-L register pair)
IN 35 (read the data from port whose address is 35)
4.Register Indirect Addressing Mode – In register indirect addressing mode, the data to be operated
is available inside a memory location and that memory location is indirectly specified by a register
pair.
Examples:
MOV A, M (move the contents of the memory location pointed by the H-L pair to the accumulator)
LDAX B (move contents of B-C register to the accumulator)
STAX B (store accumulator contents in memory pointed by register pair B-C)
5.Implied/Implicit Addressing Mode – In implied/implicit addressing mode the operand is hidden
and the data to be operated is available in the instruction itself.
Examples:
CMA (finds and stores the 1’s complement of the contents of accumulator A in A)
RRC (rotate accumulator A right by one bit)
RLC (rotate accumulator A left by one bit)
6.Relative Addressing Mode - In this mode, the operand is a memory location specified by the
contents of the program counter plus a constant value.
example:
MOV R0,#05H
AGAIN:
MVI A,#55H
ADD A,R0
JMP AGAIN
In this example, the instruction JMP AGAIN uses the Relative Addressing Mode. The instruction
jumps to the label AGAIN by adding the contents of the program counter with the specified constant
value. The constant value is calculated based on the distance between the current instruction and the
label AGAIN.
In this case, the instruction JMP AGAIN is executing a loop that loads the accumulator with the value
55H, adds the contents of the register R0 to the accumulator, and then jumps back to the label AGAIN
to repeat the loop.
Features of the addressing modes in the 8085 microprocessor:
1. Immediate addressing: In immediate addressing mode, the operand is a constant value that
is part of the instruction. The immediate addressing mode is used for instructions that require
a fixed value, such as loading a constant value into a register.
2. Direct addressing: In direct addressing mode, the operand is a memory address specified
directly in the instruction. The direct addressing mode is used for instructions that access data
stored in memory.
3. Indirect addressing: In indirect addressing mode, the operand is a memory address specified
indirectly by a register or memory location. The indirect addressing mode is used for
instructions that access data stored in memory, where the memory address is not known in
advance.
4. Register addressing: In register addressing mode, the operand is stored in one of the
processor registers. The register addressing mode is used for instructions that manipulate the
contents of the registers.
5. Indexed addressing: In indexed addressing mode, the operand is obtained by adding an
offset value to a base address stored in a register. The indexed addressing mode is used for
instructions that access data stored in memory using a computed address.
6. Relative addressing: In relative addressing mode, the operand is specified as an offset
relative to the current program counter value. The relative addressing mode is used for
instructions that perform conditional branching or looping.
7. Memory-mapped I/O addressing: In memory-mapped I/O addressing mode, the processor
accesses input/output devices using memory addresses instead of specialized I/O instructions.
Memory-mapped I/O addressing mode is used for interfacing with peripherals such as
displays, keyboards, and printers.
Advantages of Addressing Modes in 8085 Microprocessor:
1. Versatility: The 8085 microprocessor supports several addressing modes, which allows for a
wide range of memory access and manipulation options.
2. Efficient memory usage: Different addressing modes allow for efficient use of memory,
reducing the memory footprint of programs and making the best use of available memory.
3. Easy to use: The addressing modes are easy to use, making it simple for programmers to
write and execute complex programs.
4. Improved performance: The use of different addressing modes can improve the
performance of programs, as the correct addressing mode can be chosen to match the specific
requirements of the program.
Disadvantages of Addressing Modes in 8085 Microprocessor:
1. Complexity: The various addressing modes can be complex, making it difficult for
programmers to choose the correct mode for a given task.
2. Overhead: The use of different addressing modes can result in additional overhead, as the
microprocessor must perform additional operations to access memory.
3. Debugging difficulties: Debugging programs that use multiple addressing modes can be
difficult, as the programmer must keep track of the different modes used in each memory
access.
4. Limitations: The addressing modes are limited by the size of the program counter and the
memory address space, which can impact the performance of large programs.
Uses of Addressing Modes in 8085 Microprocessor:
Here are some of the most common uses of addressing modes in the 8085 microprocessor:
1. Direct addressing: Direct addressing is used when the address of the operand is directly
specified in the instruction. This addressing mode is used for simple operations where the
operand is stored in a specific memory location, and the address does not need to be
calculated or manipulated in any way.
2. Indirect addressing: Indirect addressing is used when the address of the operand is not directly
specified in the instruction, but is instead stored in a register or memory location. This
addressing mode is useful for accessing data stored in memory that may be located at a
different address each time the program is executed.
3. Immediate addressing: Immediate addressing is used when the operand is specified directly in
the instruction, rather than being stored in memory. This addressing mode is useful for
performing simple arithmetic or logic operations on constants or literals.
4. Register addressing: Register addressing is used when the operand is stored in a register,
rather than in memory. This addressing mode is useful for performing fast arithmetic or logic
operations on small amounts of data.
5. Indexed addressing: Indexed addressing is used when the address of the operand is calculated
by adding an offset value to the contents of a register. This addressing mode is useful for
accessing elements of an array or data structure.
6. Relative addressing: Relative addressing is used when the address of the operand is calculated
relative to the current program counter. This addressing mode is useful for branching to
different parts of a program or for accessing data stored in a specific location relative to the
current program counter.
Challenges associated with addressing modes in the 8085 microprocessor, including:
Limited addressing range: The 8085 microprocessor has a 16-bit address bus, which limits the
number of memory locations that can be accessed directly. This can be a challenge when working
with large data sets or programs that require access to a lot of memory.
Complex instruction set: The 8085 microprocessor has a relatively complex instruction set, which
can make it difficult to understand and use the various addressing modes correctly. This can lead to
errors in programming and result in unexpected behavior.
Limited addressing modes: The 8085 microprocessor has a limited set of addressing modes, which
can limit its flexibility and make certain types of programming tasks more difficult. For example, the
lack of an indexed addressing mode can make it more difficult to work with arrays or other data
structures.
Stack management: The use of the stack pointer register can be challenging, especially when dealing
with nested subroutine calls or interrupts. Improper use of the stack can lead to memory corruption
and program crashes.
Performance considerations: Some addressing modes, such as direct addressing, can be faster than
others, such as register indirect addressing. This means that programmers need to carefully consider
which addressing modes to use to optimize the performance of their programs.
Memory management: The 8085 microprocessor does not have built-in support for virtual memory
or paging, which can be a challenge when working with large programs or data sets that exceed the
available physical memory. Programmers need to manage memory usage carefully to avoid memory-
related errors and crashes.
Looping in 8085
Looping is a programming technique that instructs the Microprocessor to repeat tasks. It is
accomplished by changing the sequence of execution using jump instructions.
Loops can be classified into two groups:
1. Continous Loops.
2. Conditional Loops.
Continous Loops
A continuous loops repeats a task continuously. It is setup by using unconditional jump instruction. A
program with a continuous loop will keep repeating tasks until the system is reset as shown in the
flowchart.
Conditional Loops
A conditional loop repeat a task if some conditions are satisfied. They are setup by conditional jump
instructions. These instructions check flags(Z, CY, P, S) and repeat the tasks based on the flag values.
These loops include counting and indexing.
Conditional Loop and Counter
A counter is a typical application of the conditional loop. To achieve the looping task, the
microprocessor requires a counter and a flag. A counter is set up by loading a suitable count into a
register. Counting is accomplished by either incrementing or decrementing the counter. A conditional
jump instruction creates the loop and the end of counting is indicated by a flag.
The following flowchart illustrates the approach needed for the microprocessor to repeat a task five
times.
Indexing
Pointing objects with sequential numbers is called indexing. Data bytes are stored in memory
locations and are referred to by their memory locations.
Delay Generation in 8085
The counting method described above has a significant downside in that it is performed at such a high
speed that only the final count can be seen. So to notice the counting, there must be an appropriate
time delay between counts.
Depending on the time delay required, a register is loaded with a number, and then the register is
decremented until it reaches zero by setting up a loop with a conditional jump instruction. The delay
is caused by the loop, which is determined by the system’s clock period.