EC3003 - Sistem Komputer
Bagian 2 Representasi dan Manipulasi Data dalam Bit dan Byte
Departemen Teknik Elektro Institut Teknologi Bandung 2005
Pembahasan Representasi informasi dalam bentuk bit Biner/Heksadesimal Representasi byte Bilangan Karakter dan string Instruksi
Manipulasi level bit Aljabar Boolean Ekspresi dalam bahasa C
Bit dan Byte
2-2
Representasi Berbasis 10 Representasi bilangan berbasis 10
Berasal dari jari manusia, dikenal sebagai ‘digit’ Representasi yang biasa digunakan dalam transaksi finansial Digunakan juga dalam notasi ilmiah 1.2345 x 104
Sulit diimplementasikan secara elektronik Sulit untuk disimpan
ENIAC (komputer elektronik pertama) menggunakan 10 tabung hampa untuk mengimplementasikan satu digit
Sulit untuk dikirimkan
Perlu kepresisian tinggi untuk mengkodekan 10 level sinyal pada satu kawat
Sulit untuk mengimplementasikan fungsi logika digital Penjumlahan, perkalian, dll
Bit dan Byte
2-3
Representasi Biner Representsi bilangan berbasis 2
1234510 direpresentasikan 110000001110012 1.2010 direpresentasikan 1.0011001100110011[0011]…2 1.2345 X 104 direpresentasikan 1. 10000001110012 X 213
Implementasi elektronik
Elemen ‘bistable’ dapat disimpan dengan mudah Andal bila dikirimkan melalui kawat yang tidak akurat dan ber-derau 0
1
0
3.3V 2.8V 0.5V 0.0V Fungsi aritmatika dapat diimplemetasikan secara langsung Bit dan Byte
2-4
Mengkodekan Byte 1 byte = 8 bit Merepresentasikan bilangan : Biner dari 000000002 hingga 111111112 Desimal dari 010 hingga 25510 Heksadesimal dari 0016 hingga FF16 Representasi bilangan berbasis 16 Menggunakan karakter ‘0’ hingga ‘9’ dan ‘A’ hingga ‘F’ Pada bahasa pemrograman C, FA1D3716 ditulis 0xFA1D37 atau 0xfa1d37
Bit dan Byte
l a sa sim er k n 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
2-5
Ukuran Word Setiap komputer memiliki “ukuran word” tertentu Indikator ukuran data integer dan data pointer (alamat)
Kebanyakan komputer saat ini, 1 word = 32 bit (4 byte) Membatasi alokasi alamat hingga 4GB (232 byte) Dari alamat 0000.…0000 (0) hingga 1111.…1111 (4,294,967,295)
Nilai ini menjadi terlalu kecil bila digunakan pada aplikasi scientific dan database yang perlu menggunakan memori secara intensif
Sistem high-end menggunakan 64 bit (8 byte) Dapat mengalamati ≈ 1.8 X 1019 byte
Komputer dan compiler mendukung berbagai format data integer dan floating point memiliki kode dan panjang data berbeda Bit dan Byte
2-6
Organisasi Memori 32-bit
Alamat merupakan lokasi penyimpanan word data dalam memori Ukuran satu lokasi memori = satu byte Alamat menunjukkan lokasi byte pertama suatu word Alamat word berikutnya bertambah 4 (32 bit) atau 8 (64 bit) Perlu 4 lokasi memori untuk menyimpan data 32 bit
Bit dan Byte
64-bit
Addr = 0000 ?? Addr = 0000 ?? Addr = 0004 ??
Addr = 0008 ??
Addr = 0012 ??
Addr = 0008 ??
Byte Alamat 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 0013 0014 0015 2-7
Representasi Data Ukuran data pada format C (dalam byte) Tipe data Tipikal 32-bit char 1 short int 2 int 4 long int 4 float 4 double 8 long double 8 char * 4
Bit dan Byte
Alpha 64-bit 1 2 4 8 4 8 8 8
Keterangan
single precision double precision pointer
2-8
Aturan Pengurutan Byte Bagaimana setiap byte suatu word disusun dalam memori ? Aturan : Mesin Sun dan Mac adalah mesin “Big Endian” Byte LSB (Least Significant Byte) terletak di alamat paling TINGGI
Mesin Compaq Alpha dan PC adalah “Little Endian” Byte LSB (Least Significant Byte) terletak di alamat paling RENDAH
Bit dan Byte
2-9
Contoh Urutan Byte Big Endian : byte LSB terletak di alamat paling tinggi Little Endian : byte LSB terletak di alamat paling rendah Contoh Variabel x memiliki representasi 4 byte : 0x01234567 dimana MSB = 0x01(0000 0001) dan LSB = 0x67(0110 0111)
Alamat awal yang diberikan oleh &x adalah 0x100 Big Endian
0x100 0x101 0x102 0x103
01 Little Endian
45
67
0x100 0x101 0x102 0x103
67 Bit dan Byte
23
45
23
01 2-10
Membaca Urutan Byte Disassembly Mengartikan kode mesin Dihasilkan oleh suatu program yang dapat membaca kode mesin
Contoh potongan program : Alamat 8048365: 8048366: 804836c:
Kode instruksi 5b 81 c3 ab 12 00 00 83 bb 28 00 00 00 00
Mengartikan bilangan nilai : menjadi 4 bytes : dipisah per byte : dibalik : Bit dan Byte
Bahasa Assembly pop %ebx add $0x12ab,%ebx cmpl $0x0,0x28(%ebx)
0x12ab 0x000012ab 00 00 12 ab ab 12 00 00 2-11
Representasi Byte Data Kode untuk menampilkan representasi byte data Casting pointer menjadi unsigned char * menghasilkan array byte typedef unsigned char *pointer; void show_bytes(pointer start, int len) { int i; for (i = 0; i < len; i++) printf("0x%p\t0x%.2x\n", start+i, start[i]); printf("\n"); }
casting = mengganti tipe data menggunakan instruksi typedef
Bit dan Byte
printf directives: %p : print pointer %x : print hexadecimal 2-12
Hasil Eksekusi show_bytes Program utama : int a = 12345; printf("int a = 12345;\n"); show_bytes((pointer) &a, sizeof(int));
Hasil diperoleh (Linux) : int a = 12345;
Bit dan Byte
0x11ffffcb8
0x39
0x11ffffcb9
0x30
0x11ffffcba
0x00
0x11ffffcbb
0x00
2-13
Representasi Integer Desimal: 12345
int A = 12345; int B = -12345; long int C = 12345; Linux/Alpha A 39 30 00 00 Linux/Alpha B C7 CF FF FF Bit dan Byte
Biner:
0011 0000 0011 1001
Heksa:
3
0
3
9
Sun A
Linux C
Alpha C
Sun C
00 00 30 39
39 30 00 00
39 30 00 00 00 00 00 00
00 00 30 39
Sun B FF FF CF C7
Representasi two’s complement 2-14
Representasi Pointer (Alamat)
Alpha P
int B = -12345; int *P = &B; Alamat Alpha Heksa: Biner: Sun P EF FF FB 2C
1
F
F
F
F
F
C
A
0
0001 1111 1111 1111 1111 1111 1100 1010 0000
A0 FC FF FF 01 00 00 00
Alamat Sun Heksa: Biner:
E F F F F B 2 C 1110 1111 1111 1111 1111 1011 0010 1100
Alamat Linux Heksa: Biner:
B F F F F 8 D 4 1011 1111 1111 1111 1111 1000 1101 0100
Mesin dan compiler berbeda akan memberikan lokasi obyek berbeda Bit dan Byte
2-15
D4 F8 FF BF
Representasi Floating Point Float F = 12345.0;
Linux/Alpha F 00 E4 40 46
Sun F 46 40 E4 00
IEEE Single Precision Floating Point Representation Heksa: Biner: 12345:
4 6 4 0 E 4 0 0 0100 0110 0100 0000 1110 0100 0000 0000 1100 0000 1110 01
Tidak sama dengan representasi integer, tetapi konsisten di semua mesin Memperlihatkan relasi dengan integer, walau tidak terlihat jelas Bit dan Byte
2-16
Representasi String Strings dalam bahasa C char S[6] = "12345"; Direpresentasikan dalam array karakter Setiap karakter dikodekan dalam format ASCII Linux/Alpha S Sun S Kode karakter standar 7-bit 31 31 Karakter “0” memiliki kode 0x30 32 32 Digit i memiliki kode 0x30+i 33 33 String harus diakhiri dengan null 34 34 Karakter akhir = 0 35 35 Kompatibilitas 00 00 Setiap sistem yang menggunakan ASCII untuk menkodekan karakter akan memberikan hasil yang sama Data teks umumnya bersifat platformindependen Kecuali jika ada aturan lain tentang karakter akhir suatu baris Bit dan Byte
2-17
Representasi Kode Mesin Program dikodekan menjadi urutan instruksi Masing-masing berupa operasi sederhana Operasi aritmatika Membaca atau menulis memori Percabangan
Instruksi dikodekan sebagai byte Instruksi pada Alpha, Sun, Mac menggunakan 4 byte Reduced Instruction Set Computer (RISC)
PC menggunakan instruksi dengan panjang yang variabel Complex Instruction Set Computer (CISC)
Setiap mesin memiliki jenis instruksi dan pengkodean berbeda Umumnya kode tidak binary compatible
Program juga merupakan urutan byte
Bit dan Byte
2-18
Representasi Instruksi int sum(int x, int y) { return x+y; }
Pada contoh ini, Alpha & Sun menggunakan dua instruksi dengan panjang 4 byte Pada kasus lain memakai jumlah instruksi berbeda
PC menggunakan 7 instruksi dengan panjang 1, 2, dan 3 byte
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
Sama dengan NT dan Linux NT / Linux tidak ‘fully binary compatible’ Mesin yang berbeda menggunakan instruksi dan kode berbeda Bit dan Byte
2-19
Aljabar Boolean
Bit dan Byte
2-20
Aljabar Boolean Dikembangkan oleh George Boole pada abad 19 Representasi logika aljabar : 1 = “TRUE” dan 0 = “FALSE”
AND
OR
A&B = 1 jika A=1 dan B=1
NOT
& 0 1 0 0 0 1 0 1
~A = 1 jika A=0
~ 0 1 1 0 Bit dan Byte
A|B = 1 jika A=1 atau B=1
| 0 1 0 0 1 1 1 1
Exclusive-Or (XOR) A^B = 1 jika A=1 atau B=1, tapi tidak keduanya
^ 0 1 0 0 1 1 1 0 2-21
Aplikasi Aljabar Boolean Digunakan pada sistem digital oleh Claude Shannon Tesis Master di MIT 1937 Pemikiran tentang jaringan saklar relay Mengkodekan saklar tertutup = 1, saklar terbuka= 0 A&~B A
Koneksi terjadi bila:
~B
A&~B | ~A&B ~A
B ~A&B
Bit dan Byte
= A^B
2-22
Integer Aritmatika Integer aritmatika memiliki struktur matematika yang dikenal sebagai “Ring” → disebut juga Integer Ring 〈Z, +, *, –, 0, 1〉 = Ring
+ adalah operasi “tambah” * adalah operasi “kali” – adalah penjumlahan inversi 0 adalah identitas untuk tambah 1 adalah identitas untuk kali
Bit dan Byte
2-23
Aljabar Boolean 〈{0,1}, |, &, ~, 0, 1〉 = Aljabar Boolean | (OR) adalah operasi “tambah” & (AND) adalah operasi “kali” ~ adalah operasi “komplemen” (bukan penjumlahan inversi) 0 adalah identitas untuk tambah 1 adalah identitas untuk kali
Bit dan Byte
2-24
Aljabar Boolean ≈ Integer Ring Komutatif A|B = B|A A+B = B+A A&B = B&A A*B = B*A Asosiatif (A | B) | C = A | (B | C) (A + B) + C = A + (B + C) (A & B) & C = A & (B & C) (A * B) * C = A * (B * C) Distributif A & (B | C) = (A & B) | (A & C) A * (B + C) = A * B + B * C Identitas jumlahan dan perkalian A|0 = A A+0 = A A&1 = A A*1 =A Nol adalah annihilator perkalian A&0 = 0 A*0 = 0 Negasi dari negasi ~ (~ A) = A – (– A) = A Bit dan Byte
2-25
Aljabar Boolean ≠ Integer Ring Boolean: Distributif A | (B & C) = (A | B) & (A | C) A + (B * C) ≠ (A + B) * (B + C) Boolean: Idempotency A|A = A A +A≠A “A True” atau “A True” = “A True” A&A = A A *A≠A Boolean: Absorpsi A | (A & B) = A A + (A * B) ≠ A “A True” atau “A True dan B True” = “A True” A & (A | B) = A A * (A + B) ≠ A Boolean: hukum komplemen A | ~A = 1 A + –A ≠ 1 “A True” atau “A False” Ring: setiap elemen memiliki inversi penjumlahan A | ~A ≠ 0 A + –A = 0 Bit dan Byte
2-26
Boolean Ring 〈{0,1}, ^, &, Ι, 0, 1〉 = Boolean Ring Identik dengan integer mod 2 = 〈Z2, +2, *2, –2, 0, 1〉
Ι adalah operasi identitas: Sifat-sifat Boolean Ring : Komutatif penjumlahan Komutatif perkalian Asosiatif penjumlahan Asosiatif perkalian Distributif 0 identitas jumlah 1 identitas kali 0 annihilator kali Inversi penjumlahan Bit dan Byte
Ι (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 = 0 2-27
Relasi Antar Operasi Hukum DeMorgan Mengekspresikan & dalam bentuk |, dan sebaliknya A & B = ~(~A | ~B) A and B true jika and hanya jika A nor B false
A | B = ~(~A & ~B) A or B true jika dan hanya jika A and B keduanya tidak false
Exclusive-OR menggunakan Inclusive OR A ^ B = (~A & B) | (A & ~B) Hanya satu dari A and B true
A ^ B = (A | B) & ~(A & B) Salah satu A true, atau B true, tidak keduanya
Bit dan Byte
2-28
Operasi Aljabar Boolean Operasi vektor bit Operasi bitwise (bit per bit) 01101001 & 01010101 01000001 01000001
01101001 | 01010101 01111101 01111101
01101001 ^ 01010101 00111100 00111100
~ 01010101 10101010 10101010
Seluruh sifat-sifat aljabar Boolean digunakan di sini
Bit dan Byte
2-29
Representasi dan Operasi Set Representasi Set Lebar w pada bit vector merepresentasikan subset {0, …, w–1} aj = 1 jika j ∈ I A = 01101001 76543210
{ 0, 3, 5, 6 }
B = 01010101 76543210
{ 0, 2, 4, 6 }
Operasi Set
A&B A|B A^B ~B
Bit dan Byte
Irisan/Interseksi Union Berbeda simetrik Komplemen
01000001 01111101 00111100 10101010
{ 0, 6 } { 0, 2, 3, 4, 5, 6 } { 2, 3, 4, 5 } { 1, 3, 5, 7 } 2-30
Operasi Bit dalam C Operasi &, |, ~, ^ terdapat dalam bahasa C Dapat digunakan pada setiap tipe data integer long, int, short, char Setiap representasi bilangan dilihat sebagai bit vector Operasi bilangan dilakukan secara bit-wise Contoh (tipe data char) ~0x41 --> 0xBE ~010000012 --> 101111102 ~0x00 --> 0xFF ~000000002 --> 111111112 0x69 & 0x55 --> 0x41 011010012 & 010101012 --> 010000012 0x69 | 0x55 --> 0x7D 011010012 | 010101012 --> 011111012 Bit dan Byte
2-31
Operasi Logika dalam C OPERASI LOGIKA BERBEDA DENGAN OPERASI BIT Operator logika : &&, ||, !
0 dipandang sebagai “FALSE” Segala sesuatu yang tidak nol dipandang sebagai “TRUE” Selalu menghasilkan 0 atau 1 Terminasi awal Operasi a && 5/a tidak akan menyebabkan pembagian dengan nol
Contoh (tipe data char) !0x41 --> 0x00 !0x00 --> 0x01 !!0x41 --> 0x01 0x69 && 0x55 --> 0x69 || 0x55 --> p && *p Bit dan Byte
0x01 0x01 2-32
Operasi Shift Shift kiri: x << y Shift argumen x ke kiri sebanyak y posisi Membuang bit paling kiri Bagian kanan diisi dengan 0
Shift kanan: x >> y Shift argumen x ke kanan sebanyak y posisi Membuang bit paling kanan
Logical shift Bagian kiri diisi dengan 0
Arithmetic shift
Argumen x 01100010 << 3
00010000
Log. >> 2
00011000
Arit. >> 2
00011000
Argumen x 10100010 << 3
00010000
Log. >> 2
00101000
Arit. >> 2
11101000
Replikasi MSB bagian kanan Digunakan pada representasi integer two’s complement Bit dan Byte
2-33
Contoh Operasi XOR Bitwise XOR adalah bentuk penjumlahan Setiap nilai memiliki inversi jumlah (additive inverse) masing-masing
void funny(int *x, int *y) { *x = *x ^ *y; /* #1 */ *y = *x ^ *y; /* #2 */ *x = *x ^ *y; /* #3 */ }
A^A=0
Bit dan Byte
*x
*y
Begin
A
B
1
A^B
B
2
A^B
(A^B)^B = A
3
(A^B)^A = B
A
End
B
A 2-34
Ringkasan Semua berkisar tentang bit dan byte Bilangan Program Teks
Mesin yang berbeda memiliki aturan berbeda Ukuran word Urutan byte Representasi
Aljabar Boolean adalah operasi matematika Dasarnya mengkodekan “FALSE” = 0, “TRUE” = 1 Memiliki bentuk umum, digunakan pada operasi bit dalam C Baik digunakan untuk merepresentasikan dan memanipulasi set
Bit dan Byte
2-35