CMSC311 Second Day
CMSC311 Second Day
Topics
Binary Representations
Base 2 Number Representation
Represent 1521310 as 111011011011012 Represent 1.2010 as 1.0011001100110011[0011]2 Represent 1.5213 X 104 as 1.11011011011012 X 213
Electronic Implementation
Easy to store with bistable elements Reliably transmitted on noisy and inaccurate wires
0 1 0
3.3V 2.8V
0.5V
0.0V
2 CMSC 313, F 09
to to to
Or 0xfa1d37b
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
CMSC 313, F 09
Conceptually very large array of bytes Actually implemented with hierarchy of different memory types System provides address space private to particular process
Program being executed
Program can clobber its own data, but not that of others
Where different program objects should be stored All allocation within single virtual address space
CMSC 313, F 09
Machine Words
Machine Has Word Size
CMSC 313, F 09
Bytes Addr. 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 0013 0014 0015
CMSC 313, F 09
Address of first byte in word Addresses of successive words differ by 4 (32-bit) or 8 (64-bit) 1 word equals to 4 byte In 64 bits, 1 word equals 8 bytes.
Addr = 0008 ??
Addr = 0008 ??
Addr = 0012 ?? 6
Data Representations
Sizes of C Objects (in Bytes)
C Data Type
char 1 short 2 int
x86-64
8 8 10/16
CMSC 313, F 09
Byte Ordering
How should bytes within multi-byte word be ordered in memory?
Conventions
CMSC 313, F 09
Little Endian
Example
Big Endian
01
Little Endian
23
45
67
67
9
45
23
01
CMSC 313, F 09
Text representation of binary machine code Generated by program that reads the machine code
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
10
11
CMSC 313, F 09
Result (Linux):
int a = 15213;
0x11ffffcb8 0x11ffffcb9 0x11ffffcba 0x6d 0x3b 0x00
0x11ffffcbb
12
0x00
CMSC 313, F 09
Representing Integers
int A = 15213; int B = -15213;
Decimal: 15213 Binary: Hex: IA32 A 6D 3B 00 00 Sun A 00 00 3B 6D IA32 B 93 C4 FF FF 0011 1011 0110 1101 3 B 6 Sun B FF FF C4 93 D
13
CMSC 313, F 09
Representing Pointers
int B = -15213; int *P = &B;
Sun P EF FF FB 2C IA32 P D4 F8 FF BF
Representing Strings
Strings in C
Compatibility
15
CMSC 313, F 09
Boolean Algebra
Developed by George Boole in 19th Century
And
Or
A&B = 1 when both A=1 and B=1
Not
~A = 1 when A=0
Exclusive-Or (xor)
16
CMSC 313, F 09
A&~B
A ~A ~B
B ~A&B
= A^B
17
CMSC 313, F 09
18
CMSC 313, F 09
Width w bit vector represents subsets of {0, , w1} aj = 1 if j A 01101001 { 0, 3, 5, 6 } 76543210 01010101 76543210
{ 0, 2, 4, 6 }
Operations
& Intersection 01000001 { 0, 6 } | Union 01111101 { 0, 2, 3, 4, 5, 6 } ^ Symmetric difference 00111100 { 2, 3, 4, 5 } ~ Complement 10101010 { 1, 3, 5, 7 }
CMSC 313, F 09
19
Bit-Level Operations in C
Operations &, |, ~, ^ Available in C
0xBE
--> 101111102 111111112
~0x00 -->
~000000002
0xFF
-->
--> -->
0x41 0x7D
&&, ||, !
View 0 as False Anything nonzero as True Always return 0 or 1 Early termination (short-cut evaluation)
21
Shift Operations
Left Shift:
x << y
Argument x 01100010 << 3 Log. >> 2 00010000 00011000
Right Shift:
x >> y
Logical shift
Fill with 0s on left
Arithmetic shift
Replicate most significant bit on
right
Undefined Behavior
22
CMSC 313, F 09
C operator quiz
int x = 44;
int y = 10; int z;
z = x & y; printf( %x, %d, z, z ); /* output: 0x10, 8 */
z = y | x; printf( %x, %d, z, z ); /* output: 0x2E, 46 */ z = (x & 0x4) << 2; printf( %x, %d, z, z ); /* output: 0x20, 32 */ z = (y | 5) & 0x3; /* output: 0x3, 3 */ printf( %x, %d, z, z ); z = x && y; printf( %d, z ); /* output: 1 */
23
CMSC 313, F 09