ALU (Arithmatic Logical Unit)
Pengertian ALU (Arithmatic Logical Unit)
Arithmatic Logical Unit (ALU), adalah komponen dalam sistem komputer yang berfungsi melakukan operasi perhitungan aritmatika dan logika (Contoh operasi aritmatika adalah operasi penjumlahan dan pengurangan, sedangkan contoh operasi logika adalah logika AND dan OR. ALU bekerja besama-sama memori, di mana hasil dari perhitungan di dalam ALU di simpan ke dalam memori. Adapun alur proses dari ALU yang ditunjukan oleh gambar dibawah ini:
Perhitungan dalam ALU menggunakan kode biner, yang merepresentasikan instruksi yang akan dieksekusi (opcode) dan data yang diolah (operand). ALU biasanya menggunakan sistem bilangan biner two’s complement. ALU mendapat data dari register. Kemudian data tersebut diproses dan hasilnya akan disimpan dalam register tersendiri yaitu ALU output register, sebelum disimpan dalam memori. Processor terdiri dari 4 elemen yang melakukan sistem operasi terhadap data, 4 elemen itu adalah instruksi, petunjuk instruksi, beberapa register dan ALU (Arithmetic Logic Unit). Adalah sebuah petunjuk instruksi akan memberi tahu processor dimana instruksi dari sebuah aplikasi diletakkan di memori.
Penjelasan Cara processor melakukan tugas :
Penunjuk instruksi mengarahkan fetch instruksi ke sebuah spot di memori yang menampung sebuah instruksi. Fetch kemudian membaca instruksi tersebut dan memberikannya ke dekoder instruksi, kemudian mengamati instruksi tersebut dan menentukan langkah selanjutnya untuk melengkapi instruksi tersebut. Kemudian ALU mengerjakan perintah yang diminta instruksi seperti : menambah data, membagi data, atau memanipulasi data yang ada. Setelah itu processor akan menerjemahkan dan mengerjakan instruksi, unit kontrol memberitahukan fetch instruksi untuk menangkap instruksi berikutnya di memori. Proses akan ini berlangsung terus menerus, dari satu instruksi ke instruksi berikutnya, dalam suatu langkah yang rumit, untuk menciptakan hasil yang diingikan dan dapat dilihat di monitor. Untuk meyakinkan semua itu berjalan dalam satu kesatuan waktu, bagian itu memerlukan suatu clock generator. Clock generator meregulasi setiap langkah yang dikerjakan processor. Seperti sebuah metronome, sebuah clock generator mengirim pulsa-pulsa elektrik untuk menentukan langkah yang harus dikerjakan processor. Pulsa tersebut diukur dalam jutaan langkah per detik, atau megahertz, yang dikenal sebagai ukuran kecepatan processor. Semakin banyak pulsa dibuat, semakin cepat kerja processor.
Untuk meningkatkan kinerja komputer, pembuat chip processor menempatkan sebuah Arithmetic Logic Unit (ALU) di dalam processor. Secara teoritis ini berarti pemrosesan dapat dilakukan dua kali lebih cepat dalam satu langkah. Sebagai tambahan multiple ALU, kemudian diintegrasikan Floating Point Unit ke dalam processor. FPU ini menangani angka dari yang paling besar hingga yang paling kecil (yang memiliki banyak angka di belakang koma). Sementara FPU menangani kalkulasi semacam itu, ALU menjadi bebas untuk melakukan tugas lain dalam waktu yang bersamaan, untuk meningkatkan kinerja. Processor menambah kecepatan pemrosesan instruksi dengan melakukan pipelining instruksi, atau menjalankan instruksi secara paralel satu dengan yang lainnya. Eksekusi dari sebuah instruksi memerlukan langkah yang terpisah, contoh : fetching dan dekoding sebuah instruksi. Processor harus menyelesaikan sebuah instruksi secara keseluruhan sebelum melanjutkan ke instruksi berikutnya. Sekarang sirkuit yang berbeda menangani langkah yang terpisah tersebut. Begitu sebuah instruksi telah selesai dalam satu langkah untuk dilanjutkan ke langkah berikutnya, transistor yang mengerjakan langkah pertama bebas untuk mengerjakan instruksi berikutnya, sehingga akan mempercepat kerja pemrosesan. Sebagai tambahan untuk meningkatkan kinerja processor adalah dengan memprediksi cabang-cabang instruksi, yaitu memperkirakan lompatan yang akan dilakukan sebuah program dapat dilakukan; eksekusi secara spekulatif, yaitu mengeksekusi cabang instruksi yang ada di dapat; dan penyelesaian tanpa mengikuti urutan, yakni kemampuan untuk menyelesaikan sebuah seri instruksi tidak berdasarkan urutan normal.
Integer
Representation
Nilai sebuah
data dari sebuah
tipe data integer adalah nilai bilangan bulat seperti dalam matematika.
Representasi data ini merupakan cara bagaimana nilainya disimpan di dalam memori
komputer. Tipe data integer terbagi menjadi dua buah kategori, baik itu
bertanda (signed) ataupun tidak bertanda (unsigned). Bilangan
bulat bertanda mampu merepresentasikan nilai bilangan bulat negatif, sementara
bilangan bulat tak bertanda hanya mampu merepresentasikan bilangan bulat
positif.
Representasi
integer positif di dalam komputer sebenarnya adalah untaian bit, dengan menggunakan
sistem bilangan biner. Urutan dari bit-bit tersebut pun bervariasi, bisa berupa
Little Endian ataupun Big Endian. Selain ukuran, lebar
atau ketelitian (presisi) bilangan bulat juga bervariasi, tergantung jumlah bit
yang direpresentasikannya. Bilangan bulat yang memiliki n bit dapat
mengodekan 2n. Jika tipe data integer tersebut adalah bilangan bulat
tak bertanda, maka jangkauannya adalah dari 0 hingga 2n-1.
Integer Arithmetic
C adalah salah satu dari beberapa bahasa yang memungkinkan aritmatika
pointer. Dengan kata lain, Anda benar-benar memindahkan referensi pointer
dengan operasi aritmatika. Sebagai contoh:int x = 5, *ip = &x;
ip++;
Pada mesin 32-bit yang khas, * ip akan mempointer ke 5 setelah inisialisasi. Tapi ip + +, penambahan pointer 32-bit atau 4-byte. Jadi apa pun yang ada di depan 4-byte, * ip akan mempointer itu.
Aritmatika pointer sangat berguna ketika berhadapan dengan array, karena array dan pointer berhubungan khusus di C.
Menggunakan Aritmatika Pointer Dengan Array:
Array menempati slot memori berturut-turut di memori komputer. Di sinilah aritmatika pointer berguna – jika Anda membuat pointer ke elemen pertama, incrementing satu (++) akan membuat sebuah titik ke elemen berikutnya.
#include <stdio.h>
int main() {
int *ptr;
int arrayInts[10] = {1,2,3,4,5,6,7,8,9,10};
ptr = arrayInts; /* ptr = &arrayInts[0]; bisa digunakan */
printf(“Pointer menunjuk ke elemen pertama,”);
printf(“hasilnya element array,ke:%d.\n”, *ptr);
printf(“menaikkan satu tingkat…..\n”);
ptr++;
printf(“Sekarang menunjuk ke elemen berikutnya,”);
printf(“hasilnya menuju elemen ke……:%d.\n”, *ptr);
printf(“menunjuk elemen ke 3 dan 4,hasilnya elemen ke……..: %d %d.\n”,
*(ptr+1),*(ptr+2));
ptr+=2;
printf(“meloncat ke 4 berikutnya, untuk menunjuk ke 8,hasilnya ini elemen ke……: %d.\n”,*(ptr+=4));
ptr–;
printf(“kehilangan satu elemen, hasilnya elemen ke: %d?!\n”, *(ptr++));
printf(“Kembali ke elemen 8, hasilnya elemen ke….. %d.\n”, *ptr);
return 0;
}
output:
Pointer menunjuk ke elemen pertama,hasilnya element array,ke:1.
menaikkan satu tingkat…..
Sekarang menunjuk ke elemen berikutnya,hasilnya menuju elemen ke……:2.
menunjuk elemen ke 3 dan 4,hasilnya elemen ke……..: 3 4.
meloncat ke 4 berikutnya, untuk menunjuk ke 8,hasilnya ini elemen ke……: 8.
kehilangan satu elemen, hasilnya elemen ke: 7?!
Kembali ke elemen 8, hasilnya elemen ke….. 8.
bit pola aktual digunakan untuk pointer nol mungkin atau mungkin tidak mengevaluasi ke nol karena tergantung pada sistem tertentu, di mana kode dikembangkan. Untuk membuat kode sumber kompatibel antara compiler berbagai berbagai sistem, makro digunakan untuk mewakili pointer null. Makro yang berjalan di bawah nama NULL. Dengan demikian, pengaturan nilai dari pointer menggunakan makro NULL, seperti dengan pernyataan penugasan seperti ptr = NULL, menjamin bahwa pointer telah menjadi pointer null. Demikian pula, hanya sebagai salah satu dapat menguji nilai integer dari nol, seperti dalam if (k == 0), kita dapat menguji untuk null pointer menggunakan if (ptr == NULL).
misal,menggunakan variabel baru ptr. Misalkan sekarang kita ingin menyimpan di ptr alamat variabel int k.Untuk melakukan ini kita menggunakan operator unary & dan write.
ptr = &k;
Apa operator & yg dilakukan mengambil value (alamat) dari k, meskipun k di sisi kanan operator penugasan ‘=’, dan salinan untuk mengisi pointer ptr. Sekarang, ptr “menunjuk ke” k.sekarang,ada satu lagi operator yang perlu kita diskusikan. “Operator dereferencing” adalah dg tanda bintang dan digunakan sebagai berikut:
*ptr = 7;
akan menyalin 7 ke alamat yang ditunjuk oleh ptr. Jadi jika ptr “menunjuk” (berisi alamat) k, pernyataan di atas akan menetapkan nilai k sampai 7. Artinya, ketika kita menggunakan ‘*’ dengan cara ini kita mengacu pada nilai apa yang ptr tunjuk ke, bukan nilai dari pointer itu sendiri.
kita bisa menulis: printf(“%d\n”,*ptr);
untuk mencetak ke layar nilai integer yang disimpan di alamat yang ditunjuk oleh ptr;.
Salah satu cara untuk melihat bagaimana semua hal ini cocok bersama-sama akan menjalankan program berikut dan kemudian meninjau kode dan output.
#include <stdio.h>
int j, k;
int *ptr;
int main(void)
{
j = 1;
k = 2;
ptr = &k;
printf(“\n”);
printf(“j has the value %d and is stored at %p\n”, j, (void *)&j);
printf(“k has the value %d and is stored at %p\n”, k, (void *)&k);
printf(“ptr has the value %p and is stored at %p\n”, ptr, (void *)&ptr);
printf(“The value of the integer pointed to by ptr is %d\n”, *ptr);
return 0;
}
Catatan: Kami belum membahas aspek-aspek C yang memerlukan penggunaan (void *) ungkapan yang digunakan di sini. Untuk saat ini,termasuk dalam kode pengujian Anda. Kami akan menjelaskan alasan di balik ungkapan ini nanti.
pembahasan kode diatas:
Sebuah variabel dideklarasikan dengan memberikan jenis dan nama (misalnya int k;)
Sebuah variabel pointer dideklarasikan dengan memberikan jenis dan nama (misalnya int * ptr) di mana tanda memberitahu compiler bahwa variabel bernama ptr adalah variabel pointer dan jenis memberitahu compiler apa jenis pointer adalah untuk menunjukkan (integer dalam hal ini).Setelah variabel dideklarasikan, kita bisa mendapatkan alamatnya dengan mendahului namanya dengan unary & operator, seperti dalam & k.
Kita bisa “dereference” pointer, yaitu mengacu pada nilai yang yang menunjuk ke, dengan menggunakan ‘*’ yang unary operator sebagai dalam * ptr. Sebuah “lvalue” dari variabel adalah nilai alamatnya, yaitu di mana disimpan dalam memori. The “rvalue” dari variabel adalah nilai yang disimpan dalam variabel (di alamat itu).
Pointer adalah variabel.
Ketika Anda menyimpan nilai NULL dalam pointer, itu disebut NULL pointer.
Jika tipe pointer adalah void, maka itu adalah void pointer.
Contoh pointer NULL:
int * num = NULL;
num adalah pointer NULL.
Contoh void pointer:
void * temp;
temp adalah void pointer.
Floating Point
Floating-point atau bilangan titik mengambang, adalah sebuah format bilangan yang dapat digunakan untuk merepresentasikan sebuah nilai yang sangat besar atau sangat kecil. Bilangan ini direpresentasikan menjadi dua bagian, yakni bagian mantisa dan bagian eksponen (E). Bagian mantisa menentukan digit dalam angka tersebut, sementara eksponen menentukan nilai berapa besar pangkat pada bagian mantisa tersebut (pada posisi titik desimal). Sebagai contoh, bilangan 314600000 dan bilangan 0.0000451 dapat direpresentasikan dalam bentuk bilangan floating point: 3146E5 dan 451E-7 (artinya 3146 * 10 pangkat 5, dan 451 * 10 pangkat -7).
Kebanyakan CPU atau mikroprosesor sederhana tidak mendukung secara langsung operasi terhadap bilangan floating-point ini, karena aslinya mikroprosesor ini hanya memiliki unit aritmetika dan logika, serta unit kontrol yang beroperasi berdasarkan pada bilangan bulat (integer) saja.
Perhitungan atau kalkulasi terhadap nilai floating point pada jenis mikroprosesor sederhana dapat dilakukan dengan menggunakan perangkat lunak, sehingga operasinya sangat lambat. Untuk itulah, sebuah prosesor tambahan dibutuhkan untuk melakukan operasi terhadap jenis bilangan ini, yang disebut dengan unit titik mengambang.
Dalam bahasa pemrograman, khususnya keluarga bahasa pemrograman C, bilangan titik mengambang direpresentasikan dengan tipe data float.
Opini :
ALU adalah suatu sistem komponen komputer yang berfungsi sebagai alat hitung dan logika dan menggunakan kode biner.
Daftar Pustaka
http://reddevil2893.wordpress.com/2013/12/05/pengertian-alu-arithmetic-logical-unit-dan-sitem-bus/
http://id.wikipedia.org/wiki/Integer_%28ilmu_komputer%29
http://coretananaksd.wordpress.com/2012/09/14/pointer-arithmetic/
http://id.wikipedia.org/wiki/Floating-point