Bits and Bytes: Giving Credit Where Credit Is Due
Bits and Bytes: Giving Credit Where Credit Is Due
JDEP 284H
Foundations of Computer Systems
Most
http://cse.unl.edu/~goddard/Courses/JDEP284
Topics
Why
bits?
Representing information as bits
zBinary/Hexadecimal
zByte representations
numbers
characters and strings
Instructions
Bit-level
Implementing Electronically
Hard to store
Hard to transmit
manipulations
zBoolean algebra
zExpressing in C
Binary Representations
Electronic Implementation
z Program can clobber its own data, but not that of others
3.3V
2.8V
0.5V
0.0V
Page 1
Machine Words
Byte = 8 bits
Binary 000000002
Decimal:
010
Hexadecimal
0016
to
to
to
111111112
25510
FF16
Or 0xfa1d37b
al
m ry
x
ci na
He De Bi
0 0 0000
1 1 0001
2 2 0010
3 3 0011
4 4 0100
5 5 0101
6 6 0110
7 7 0111
8 8 1000
9 9 1001
A 10 1010
B 11 1011
C 12 1100
D 13 1101
E 14 1110
F 15 1111
z Including addresses
z Limits addresses to 4GB
z Becoming too small for memory-intensive applications
Word-Oriented Memory
Organization
32-bit 64-bit
Words Words
Data Representations
Bytes Addr.
Addr
=
0000
??
Addr
=
0000
??
Addr
=
0004
??
Addr
=
0008
??
Addr
=
0008
??
Addr
=
0012
??
Typical 32-bit
Intel IA32
4
4
1
2
4
8
8
4
4
4
1
2
4
8
10/12
4
4
8
1
2
4
8
8
8
z long int
z char
z short
z float
z double
z long double
z char *
10
Byte Ordering
Big Endian
Conventions
Little Endian
Example
Big Endian
Little Endian
01
67
11
23
45
45
23
67
01
12
Page 2
Disassembly
Example Fragment
Address
8048365:
8048366:
804836c:
Instruction Code
5b
81 c3 ab 12 00 00
83 bb 28 00 00 00 00
Assembly Rendition
pop
%ebx
add
$0x12ab,%ebx
cmpl
$0x0,0x28(%ebx)
Deciphering Numbers
Value:
Pad to 4 bytes:
Split into bytes:
Reverse:
0x12ab
0x000012ab
00 00 12 ab
ab 12 00 00
Printf directives:
%p: Print pointer
%x: Print Hexadecimal
13
14
Representing Integers
int A = 15213;
int B = -15213;
long int C = 15213;
int a = 15213;
printf("int a = 15213;\n");
Linux/Alpha A
6D
3B
00
00
Result (Linux):
Decimal: 15213
Binary:
Hex:
0x6d
0x11ffffcb9
0x3b
0x11ffffcba
0x00
0x11ffffcbb
0x00
Linux/Alpha B
93
C4
FF
FF
Linux C
Alpha C
Sun C
00
00
3B
6D
6D
3B
00
00
6D
3B
00
00
00
00
00
00
00
00
3B
6D
int a = 15213;
0x11ffffcb8
Sun A
Sun B
FF
FF
C4
93
15
Alpha P
Representing Pointers
int B = -15213;
int *P = &B;
Alpha Address
Hex:
Binary:
Sun P
EF
FF
FB
2C
16
Representing Floats
A0
FC
FF
FF
01
00
00
00
Float F = 15213.0;
Linux/Alpha F
00
B4
6D
46
Sun F
46
6D
B4
00
Sun Address
Hex:
Binary:
E
F
F
F
F
B
2
C
1110 1111 1111 1111 1111 1011 0010 1100
Linux Address
Hex:
Binary:
B
F
F
F
F
8
D
4
1011 1111 1111 1111 1111 1000 1101 0100
Hex:
Binary:
D4
F8
FF
BF
15213:
4
6
6
D
B
4
0
0
0100 0110 0110 1101 1011 0100 0000 0000
1110 1101 1011 01
18
Page 3
Representing Strings
Strings in C
Linux/Alpha S Sun S
31
35
32
31
33
00
z Arithmetic operation
z Read or write memory
31
35
32
31
33
00
z Conditional branch
Compatibility
20
Representing Instructions
int sum(int x, int y)
{
return x+y;
}
Boolean Algebra
Developed by George Boole in 19th Century
Alpha sum
00
00
30
42
01
80
FA
6B
Sun sum
PC sum
81
C3
E0
08
90
02
00
09
55
89
E5
8B
45
0C
03
45
08
89
EC
5D
C3
compatible
And
Or
A&B = 1 when both A=1 and
B=1
& 0 1
0 0 0
1 0 1
Not
~A = 1 when A=0
0 0 1
1 1 1
ExclusiveExclusive-Or (Xor
(Xor))
~
0 1
1 0
^ 0 1
0 0 1
1 1 0
21
22
Integer Algebra
Integer Arithmetic
A&~B
A
~B
~A
Connection when
A&~B | ~A&B
~A&B
= A^B
23
Z, +, *, , 0, 1 forms a ring
24
Page 4
Boolean Algebra
Boolean Algebra
Commutativity
A|B = B|A
A&B = B&A
Associativity
(A | B) | C = A | (B | C)
(A & B) & C = A & (B & C)
Product distributes over sum
A & (B | C) = (A & B) | (A & C)
Sum and product identities
A|0 = A
A&1 = A
Zero is product annihilator
A&0 = 0
Cancellation of negation
~ (~ A) = A
A+B = B+A
A*B = B*A
(A + B) + C = A + (B + C)
(A * B) * C = A * (B * C)
A * (B + C) = A * B + B * C
A+0 = A
A*1 =A
A*0 = 0
( A) = A
25
26
{0,1}, ^, &, , 0, 1
Identical to integers mod 2
is identity operation: (A) = A
A^A=0
A&A = A
Boolean: Absorption
A | (A & B) = A
A *A A
Property
A + (A * B) A
A & (A | B) = A
Boolean: Laws of Complements
A | ~A = 1
A * (A + B) A
A + A 1
z A is true or A is false
Boolean Ring
Boolean Ring
Commutative sum
Commutative product
Associative sum
Associative product
Prod. over sum
0 is sum identity
1 is prod. identity
0 is product annihilator
Additive inverse
A^B = B^A
A&B = B&A
(A ^ B) ^ C = A ^ (B ^ C)
(A & B) & C = A & (B & C)
A & (B ^ C) = (A & B) ^ (B & C)
A^0 = A
A&1 = A
A&0=0
A^A = 0
27
28
DeMorgans Laws
01101001
& 01010101
01000001
01000001
01101001
| 01010101
01111101
01111101
01101001
^ 01010101
00111100
00111100
~ 01010101
10101010
10101010
29
30
Page 5
Bit-Level Operations in C
Representation
{ 0, 2, 4, 6 }
01010101
76543210
&
|
^
~
~0x41 -->
0xBE
~010000012
Operations
Intersection
Union
Symmetric difference
Complement
01000001
01111101
00111100
10101010
{ 0, 6 }
{ 0, 2, 3, 4, 5, 6 }
{ 2, 3, 4, 5 }
{ 1, 3, 5, 7 }
~0x00 -->
--> 101111102
~000000002
0xFF
--> 111111112
-->
0x41
0x69 | 0x55
-->
0x7D
32
Shift Operations
Left Shift:
&&, ||, !
z View 0 as False
z Always return 0 or 1
Right Shift:
z Early termination
!0x41 -->
!0x00 -->
!!0x41 -->
Argument x 01100010
x >> y
<< 3
00010000
Log. >> 2
00011000
Argument x 10100010
0x00
0x01
0x01
Logical shift
z Fill with 0s on left
x << y
-->
-->
Arithmetic shift
<< 3
00010000
Log. >> 2
00101000
0x01
0x01
right
z Useful with twos complement
integer representation
33
34
Main Points
Its All About Bits & Bytes
Bitwise Xor is a
form of addition
With extra property
that every value is
its own additive
inverse
A^A=0
Numbers
Programs
Text
*x
*y
Begin
A^B
A^B
(A^B)^B = A
(A^B)^A = B
End
Word size
Byte ordering
Representations
35
36
Page 6