Transcript sept15

CS 111 – Sept. 15
• Chapter 2 – Manipulating data by performing
instructions
• “What is going on in the CPU?”
• Commitment:
– Please read through section 2.3
– Meet here tomorrow.
Basic anatomy
• Inside a computer are 2 parts
– CPU
– Memory
– These are connected by a data bus: an “HOV lane” where traffic
can go either way.
• CPU contains:
– ALU: arithmetic and logic unit
– Control unit: figures out what to do next
– Registers to hold values needed for calculation
• Memory (RAM) contains:
– Software: list of instructions the CPU needs to perform
– Data: Input and output values need to be stored while program
runs
Stored program idea
• Program = software = list of instructions for CPU to do
• Programs reside in memory
• CPU will do 1 instruction at a time
• For each instruction, we do the following:
–
–
–
–
Fetch it from memory
Decode – figure out what it means
Execute – do it
And then we continue with the next instruction… until the
program is finished.
Simple example
• A program to add two numbers.
• This program may reside at bytes 100-116 in RAM.
• The two numbers we wish to add are located at bytes
200 and 204 in RAM.
• We want the result to go into memory at byte 208.
• Program may go something like this:
–
–
–
–
Load the value at Memory[200] into register 1.
Load the value at Memory[204] into register 2.
Add registers 1 and 2, and put result in register 3.
Store the value from register 3 into Memory[208].
• Note that the bus is communicating instructions (RAM to
CPU) as well as data (both ways).
Machine language
• Unfortunately, instructions for CPU can’t be in English,
French, etc.
• Machine language = binary (or hex) representation of
our instructions.
– Each type of computer has its own machine
language.
• This is the oldest form of “computer programming”.
Later we’ll look at much more intuitive ways to convey
instructions. 
• Verbs: Instruction set. e.g. Add, subtract, load, store…
• Nouns: Operands such as: registers, memory locations,
constants, other instructions
Verbs
3 kinds of instructions (instruction set)
• Data transfer, using the bus
– Load a value from memory into a CPU register
Very similar to fetching an instruction!
– Store a value from a CPU register into memory
• ALU
– Bit manipulation: AND, OR, XOR, NOT, shift left, shift right, …
– Arithmetic: add, sub, mul, div, remainder, =, <, >, , , ≠, …
• Control
– “Go to” another instruction in program. In other words, interrupt
normal sequence of instructions.
– Can be conditional or unconditional
Example language
• Our book illustrates with an example HW.
• 256 bytes of RAM: addressable by 8 bits
• CPU contains
– Instruction register
– Program counter
– 16 general purpose registers: addressable by 4 bits
• Each register is 1 byte
• Each instruction is 2 bytes = 16 bits = 4 hex digits long
• Instruction format:
– First 4 bits are the opcode = specify which instruction type
– Other 12 bits are operand(s)
• What do instructions mean? See pp. 602-603.
Example instructions
• Note: 16 possible opcodes: 4 bit opcode
• Note: 16 possible registers: register number also 4 bits
• Opcode 5 is used for adding
– Expects 3 register operands
– 5RST means R = S + T, where R, S and T are register numbers
– Ex. 5123 means
Add registers 2 and 3 and put result in register 1.
• Opcode 2 is for putting a constant in a register
– Expects a register operand, and an 8-bit constant operand
– 2RXX means R = XX, where XX is some 8-bit pattern
– Ex. 27c9 means
Put the hexidecimal “c9” into register 7.
• Try an example using both types of instructions.
More instructions
• Opcode 1 is for loading a memory value into a register
– Expects a register operand (4 bits), and a memory address from
which to load (8 bits).
– Ex. 1820 means to go out to memory at address [20], grab the
contents and load it into register 8. (It does not mean put the
number 20 in register 8.)
• Opcode 3 is a store = opposite of load
– Ex. 3921 means to take the value in register 9, and put it into
memory at location [21]. (It does not mean put the number 9 into
memory location 21.)
• Opcode C (hex code for 12) is for telling CPU it’s done.
– Expects operand to be 12 zero-bits.