|
TMA1271 - Introduction to Machine Architecture
Trimester 3 Year 2000/2001
Tutorial
3
1. Programming model of 8085 Microprocessor.
2. Addressing Modes.
3. Instruction Set.
4. Instruction Format.
In this tutorial, we should cover the addressing modes and instruction set of the 8085. You may follow the above guideline. In the next tutorials, we will cover the assembly language related to 8085.
THE 8085
PROGRAMMING MODEL
In the previous tutorial we
described the 8085
microprocessor registers in reference to the internal data operations. The same
information is repeated here briefly to provide the continuity and the context
to the instruction set
and to enable the readers who prefer to focus initially on the programming
aspect of the microprocessor.
The 8085 programming model
includes six registers, one accumulator, and one flag register, as shown in
Figure. In addition, it has two 16-bit registers: the stack pointer and the
program counter. They are described briefly as
follows.
REGISTERS
The 8085 has six general-purpose
registers to store 8-bit data; these are identified as B,C,D,E,H, and L as shown
in the figure. They can be combined as register pairs - BC, DE, and HL - to
perform some 16-bit operations. The programmer can use these registers to store
or copy data into the registers by using data copy
instructions.
ACCUMULATOR
The accumulator is an 8-bit
register that is a part of arithmetic/logic unit (ALU). This register is used to
store 8-bit data and to perform arithmetic and logical operations. The result of
an operation is stored in the accumulator. The accumulator is also identified as
register A.
FLAGS
The ALU includes five
flip-flops, which are set or reset after an operation according to data
conditions of the result in the accumulator and other registers. They are called
Zero(Z), Carry (CY), Sign (S), Parity (P), and Auxiliary Carry (AC) flags; their
bit positions in the flag register are shown in the Figure below. The most
commonly used flags are Zero, Carry, and Sign. The microprocessor uses these
flags to test data
conditions.
For example, after an
addition of two numbers, if the sum in the accumulator id larger than eight
bits, the flip-flop uses to indicate a carry -- called the Carry flag (CY) -- is
set to one. When an arithmetic operation results in zero, the flip-flop called
the Zero(Z) flag is set to one. The first Figure shows an 8-bit register, called
the flag register, adjacent to the accumulator. However, it is not used as a
register; five bit positions out of eight are used to store the outputs of the
five flip-flops. The flags are stored in the 8-bit register so that the
programmer can examine these flags (data conditions) by accessing the register
through an instruction.
These flags have critical
importance in the decision-making process of the micro- processor. The
conditions (set or reset) of the flags are tested through the software
instructions. For example, the instruction JC (Jump on
Carry) is implemented to change the sequence of a program when CY flag is set.
The thorough understanding of flag is essential in writing assembly language
programs.
PROGRAM COUNTER (PC)
This 16-bit register deals with sequencing the execution of instructions. This register is a memory pointer. Memory locations have 16-bit addresses, and that is why this is a 16-bit register.
The microprocessor uses
this register to sequence the execution of the instructions. The function of the
program counter is to point to the memory address from which the next byte is to
be fetched. When a byte (machine code) is being fetched, the program counter is
incremented by one to point to the next memory location
STACK POINTER (SP)
The stack pointer is also a
16-bit register used as a memory pointer. It points to a memory location in R/W
memory, called the stack. The beginning of the stack is defined by loading
16-bit address in the stack pointer.
This programming model will be used in subsequent
tutorials to examine how these registers are affected after the execution of an
instruction.
THE 8085 ADDRESSING
MODES
The instructions MOV B, A
or MVI A, 82H are to copy data from a source into a destination. In these
instructions the source can be a register, an input port, or an 8-bit number
(00H to FFH). Similarly, a destination can be a register or an output port. The
sources and destination are operands. The various formats for specifying
operands are called the ADDRESSING MODES. For 8085, they
are:
1. Immediate addressing.
2. Register addressing.
3. Direct addressing.
4. Indirect
addressing.
Immediate
addressing
Data is present in the instruction. Load the immediate data to the destination provided.
Example: MVI
R,data
Register addressing
Data is provided through the registers.
Example: MOV Rd,
Rs
Direct addressing
Used to accept data from outside devices to store in the accumulator or send the data stored in the accumulator to the outside device. Accept the data from the port 00H and store them into the accumulator or Send the data from the accumulator to the port 01H.
Example: IN 00H or OUT
01H
Indirect
Addressing
This means that the
Effective Address is calculated by the processor. And the contents of the
address (and the one following) is used to form a second address. The second
address is where the data is stored. Note that this requires several memory
accesses; two accesses to retrieve the 16-bit address and a further access (or
accesses) to retrieve the data which is to be loaded into the register.
INSTRUCTION
CLASSIFICATION
An instruction is a binary
pattern designed inside a microprocessor to perform a specific function. The
entire group of instructions, called the instruction set, determines
what functions the microprocessor can perform. These instructions can be
classified into the following five functional categories: data transfer (copy)
operations, arithmetic operations, logical operations, branching operations, and
machine-control operations.
DATA TRANSFER (COPY) OPERATIONS
This group of instructions
copy data from a location called a source to another location called a
destination, without modifying the contents of the source. In technical manuals,
the term data transfer is used for this copying function. However, the term
transfer is misleading; it creates the impression that the contents of the
source are destroyed when, in fact, the contents are retained without any
modification. The various types of data transfer (copy) are listed below
together with examples of each type:
Types |
Examples |
1. Between Registers. |
1. Copy the contents of the register B into register D. |
2. Specific data byte to a register or a memory location. |
2. Load register B with the data byte 32H. |
3. Between a memory location and a register. |
3. From a memory location 2000H to register B. |
4. Between an I/O device and the accumulator. |
4.From an input keyboard to the accumulator. |
ARITHMETIC OPERATIONS
These instructions perform
arithmetic operations such as addition, subtraction, increment, and
decrement.
Addition - Any 8-bit
number, or the contents of a register or the contents of a memory location can
be added to the contents of the accumulator and the sum is stored in the
accumulator. No two other 8-bit registers can be added directly (e.g., the
contents of register B cannot be added directly to the contents of the register
C). The instruction DAD
is an exception; it adds 16-bit data directly in register
pairs.
Subtraction - Any 8-bit
number, or the contents of a register, or the contents of a memory location can
be subtracted from the contents of the accumulator and the results stored in the
accumulator. The subtraction is performed in 2's compliment, and the results if
negative, are expressed in 2's complement. No two other registers can be
subtracted directly.
Increment/Decrement - The
8-bit contents of a register or a memory location can be incremented or
decrement by 1. Similarly, the 16-bit contents of a register pair (such as BC)
can be incremented or decrement by 1. These increment and decrement operations
differ from addition and subtraction in an important way; i.e., they can be
performed in any one of the registers or in a memory
location.
LOGICAL OPERATIONS
These instructions perform various logical operations with the contents of the accumulator.
AND, OR Exclusive-OR
- Any 8-bit number, or the contents of a register, or
of
a memory location can be logically ANDed, Ored, or Exclusive-ORed with
the
contents of the accumulator. The results are stored in the accumulator.
Rotate- Each bit in
the accumulator can be shifted either left or right to the next
position.
Compare- Any 8-bit
number, or the contents of a register, or a memory location can be
compared for equality, greater than, or less than, with the contents of the
accumulator.
Complement - The contents
of the accumulator can be complemented. All 0s are replaced by 1s and all 1s are
replaced by 0s.
BRANCHING OPERATIONS
This group of instructions
alters the sequence of program execution either conditionally or
unconditionally.
Jump - Conditional jumps
are an important aspect of the decision-making process in the programming. These
instructions test for a certain conditions (e.g., Zero or Carry flag) and alter
the program sequence when the condition is met. In addition, the instruction set includes an
instruction called
unconditional jump.
Call, Return, and Restart -
These instructions change the sequence of a program either by calling a
subroutine or returning from a subroutine. The conditional Call and Return
instructions also can test condition flags.
MACHINE CONTROL OPERATIONS
These instructions control
machine functions such as Halt, Interrupt, or do
nothing.
The microprocessor operations related to data manipulation can be summarized in four functions:
Some important aspects of
the instruction set are
noted below:
INSTRUCTION
FORMAT
An instruction is a command to
the microprocessor to perform a given task on a specified data. Each instruction has two parts:
one is task to be performed, called the operation code (opcode), and the second
is the data to be operated on, called the operand. The operand (or data) can be
specified in various ways. It may include 8-bit (or 16-bit ) data, an internal
register, a memory location, or 8-bit (or 16-bit) address. In some instructions,
the operand is implicit.
Instruction Word Size
The 8085 instruction set is
classified into the following three groups according to word
size:
In the 8085, "byte" and "word" are
synonymous because it is an 8-bit microprocessor. However, instructions are
commonly referred to in terms of bytes rather than
words.
ONE-BYTE INSTRUCTIONS
A 1-byte instruction includes the opcode and operand in the same byte. Operand(s) are internal register and are coded into the instruction.
For
example:
Task |
Op code |
Operand |
Binary Code |
Hex Code |
Copy the contents of the accumulator in the register C. |
MOV |
C,A |
0100 1111 |
4FH |
Add the contents of register B to the contents of the accumulator. |
ADD |
B |
1000 0000 |
80H |
Invert (compliment) each bit in the accumulator. |
CMA |
0010 1111 |
2FH |
These instructions are
1-byte instructions performing three different tasks. In the first instruction, both operand
registers are specified. In the second instruction, the operand B
is specified and the accumulator is assumed. Similarly, in the third instruction, the accumulator
is assumed to be the implicit operand. These instructions are stored in 8-bit
binary format in memory; each requires one memory location.
MOV rd, rs
rd <-- rs copies contents of rs into rd.
Coded as 01 ddd sss where
ddd is a code for one of the 7 general registers which is the destination of the
data, sss is the code of the source register.
Example: MOV A,B
Coded as 01111000 = 78H =
170 octal (octal was used extensively in instruction design of such
processors).
ADD r
A <-- A + r
TWO-BYTE INSTRUCTIONS
In a two-byte instruction, the first byte
specifies the operation code and the second byte specifies the operand. Source
operand is a data byte immediately following the opcode. For
example:
Task |
Opcode |
Operand |
Binary Code |
Hex Code |
|
Load an 8-bit data byte in the accumulator. |
MVI |
A, Data |
3E
Data |
First
Byte Second Byte |
Assume that the data byte
is 32H. The assembly language instruction is written as
Mnemonics |
Hex code |
MVI A, 32H |
3E 32H |
The instruction would require
two memory locations to store in memory.
MVI r,data
r <-- data
Example: MVI A,30H
coded as 3EH 30H as two contiguous bytes. This is an example of immediate
addressing.
ADI data
A <-- A + data
OUT port
where port is an 8-bit device
address. (Port) <-- A. Since the byte is not the data
but points directly to where it is located this is called direct
addressing.
THREE-BYTE INSTRUCTIONS
In a three-byte instruction, the first byte specifies the opcode, and the following two bytes specify the 16-bit address. Note that the second byte is the low-order address and the third byte is the high-order address.
opcode + data byte + data
byte
For
example:
Task |
Opcode |
Operand |
Binary code |
Hex Code |
|
Transfer the program sequence to the memory location 2085H. |
JMP |
2085H |
C3 85 20 |
First
byte Second
Byte Third Byte |
This instruction would require
three memory locations to store in memory.
Three byte instructions - opcode + data
byte + data byte
LXI rp, data16
rp is one of the pairs of registers BC, DE, HL used as 16-bit registers. The two data bytes are 16-bit data in L H order of significance.
rp <-- data16
Example:
LXI H,0520H coded as 21H 20H 50H in three bytes. This is also immediate addressing.
LDA addr
A <-- (addr) Addr is a 16-bit address in L H order. Example: LDA 2134H coded as 3AH 34H 21H. This is also an example of direct addressing.