340 likes | 651 Views
Integer arithmetic. Depends what you mean by “ integer ”. Assume at 3-bit string. Then we define: zero = 000 one = 001 Use zero, one and binary addition: Zero 000 One + 001 001 Zero + one = one. Makes sense!.
E N D
Integer arithmetic • Depends what you mean by “integer”. • Assume at 3-bit string. • Then we define: zero = 000 one = 001 • Use zero, one and binary addition: Zero 000 One + 001 001 • Zero + one = one. • Makes sense!
Add one repeatedly, use up all possible patterns: Zero 000 1 001 2 010 3 011 4 100 5 101 6 110 7 111 • Called the; Unsigned Integer System. • No negative integers!
Two additions: 2 010 + 3 + 011 5 4 100 + 5 + 101 9
Two additions: 2 010 + 3 + 011 5 101 Yes! 5 = 101 4 100 + 5 + 101 9 001 But 001 represents one. is 4 + 5 = 1???
Addition of unsigned integers Error detected by presence of “carry”
How do we subtract unsigned integers? We need the concept of the; “Two’s complement”
One’s complement • Take any string; • Invert every bit; 0 1 • This is One’s complement. • "NOT”.
Two’s complement • Given a string; • One's complement; • then add one. • This is called; two’s complement
To subtract unsigned A-B • Perform: A + 2’s compl (B) = A + Not (B) + 1
Example: 5 101 101 - 3 - 011 + 100 2 + 1 010 3 011 011 - 5 - 101 + 010 - 2 + 1 110 =2; Good! Carry! =6; BAD! No Carry!
Subtraction of unsigned integers Error detected by absence of carry! • Warning: Some machines invert the carry bit on subtraction • So that "carry" => Error for both add and sub
Conclusion • For unsigned arithmetic we are interested in carry • Pay attention! I never used the word "overflow" that's something completely different. • Also notice: • 3-bit operands gave 3-bit results. • Don't be tempted to write that 4'th bit down!
How about negative numbers? • How should we represent -1? • How would we compute 0 - 1? 0 + 2's compl (1) • We choose this as our "-1" 1 = 001 - 1 = 110 + 1 111
Repeatedly add -1: Zero 000 - 1 111 - 2 110 Less than - 3 101 zero - 4 110 - 5 011 No! • High order bit called "sign bit"
Signed 3-bit integers 3 011 2 010 1 001 0 000 -1 111 -2 110 -3 101 -4 100 Not symmetrical around zero!!!
Sign bit • The high order bit in a number • Also called "N"-bit • Value is negative when this bit is "1"
Let's try A + B 1 001 1 001 +2 010 +(-1) 111 3 011 0 *000 • Both results is OK • But: Left case: no carry Right case: carry • Conclusion: For signed addition carry is worthless • Same conclusion for signed subtraction * carry
Some additions A 1 0 0 1 2 0 1 0 +2 0 1 0 + 2 0 1 0 34 -1 1 1 1 -1 1 1 1 +(-3) 1 0 1 +(-4) 1 0 0 -4 -5 1 0 0 1 -2 1 1 0 +(-2) 1 0 0 +1 0 0 1 -1 -1
Some additions B 1 0 0 1 2 0 1 0 +2 0 1 0 + 2 0 1 0 3 0 1 1 4 1 0 0 -1 1 1 1 -1 1 1 1 +(-3) 1 0 1 +(-4) 1 0 0 -4C 1 0 0 -5 C 0 1 1 1 0 0 1 -2 1 1 0 +(-2) 1 0 0 +1 0 0 1 -1 1 1 1 -1 1 1 1
Some additions C 1 0 0 1 2 0 1 0 +2 0 1 0 + 2 0 1 0 3 0 1 1 4 1 0 0 3 -4 OK BAD -1 1 1 1 -1 1 1 1 +(-3) 1 0 1 +(-4) 1 0 0 -4C 1 0 0 -5 C 0 1 1 -4 3 OK BAD 1 0 0 1 -2 1 1 0 +(-2) 1 0 0 +1 0 0 1 -1 1 1 1 -1 1 1 1 -1 -1 OK OK
Some additions D 1 0 0 1 2 0 1 0 +2 0 1 0 + 2 0 1 0 3 0 1 1 4 1 0 0 3 -4 OK BAD -1 1 1 1 -1 1 1 1 +(-3) 1 0 1 +(-4) 1 0 0 -4C 1 0 0 -5 C 0 1 1 -4 3 OK BAD 1 0 0 1 -2 1 1 0 +(-2) 1 0 0 +1 0 0 1 -1 1 1 1 -1 1 1 1 -1 -1 OK OK
Error during signed addition: • R = A + B • A, B same sign and • R opposite sign • called overflow • Notice: Mathematically, signed addition is the same as unsigned addition • The same is true for signed subtraction and unsigned subtraction A - B –> A + (-B) –> A + 2's compl (B)
Some subtractions A 3 0 1 1 3 0 1 1 - 1 + 1 1 1 -(-1) + 0 0 1 24 -1 1 1 1 1 0 0 1 - (-1) + 0 0 1 - (-1) + 0 0 1 0 2 - 3 1 0 1 - 4 1 0 0 - 1 + 1 1 1 - 1 + 1 1 1 -4- 5
Some subtractions B 3 0 1 1 3 0 1 1 - 1 + 1 1 1 -(-1) + 0 0 1 2C 0 1 0 4 1 0 0 -1 1 1 1 1 0 0 1 - (-1) + 0 0 1 - (-1) + 0 0 1 0C 0 0 0 2 0 1 0 - 3 1 0 1 - 4 1 0 0 - 1 + 1 1 1 - 1 + 1 1 1 -4C 1 0 0 - 5C 0 1 1
Some subtractions C 3 0 1 1 3 0 1 1 - 1 + 1 1 1 -(-1) + 0 0 1 2C 0 1 0 4 1 0 0 2 -4 OK BAD -1 1 1 1 1 0 0 1 - (-1) + 0 0 1 - (-1) + 0 0 1 0C 0 0 0 2 0 1 0 0 2 OK OK - 3 1 0 1 - 4 1 0 0 - 1 + 1 1 1 - 1 + 1 1 1 -4C 1 0 0 - 5C 0 1 1 -4 3 OK BAD
Some subtractions D 3 0 1 1 3 0 1 1 - 1 + 1 1 1 -(-1) + 0 0 1 2C 0 1 0 4 1 0 0 2 -4 OK BAD -1 1 1 1 1 0 0 1 - (-1) + 0 0 1 - (-1) + 0 0 1 0C 0 0 0 2 0 1 0 0 2 OK OK - 3 1 0 1 - 4 1 0 0 - 1 + 1 1 1 - 1 + 1 1 1 -4C 1 0 0 - 5C 0 1 1 -4 3 OK BAD
Error during signed subtraction: • R = A - B • A, B different sign and • B, R same sign • called overflow
Arithmetic- logic unit (ALU) C = carry V = overflow N = sign bit of R Z = 1 if R = 0 Condition codes C, V, N, Z 32 A 32 C 32 B Operation
Compare two unsigned numbers? • is A < B ? • Easy! Compute A - B and examine carry • But – to compare two signed numbers? • is A < B ? • Most common mistake: • Compute R = A - B, then look at sign of R. • If R < 0 then A < B (N-bit) • Not good enough!
To compare two signed numbers: • What about • A = - 4 • B = 3 • - 4 100 • - 3 + 101 • c 001 • “If R neg then A < B” • We conclude A ≥ B, that is • - 4 ≥ 3 • Wrong!
Some examples A 3 0 1 1 3 0 1 1 - 1 + 1 1 1 -(-1) + 0 0 1 -1 1 1 1 1 0 0 1 - (-1) + 0 0 1 - (-1) + 0 0 1 - 3 1 0 1 - 4 1 0 0 - 1 + 1 1 1 - 1 + 1 1 1
Some examples B 3 0 1 1 3 0 1 1 - 1 + 1 1 1 -(-1) + 0 0 1 2C 0 1 0 4 1 0 0 3 < +1? No! 3 < -1? No! -1 1 1 1 1 0 0 1 - (-1) + 0 0 1 - (-1) + 0 0 1 0C 0 0 0 2 0 1 0 -1 < -1? No! 1 < -1? No! - 3 1 0 1 - 4 1 0 0 - 1 + 1 1 1 - 1 + 1 1 1 -4C 1 0 0 - 5C 0 1 1 -3 < +1? Yes! -4 < 1? Yes!
Some examples C 3 0 1 1 3 0 1 1 - 1 + 1 1 1 -(-1) + 0 0 1 2C 0 1 0 4 1 0 0 3 < +1? No! 3 < -1? No! N = 0, V = 0 N = 1, V = 1 -1 1 1 1 1 0 0 1 - (-1) + 0 0 1 - (-1) + 0 0 1 0C 0 0 0 2 0 1 0 -1 < -1? No! 1 < -1? No! N = 0, V = 0 N = 0, V = 0 - 3 1 0 1 - 4 1 0 0 - 1 + 1 1 1 - 1 + 1 1 1 -4C 1 0 0 - 5C 0 1 1 -3 < +1? Yes! -4 < 1? Yes! N = 1, V = 0 N = 0, V = 1
To compare signed numbers: • Compute R = A - B • A < B true if N and V are different • A<B = exor(N,V) after computation