|
Mengenal
Bahasa Komputer
Assembly
Instruksi
yang dilakukan oleh CPU, misalnya mengambil data dari memori
dan melakukan eksekusi tidak semuanya dapat dipahami oleh
bahasa aras tinggi yang di mengerti oleh manusia. Bahasa ini
merupakan kode mesin yang akan memberitahukan kepada komputer
untuk melakukan sesuatu. Sebagai contoh adalah perintah copy
dari register ESP ke register EBP dari sebuah bilangan
hexadesimal 0x89E5 yang merupakan instruksi Intel 80486.
Salah
satu tool perangkat lunak yang digunakan pada awal-awal
pengembangan komputer dikenal dengan assembler, sebuah program
yang digunakan oleh manusia untuk dapat membaca kode sumber
file dan diterjemahkan ke dalam kode mesin. Bahasa ini
digunakan untuk menangani register-register dan operasi data
dan digunakan secara khusus untuk perkerjaan-pekerjaan yang
berhubungan dengan mikroprosesor. Bahasa assembly yang
digunakan untuk Mikroprosessor Intel X86 berbeda dengan yang
digunakan untuk Microprosesor Alpha AXP .
Berikut
adalah contoh kode assembly untuk operasi pada Alpha AXP.
ldr r16, (r15)
; Baris 1
ldr r17, 4(r15)
; Baris 2
beq r16,r17,100
; Baris 3
str r17, (r15)
; Baris 4
100:
; Baris 5
Pada
baris pertama, statemen yang digunakan adalah load isi
register 16 dari alamat 15. Instruksi berikutnya adalah load
register 17 dari lokasi berikutnya di memori. Baris ketiga
digunakan untuk membandingkan isi dari register 16 dengan
register 17, dan jika nilainya sama maka akan menghasilkan
nilai 100. Jika register tidak berisikan nilai yang sama,
program akan melanjutkan operasi menuju baris ke empat di mana
isi dari register 17 akan disimpan kedalam memori. Jika
register-register tersebut berisikan data yang sama maka tidak
ada data yang akan disimpan ke dalam memori. Program dalam
bahasa assembly sangat besar kemungkinan terjadi adanya
kesalahan yang dilakukan oleh programmer. Pengembangan linux
sendiri sangat jarang mempergunakan bahasa assembly, akan
tetapi pada bagian-bagian tertentu memang dituliskan dalam
bahasa ini, dengan tujuan untuk efisiensi dan untuk pengerjaan
operasi khusus, misalnya mikroprosesor.
Compiler
dan Bahasa C
Menuliskan
program yang cukup besar dalam bahasa Assembly bisa dikatakan
relatif menjadi rumit, termasuk masalah portabilitas,
dikarenakan sangat bergantung pada jenis keluarga prosesor yang
digunakan untuk menuliskan program. Kebanyakan programer
cenderung untuk menuliskan program dengan menggunakan bahasa
pemrograman yang lebih independen terhadap spesifikasi
perangkat keras tertentu seperti C. Dalam pemrograman dikenal
adanya program khusus yang disebut dengan compiler yang akan
membaca baris program C dan menterjemahkannya dalam bahasa
assembly, kemudian melakukan generate sesuai dengan
spesifikasi kode mesin yang digunakan. Banyak programer yang
memberikan penilaian bahwa bahasa pemrograman yang baik harus
dapat men-generate instruksi assembly yang hampir sama
atau sama efisiensinya dengan program yang dituliskan dalam
kode assembly langsung (David Rusling, 1996-1998). Seperti
sudah disebutkan diatas, kebanyakan dari kernel Linux ditulis
dengan menggunakan bahasa C. Berikut adalah potongan program
yang dituliskan dalam kode bahasa C.
if (x != y)
x = y ;
Program
diatas menampilkan operasi yang sama dengan contoh yang
diberikan dalam kode assembly. Jika isi dari variabel x tidak
sama dengan isi dari variabel y maka isi dari y akan di copy ke
x.
Bahasa
C banyak mendukung tipe-tipe variabel, sebuah variabel
merupakan lokasi di memori yang dapat digunakan sebagai nama
simbolik. Pada contoh di atas, variabel x dan y mengacu kepada
lokasi di dalam memori. Umumnya, seorang programmer tidak perlu
mengetahui di mana variabel akan diletakkan pada memori, hal
ini secara otomatis sudah dikerjakan oleh linker.
Beberapa variabel berisikan data yang berbeda, misalnya
integer, floating point dan pointer-pointer lainnya.
Pointer
merupakan variabel yang berisikan alamat, lokasi data di
memori. Misalkan terdapat sebuah variabel sebut saja x,
yang menempati alamat memori pada 0x80010000. Kemudian
ada sebuah pointer yang kita sebut saja px, yang mengacu
pada x. px berada pada alamat memori 0x80010003.
Nilai dari px menjadi 0x80010000 yang
merupakan alamat dari variabel x.
Linker
Linker
merupakan program yang digunakan untuk melakukan link dari
beberapa objek modul dan library menjadi satu.
Modul-modul objek ini merupakan keluaran dari kode mesin dari
hasil assembly atau kompiler dan berisikan kode mesin yang
bersifat eksekutable dan data yang berisikan informasi yang
akan mengijinkan sebuah linker untuk melakukan kombinasi
modul-modul program menjadi satu. Sebagai contoh, sebuah modul
bisa saja berisikan semua fungsi program database dan modul
lainnya berisikan argumen perintah baris yang menangani
berbagai fungsi. Linker digunakan untuk menjembatani modul
objek-objek ini, di mana sebuah rutin atau struktur data yang
berada pada satu modul dapat menjadi bagian dari modul lainnya.
Kernel
Linux sendiri merupakan bagian yang bersifat tunggal,
program-program yang besar di link bersama dengan berbagai
macam objek modul lainnya. Contoh program aplikasi Linker di
Linux adalah GNU ld yang dibuat oleh Free Software
Foundation.
|