| CISC
(Complex Instruction Set
Computer)
What is CISC?
CISC, which stands for Complex
Instruction Set Computer,
is a philosophy for designing
chips that are easy to program
and which make efficient use of
memory. Each instruction in a
CISC instruction set might perform
a series of operations inside
the processor. This reduces the
number of instructions required
to implement a given program,
and allows the programmer to learn
a small but flexible set of instructions.
Since the earliest machines were
programmed in assembly language
and memory was slow and expensive,
the CISC philosophy made sense,
and was commonly implemented in
such large computers as the PDP-11
and the DECsystem 10 and 20 machines.
Most common microprocessor designs
--- including the Intel(R) 80x86
and Motorola 68K series --- also
follow the CISC philosophy.
As we shall see, recent changes
in software and hardware technology
have forced a re-examination of
CISC. But first, let's take a
closer look at the decisions which
led to CISC.
CISC philosophy 1: Use
Microcode
The earliest processor designs
used dedicated (hardwire) logic
to decode and execute each instruction
in the processor's instruction
set. This worked well for simple
designs with few registers, but
made more complex architectures
hard to build, as control path
logic can be hard to implement.
So, designers switched tactics
--- they built some simple logic
to control the data paths between
the various elements of the processor,
and used a simplified microcode
instruction set to control the
data path logic. This type of
implementation is known as a microprogrammed
implementation.
In a microprogrammed system, the
main processor has some built-in
memory (typically ROM) which contains
groups of microcode instructions
which correspond with each machine-language
instruction. When a machine language
instruction arrives at the central
processor, the processor executes
the corresponding series of microcode
instructions.
Because instructions could be
retrieved up to 10 times faster
from a local ROM than from main
memory, designers began to put
as many instructions as possible
into microcode. In fact, some
processors could be ordered with
custom microcode which would replace
frequently used but slow routines
in certain application.
There are some real advantages
to a microcoded implementation:
since the microcode memory can
be much faster than main memory,
an instruction set can be implemented
in microcode without losing much
speed over a purely hard-wired
implementation.
new
chips are easier to implement
and require fewer transistors
than implementing the same instruction
set with dedicated logic, and...
a microprogrammed design can be
modified to handle entirely new
instruction sets quickly.
Using microcoded instruction sets,
the IBM 360 series was able to
offer the same programming model
across a range of different hardware
configurations.
Some machines were optimized
for scientific computing, while
others were optimized for business
computing. However, since they
all shared the same instruction
set, programs could be moved from
machine to machine without re-compilation
(but with a possible increase
or decrease in performance depending
on the underlying hardware.)
This kind of flexibility and
power made microcoding the preferred
way to build new computers for
quite some time.
CISC philosophy 2: Build
"rich" instruction sets
One of the consequences of using
a microprogrammed design is that
designers could build more functionality
into each instruction. This not
only cut down on the total number
of instructions required to implement
a program, and therefore made
more efficient use of a slow main
memory, but it also made the assembly-language
programmer's life simpler.
Soon, designers were enhancing
their instruction sets with instructions
aimed specifically at the assembly
language programmer. Such enhancements
included string manipulation operations,
special looping constructs, and
special addressing modes for indexing
through tables in memory.
For example:
ABCD Add Decimal with Extend
ADDA Add Address
ADDX Add with Extend
ASL Arithmentic Shift Left
CAS Compare and Swap Operands
NBCD Negate Decimal with Extend
EORI Logical Exclusive OR Immediate
TAS Test Operand and Set
CISC philosophy 3: Build
high-level instruction sets
Once designers started building
programmer-friendly instruction
sets, the logical next step was
to build instruction sets which
map directly from high-level languages.
Not only does this simplify the
compiler writer's task, but it
also allows compilers to emit
fewer instructions per line of
source code.
Modern CISC microprocessors, such
as the 68000, implement several
such instructions, including routines
for creating and removing stack
frames with a single call.
For example:
DBcc Test Condition, Decrement
and Branch
ROXL Rotate with Extend Left
RTR Return and Restore Codes
SBCD Subtract Decimal with Extend
SWAP Swap register Words
CMP2 Compare Register against
Upper and Lower Bounds
The rise of CISC
CISC Design Decisions:
use microcode
build rich instruction sets
build high-level instruction sets
Taken together, these three decisions
led to the CISC philosophy which
drove all computer designs until
the late 1980s, and is still in
major use today. (Note that "CISC"
didn't enter the computer designer's
vocabulary until the advent of
RISC --- it was simply the way
that everybody designed computers.)
The next lesson discusses the
common characteristics that all
CISC designs share, and how those
characteristics affect the operation
of a CISC machine.
Characteristics of a
CISC design
Introduction
While the chips that emerged from
the 1970s and 1980s followed their
own unique design paths, most
were bound by what we are calling
the "CISC Design Decisions".
These chips all have similar instruction
sets, and similar hardware architectures.
In general terms, the instruction
sets are designed for the convenience
of the assembly-language programmer
and the hardware designs are fairly
complex.
Instruction sets
The design constraints that led
to the development of CISC (small
amounts of slow memory, and the
fact that most early machines
were programmed in assembly language)
give CISC instruction sets some
common characteristics:
A 2-operand format, where instructions
have a source and a destination.
For example, the add instruction
"add #5, D0" would add
the number 5 to the contents of
register D0 and place the result
in register D0.
Register
to register, register to memory,
and memory to register commands.
Multiple addressing modes for
memory, including specialized
modes for indexing through arrays
Variable length instructions where
the length often varies according
to the addressing mode
Instructions which require multiple
clock cycles to execute. If an
instruction requires additional
information before it can run
(for example, if the processor
needs to read in two memory locations
before operating on them), collecting
the extra information will require
extra clock cycles. As a result,
some CISC instructions will take
longer than others to execute.
Hardware architectures
Most CISC hardware architectures
have several characteristics in
common:
Complex instruction-decoding logic,
driven by the need for a single
instruction to support multiple
addressing modes.
A small number of general purpose
registers. This is the direct
result of having instructions
which can operate directly on
memory and the limited amount
of chip space not dedicated to
instruction decoding, execution,
and microcode storage.
Several special purpose registers.
Many CISC designs set aside special
registers for the stack pointer,
interrupt handling, and so on.
This can simplify the hardware
design somewhat, at the expense
of making the instruction set
more complex.
A "Condition code" register
which is set as a side-effect
of most instructions. This register
reflects whether the result of
the last operation is less than,
equal to, or greater than zero,
and records if certain error conditions
occur.
The ideal CISC machine
CISC processors were designed
to execute each instruction completely
before beginning the next instruction.
Even so, most processors break
the execution of an instruction
into several definite stages;
as soon as one stage is finished,
the processor passes the result
to the next stage:
An
instruction is fetched from main
memory.
The
instruction is decoded: the controlling
code from the microprogram identifies
the type of operation to be performed,
where to find the data on which
to perform the operation, and
where to put the result. If necessary,
the processor reads in additional
information from memory.
The instruction is executed. the
controlling code from the microprogram
determines the circuitry/hardware
that will perform the operation.
The results are written to memory.
In an ideal CISC machine, each
complete instruction would require
only one clock cycle (which means
that each stage would complete
in a fraction of a cycle.) In
fact, this is the maximum possible
speed for a machine that executes
1 instruction at a time.
A realistic CISC machine
In reality, some instructions
may require more than one clock
per stage, as the animation shows.
However, a CISC design can tolerate
this slowdown since the idea behind
CISC is to keep the total number
of cycles small by having complicated
things happen within each cycle.
CISC and the Classic Performance
Equation
The usual equation for determining
performance is the sum for all
instructions of (the number of
cycles per instruction * instruction
cycle time) = execution time.
This allows you to speed up a
processor in 3 different ways
--- use fewer instructions for
a given task, reduce the number
of cycles for some instructions,
or speed up the clock (decrease
the cycle time.)
CISC tries to reduce the number
of instructions for a program,
and (as we will see) RISC tries
to reduce the cycles per instruction.
CISC Pros and Cons
The advantages of CISC
At the time of their initial development,
CISC machines used available technologies
to optimize computer performance.
Microprogramming is as easy as
assembly language to implement,
and much less expensive than hardwiring
a control unit.
The ease of microcoding new instructions
allowed designers to make CISC
machines upwardly compatible:
a new computer could run the same
programs as earlier computers
because the new computer would
contain a superset of the instructions
of the earlier computers.
As each instruction became more
capable, fewer instructions could
be used to implement a given task.
This made more efficient use of
the relatively slow main memory.
Because microprogram instruction
sets can be written to match the
constructs of high-level languages,
the compiler does not have to
be as complicated.
The disadvantages of CISC
Still, designers soon realized
that the CISC philosophy had its
own problems, including:
Earlier generations of a processor
family generally were contained
as a subset in every new version
--- so instruction set & chip
hardware become more complex with
each generation of computers.
So that as many instructions as
possible could be stored in memory
with the least possible wasted
space, individual instructions
could be of almost any length---this
means that different instructions
will take different amounts of
clock time to execute, slowing
down the overall performance of
the machine.
Many specialized instructions
aren't used frequently enough
to justify their existence ---
approximately 20% of the available
instructions are used in a typical
program.
CISC instructions typically set
the condition codes as a side
effect of the instruction. Not
only does setting the condition
codes take time, but programmers
have to remember to examine the
condition code bits before a subsequent
instruction changes them.
Advertisement
Do you need help with MCSE
training? If you are in need of computer
training, we can lend a hand. Offering comprehensive training in
A+ Certification and
IT certification, you will become a computer pro in no time! Computer
training is a skill you will use all throughout your life!

|