390 likes | 761 Views
Bagian 2 Representasi Data. Sekolah Teknik Elektro dan Informatika Institut Teknologi Bandung 2013. IF5011 Sistem dan Arsitektur Komputer B. Pembahasan. Representasi informasi dalam bentuk bit Biner/Heksadesimal Representasi byte Bilangan Karakter dan string Instruksi
E N D
Bagian 2Representasi Data Sekolah Teknik Elektro dan Informatika Institut Teknologi Bandung2013 IF5011 Sistem dan Arsitektur Komputer B
Pembahasan • Representasi informasi dalam bentuk bit • Biner/Heksadesimal • Representasi byte • Bilangan • Karakter dan string • Instruksi • Manipulasi level bit • Aljabar Boolean • Ekspresi dalam bahasa C
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
0 1 0 3.3V 2.8V 0.5V 0.0V 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 • Fungsi aritmatika dapat diimplemetasikan secara langsung
Desimal Heksa Biner 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 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
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
Organisasi Memori 32-bit 64-bit Byte Alamat • 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 0000 Addr = ?? 0001 0002 0000 Addr = ?? 0003 0004 0000 Addr = ?? 0005 0006 0004 0007 0008 Addr = ?? 0009 0010 0008 Addr = ?? 0011 0008 0012 Addr = ?? 0013 0014 0012 0015
Representasi Data • Ukuran data pada format C (dalam byte) Tipe data Tipikal 32-bit Alpha 64-bit Keterangan • char 1 1 • short int 2 2 • int 4 4 • long int 4 8 • float 4 4 single precision • double 8 8 double precision • long double 8 8 • char * 4 8 pointer
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
0x100 0x101 0x102 0x103 01 23 45 67 0x100 0x101 0x102 0x103 67 45 23 01 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 01 23 45 67 Little Endian 67 45 23 01
Membaca Urutan Byte • Disassembly • Mengartikan kode mesin • Dihasilkan oleh suatu program yang dapat membaca kode mesin • Contoh potongan program : Alamat Kode instruksi Bahasa Assembly 8048365: 5b pop %ebx 8048366: 81 c3 ab 12 00 00 add $0x12ab,%ebx 804836c: 83 bb 28 00 00 00 00 cmpl $0x0,0x28(%ebx) • Mengartikan bilangan • nilai : 0x12ab • menjadi 4 bytes : 0x000012ab • dipisah per byte : 00 00 12 ab • dibalik : ab 12 00 00
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"); } • printf directives: • %p : print pointer • %x : print hexadecimal casting = mengganti tipe data menggunakan instruksi typedef
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; 0x11ffffcb8 0x39 0x11ffffcb9 0x30 0x11ffffcba 0x00 0x11ffffcbb 0x00
Linux C Alpha C Linux/Alpha A Linux/Alpha B Sun C Sun B Sun A 00 00 FF C7 39 39 39 00 FF 00 30 30 CF 30 30 CF 30 00 00 FF 00 C7 39 39 FF 00 00 00 00 00 00 00 Representasi Integer Desimal: 12345 Biner: 0011 0000 0011 1001 Heksa: 3 0 3 9 int A = 12345; int B = -12345; long int C = 12345; Representasi two’s complement
EF D4 A0 FF F8 FC FF FB FF 2C BF FF 01 00 00 00 Representasi Pointer (Alamat) Alpha P int B = -12345; int *P = &B; Alamat Alpha Heksa: 1 F F F F F C A 0 Biner: 0001 1111 1111 1111 1111 1111 1100 1010 0000 Sun P Alamat Sun Heksa: E F F F F B 2 C Biner: 1110 1111 1111 1111 1111 1011 0010 1100 Alamat Linux Heksa: B F F F F 8 D 4 Biner: 1011 1111 1111 1111 1111 1000 1101 0100 Mesin dan compiler berbeda akan memberikan lokasi obyek berbeda
Linux/Alpha F Sun F 46 00 40 IEEE Single Precision Floating Point Heksa: 4 6 4 0 E 4 0 0 Biner: 0100 0110 0100 0000 1110 0100 0000 0000 12345: 1100 0000 1110 01 E4 E4 40 00 46 Representasi Floating Point Float F = 12345.0; IEEE Single Precision Floating Point Representation Heksa: 4 6 4 0 E 4 0 0 Biner: 0100 0110 0100 0000 1110 0100 0000 0000 12345: 1100 0000 1110 01 IEEE Single Precision Floating Point Representation Heksa: 4 6 4 0 E 4 0 0 Biner: 0100 0110 0100 0000 1110 0100 0000 0000 12345: 1100 0000 1110 01 Tidak sama dengan representasi integer, tetapi konsisten di semua mesin Memperlihatkan relasi dengan integer, walau tidak terlihat jelas
31 31 32 32 33 33 34 34 35 35 00 00 Representasi String • Strings dalam bahasa C • Direpresentasikan dalam array karakter • Setiap karakter dikodekan dalam format ASCII • Kode karakter standar 7-bit • Karakter “0” memiliki kode 0x30 • Digit i memiliki kode 0x30+i • String harus diakhiri dengan null • Karakter akhir = 0 • Kompatibilitas • Setiap sistem yang menggunakan ASCII untuk menkodekan karakter akan memberikan hasil yang sama • Data teks umumnya bersifat platform-independen • Kecuali jika ada aturan lain tentang karakter akhir suatu baris char S[6] = "12345"; Linux/Alpha S Sun S
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
Alpha sum Sun sum PC sum 55 81 01 00 08 90 45 89 C3 00 80 0C 02 89 E5 E0 FA 03 00 EC 30 08 8B 45 6B 09 42 5D C3 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 • Sama dengan NT dan Linux • NT / Linux tidak ‘fully binary compatible’ Mesin yang berbeda menggunakan instruksi dan kode berbeda
AND • A&B = 1 jika A=1 dan B=1 OR • A|B = 1 jika A=1 atau B=1 NOT • ~A = 1 jika A=0 Exclusive-Or (XOR) • A^B = 1 jika A=1 atau B=1, tapi tidak keduanya Aljabar Boolean Dikembangkan oleh George Boole pada abad 19 Representasi logika aljabar : 1 = “TRUE” dan 0 = “FALSE”
A&~B ~A&B A ~B ~A B 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 Koneksi terjadi bila: A&~B | ~A&B = A^B
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
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
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 + A * 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
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
Boolean Ring • {0,1}, ^, &,, 0, 1 = Boolean Ring • Identik dengan integer mod 2 = Z2, +2, *2, –2, 0, 1 • adalah operasi identitas: (A) = A • Sifat-sifat Boolean Ring : • Komutatif penjumlahan A ^ B = B ^ A • Komutatif perkalian A & B = B & A • Asosiatif penjumlahan (A ^ B) ^ C = A ^ (B ^ C) • Asosiatif perkalian (A & B) & C = A & (B & C) • Distributif A & (B ^ C) = (A & B) ^ (B & C) • 0 identitas jumlah A ^ 0 = A • 1 identitas kali A & 1 = A • 0 annihilator kali A & 0 = 0 • Inversi penjumlahan A ^ A = 0
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
Operasi Aljabar Boolean • Operasi vektor bit • Operasi bitwise (bit per bit) • Seluruh sifat-sifat aljabar Boolean digunakan di sini 01101001 & 01010101 01000001 01101001 | 01010101 01111101 01101001 ^ 01010101 00111100 ~ 01010101 10101010 01000001 01111101 00111100 10101010
Representasi dan Operasi Set • Representasi Set • Lebar w pada bit vector merepresentasikan subset {0, …, w–1} • aj = 1 jika jI A = 01101001{ 0, 3, 5, 6 } 76543210 B = 01010101{ 0, 2, 4, 6 } 76543210 • Operasi Set • A & B Irisan/Interseksi 01000001 { 0, 6 } • A | B Union 01111101 { 0, 2, 3, 4, 5, 6 } • A ^ B Berbeda simetrik 00111100 { 2, 3, 4, 5 } • ~ B Komplemen 10101010 { 1, 3, 5, 7 }
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
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 --> 0x01 • 0x69 || 0x55 --> 0x01 • p && *p
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 • Replikasi MSB bagian kanan • Digunakan pada representasi integer two’s complement Argumen x 01100010 << 3 00010000 00010000 00010000 Log. >> 2 00011000 00011000 00011000 Arit. >> 2 00011000 00011000 00011000 Argumen x 10100010 << 3 00010000 00010000 00010000 Log. >> 2 00101000 00101000 00101000 Arit. >> 2 11101000 11101000 11101000
A^B B A^B (A^B)^B = A (A^B)^A = B A B A Contoh Operasi XOR void funny(int *x, int *y) { *x = *x ^ *y; /* #1 */ *y = *x ^ *y; /* #2 */ *x = *x ^ *y; /* #3 */ } • Bitwise XOR adalah bentuk penjumlahan • Setiap nilai memiliki inversi jumlah (additive inverse) masing-masing A ^ A = 0 *x *y Begin A B 1 2 3 End
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