COMPUTER ORGANIZATION
AND ASSEMBLY LANGUAGE
Lecture 9
Today
So far
Write any program in MIPS assembly language
Convert into binary instructions
Today
How are numbers represented
How are they added, subtracted, multiplied
divided
Numbers
Bits are just bits (no inherent meaning)
conventions define relationship between bits and numbers
Unsigned Numbers
0 - 231
Large Numbers
Avogadro's number
6.0221415 × 1023 ~ 64 bits
Signed Numbers
How to represent –ve numbers
Fractions
How to represent
14159265.3
Unsigned Numbers
Representation(d31 d30 … d2 d1 d0)2 = d31*2
31 + d30*230 + … d2*2
2 + d1 * 21 + d0*20
0000 0000 0000 0000 0000 0000 0000 0000 = 010
0000 0000 0000 0000 0000 0000 0000 0001 = 110
0000 0000 0000 0000 0000 0000 0000 0010 = 210
. . . . . . . . . .
1111 1111 1111 1111 1111 1111 1111 1111 = 4,294,967,29510
Minimum Number= 0 = (0000….0000)2
Maximum Number= (1111….1111)2 = (1 0000….0000)2 – 1 = 232-1
32
Addition of Unsigned Numbers
Addition0 0 1 1 3
+ 0 0 1 0 +2
---------------------
0 1 0 1 5
What happens when
Addition results in a number that does not fit in
32-bits
232-1 + 232-1 = 2*232 – 2 = 233 -2 -- needs 33 bits
Overflow
Subtraction of Unsigned
Numbers
Subtraction0 0 1 1 3
- 0 0 1 0 -2
---------------------
0 0 0 1 1
What happens when
You subtract greater number from smaller
number
Need –ve numbers
Signed Numbers
One simple strategy
Sign Magnitude Representation
Leftmost bit is sign bit
Rest 31-bits are unsigned
Representation (d31 d30 … d2 d1 d0)2 = (-1)*d31 + d30*2
30 + … d2*22 + d1 * 21 + d0*2
0
Number Range = -(231-1), …,-1, 0,+1, …, +(231-1)
How to find –ve of a number
Just change the sign-bit
Addition & Subtraction
Add/Sub the 31-bits, and change the sign bit logically
Need a seamless way to perform these very frequent operations
31-bit magnitude
1-bit sign
2s Complement Representation
Representation (d31 d30 … d2 d1 d0)2 = d31*(-2)31 + d30*2
30 + … d2*22 + d1 * 21 + d0*2
0
Examples
0000 0000 0000 0000 0000 0000 0000 0000two = 0ten0000 0000 0000 0000 0000 0000 0000 0001two = + 1ten0000 0000 0000 0000 0000 0000 0000 0010two = + 2ten...
0111 1111 1111 1111 1111 1111 1111 1110two = + 2,147,483,646ten0111 1111 1111 1111 1111 1111 1111 1111two = + 2,147,483,647ten
1000 0000 0000 0000 0000 0000 0000 0000two = – 2,147,483,648ten
1000 0000 0000 0000 0000 0000 0000 0001two = – 2,147,483,647ten1000 0000 0000 0000 0000 0000 0000 0010two = – 2,147,483,646ten...
1111 1111 1111 1111 1111 1111 1111 1101two = – 3ten1111 1111 1111 1111 1111 1111 1111 1110two = – 2ten1111 1111 1111 1111 1111 1111 1111 1111two = – 1ten
Add 2’s Complement Numbers
Just like unsigned numbers
7 + 6 = 13
-4 + -3 = -7
0 1 1 10 1 1 0+1 1 0 1
11
1 1 0 01 0 1 1+0 1 1 1
1
0
0
0
11
1
Subtract 2’s Complement
Numbers
A – B = A + (-B) = A + (!B + 1)
Just like unsigned numbers
6 – 7 = 6 + (~7 + 1) = -1
-3 – 5 = -3 + (~(5)+1) = -8
1 1 0 1
0 1 0 1-
1 0 0 0
0 1 1 0
0 1 1 1-
1 1 1 1
00
1
0 1 1 0
1 0 0 1+
1 1 1 1
01
1
10
1
1 1 0 1
1 0 1 1+
1 0 0 0
11
1
Overflow
When result of operation too large to fit in 32-bits7 – (-13) = 20
Detect Overflows Positive + Positive -> Negative
Negative + Negative -> Positive
Positive – Negative -> Negative
Negative – Positive -> Positive
Consider the operations A + B, and A – B Can overflow occur if B is 0 ?
Can overflow occur if A is 0 ?
0 1 1 10 0 1 1-
01
0 1 1 11 1 0 1+0 1 0 0
001
Effects of Overflow
An exception (interrupt) occurs
Control jumps to predefined address for exception
Interrupted address is saved for possible
resumption
Details based on software system / language
example: flight control vs. homework assignment
Don't always want to detect overflow
new MIPS instructions: addu, addiu, subu
note: addiu still sign-extends!
note: sltu, sltiu for unsigned comparisons
Top Related