COMPILER BAHASA C
DAN BAHASA ASSEMBLY INTEL® X86
Compiler akan menerjemahkan bahasa tingkat tinggi C menjadi B. Disassembly menggunakan GCC
kode assembly. Kode assembly ini berisi instruksi-instruksi yang Selain dapat melakukan kompilasi, paket compiler GCC juga
sesuai dengan instruction set yang dimiliki oleh mesin. File yang menyertakan sebuah disassembler yang mampu melakukan
dihasilkan pada tahap ini masih berupa file teks (.s). disassembly file biner (.o atau .exe) menjadi file assembly (.s)
Assembler bernama Object Dump. Untuk melakukan disassembly, kita dapat
menggunakan perintah berikut.
Assembler akan menerjemahkan bahasa assembly menjadi file objdump -d Program.o
objek. File objek ini merupakan file biner (.o). objdump -d Program.exe
Linker Hasil dari proses disassembly ditampilkan pada jendela Command
Prompt. Agar hasil dari proses
Linker akan menggabungkan file biner yang diperoleh pada tahap disassembly dapat disimpan ke dalam suatu file, kita dapat
sebelumnya dengan file biner lain yang merupakan dependency dari menggunakan perintah berikut.
program yang dibuat, contohnya library untuk menjalankan objdump -d Program.o > Program.s
fungsi printf. Hasil dari linker berupa file biner executable objdump -d Program.exe > Program.s
(dalam platform Microsoft® Windows™, file ini memiliki Dengan demikian, hasil proses disassembly akan disimpan
akhiran .exe). dalam file Program.s.
Untuk melakukan proses kompilasi menggunakan GCC, kita
dapat menggunakan Command Prompt pada Microsoft® C. Optimisasi Program melalui Proses Kompilasi
Windows™. Perhatikan bahwa GCC harus terpasang dan GCC mendukung beberapa tingkat optimisasi program yang
terkonfigurasi dengan benar (lihat pada lembar lampiran dapat dilakukan saat proses kompilasi dilakukan. Terdapat
petunjuk instalasi dan konfigurasi GCC). Beberapa perintah beberapa tingkat optimisasi program yang dapat dipilih dengan
untuk melakukan kompilasi antara lain sebagai berikut. menambahkan flag optimisasi saat melakukan kompilasi program.
Hanya melakukan proses preprocessing Umumnya optimisasi program merupakan trade-off antara
execution speed, program size, compilation time, dan kemudahan dalam
gcc -E Program.c melakukan debugging.
gcc –O2 -o Program.exe Program.c
Eksekusi perintah tersebut akan menampilkan di layar Command Flag –O2 tersebut menandakan bahwa proses kompilasi
Prompt kode Program.c setelah melalui proses preprocessing. dilakukan dengan optimisasi tingkat dua. Beberapa flag
Agar memperoleh output berupa file, dapat menggunakan optimisasi yang dikenali oleh GCC adalah –O0, –O1, –O2, –
tambahan perintah sebagai berikut. O3, –Os, dan –Ofast. Perbedaan masing-masing level
gcc -E Program.c > Program.i
optimisasi diberikan sebagai berikut.
Eksekusi perintah tersebut akan menghasilkan file
Program.i berisi kode Program.c yang telah melalui
preprocessing pada folder yang sama dengan file Program.c. File -O0 : tidak melakukan optimalisasi sama sekali namun
ini dapat dibuka dengan teks editor contohnya Notepad++. mengorbankan waktu kompilasi yang lama, dan menggunakan
RAM yang amat besar baik selama proses kompialasi atau
binari nantinya, namun baiknya binari akan sangat stabil.
Hanya melakukan proses preprocessing dan compiling
-O1 : opstimasi yang dilakukan sedikit dan menghasilkan dieksekusi secara otomatis. Contoh Windows™ Batch File
waktu kompilasi yang lama, binary berukuran besar, dan adalah sebagai berikut.
memakan banyak RAM.
-O2 : optimalisasi lebih ditingkatkan (dari –O1), waktu
kompilasi lebih cepat, menghasilkan binari dengan ukuran
tidak terlalu besar dan lebih sedikit menggunakan RAM
-O3 : optimalisasi penuh, memanfaatkan multithreading,
waktu kompilasi yang cepat, binari berukuran kecil dan
menggunakan RAM seminum mungkin binarinya nanti,
namun potensi crash amat besar jika sistem tidak
mendukung atau source code tidak mendukung opsi ini.
-Os : optimasi dilakukan dengan mengoptimalkan pada
ukuran yang kecil pada binari saja,
-Ofast : mengaktifkan semua optimasi pada –O3 dan
pilihan –ffast-math dan fortrand specific Windows™ Batch File tersebut berisi perintah sebagai
berikut. Perintah %~d0 memerintahkan command prompt
untuk berpindah drive letter ke drive letter yang sesuai dengan
D. Makefile dan Batch File lokasi Windows™ Batch File berada. Selanjutnya, perintah
Untuk suatu project yang terdiri atas beberapa file kode, cd "%~dp0" memerintahkan command prompt untuk
tentu akan sangat merepotkan untuk melakukan kompilasi berpindah folder ke lokasi Windows™ Batch File berada.
dengan menggunakan perintah kompilasi yang ditulis pada Selanjutnya, command prompt mengeksekusi perintah yang
command prompt satu per satu untuk setiap file. GCC memanggil GCC secara berurutan hingga berhenti akibat
memiliki fitur makefile yang berfungsi untuk menulis daftar adanya perintah pause. Untuk melanjutkan eksekusi, kita
nama file kode di dalam project tersebut. Kita cukup
cukup menekan sebarang tombol pada keyboard sehingga
memberikan GCC nama makefile lalu GCC akan melakukan
command prompt mengeksekusi perintah selanjutnya yaitu
proses kompilasi untuk semua file tersebut untuk kemudian
Object Dump.
menggabungkannya pada file executable. Makefile dapat
E. Instruksi dan Bahasa Assembly Intel® x86
bersifat sederhana hingga kompleks, bergantung pada sejauh Arsitektur mikroprosesor Intel® x86 merupakan salah satu
mana kita menggunakan makefile untuk mengorganisasikan arsitektur mikroprosesor yang banyak digunakan. Dengan
project kita. Contoh isi dari makefile adalah sebagai berikut. mempelajari bahasa assembly dan instruksi Intel® x86, kita akan
sangat terbantu dalam melakukan proses debugging dan optimisasi
program yang kita buat. Dalam mikroprosesor Intel® x86,
terdapat banyak register yang dapat digunakan. Namun, pada
praktikum kali ini, kita cukup mempelajari beberapa register
berikut.
EAX, EBX, ECX, dan EDX adalah register 32-bit yang
bersifat general storage.
IV. SIMPULAN
Header file berfungsi sebagai penghubung 2 atau lebih file
yang dimana membuat prosedur suatu fungsi dapat
digunakan pada fungsi lain(terhubung).
Extern berfungsi untuk mendeklarasikan variable yang
Gambar 3.8.1 Return squaresum(a,b) esp 0x28ff50
akhirnya dapat digunakan pada smua file yang sebelumnya
dihubungkan dengan header.
I. Tugas 9 : Program Fibonacci Kompilasi pada GCC memiliki 5 jenis optimasi yang
Pada tugas yang ke-9 akan diminta membuat program dimana disesuaikan dengan kebutuhan, seperti –O0, -O1, -
penghitungan deret fibonacci yang sederhana. Yang dimana O2, -O3, -Os, -Ofast.Yang dipertimbangkan pad trade off
mula-mula harus membuat file kode inputn.c yang berisi kode- adalah ukuran source code, kecepatan
kode yang menangani proses meminta pengguna untuk kompilasi,kemudahan dalam debugging serta runtime
memasukkan nilai n hingga menerima dan menyimpan nilai n program.
yang dimasukkan oleh pengguna, yang dimana nilai n Kompilasi pada GCC yang membuat file.c menjadi file.exe
memiliki batas minimum sebesar n=2 sehingga diperlukan memiliki 4 tahapan yaitu preprocessing(program.c),
validasi input, setelah itu file fibo.c yang dimana berisi kode- compiler(program.i => program s), assembler (program.s
kode yang menangani proses kalkukasi deret fibonacci sesuai => program.o) ,dan linker(program.exe).
jumlah angka yang akan ditampilkan dan menampilkannya
Pemanggilan prosedur sebuah file dapat di katakan stack
pada layar, lalu file fibo_main.c yang dimana berisi program –
memory yang bersifat dinamis yang damana ukuran dapat
program utama yang memanggil prosedur – prosedur pada file
diperkecil dan diperbersar sesuai dengan kebutuhan.
inputn.c dan fibo.c. Agar program dari inputn.c,fibo.c dan
fibo_main.c terimplementasi maka kita membutuhkan header Proses kompilasi GCC dapat dilakukan dengan banyak
seperti yang bawah ini. metode, yaitu batch file, makefile, bahkan menuliskan
perintah setiap tahap pada command prompt.
REFERENSI
Basic format for books:
[1] J. K. Author, “Title of chapter in the book,” in Title of His Published
Book, xth ed. City of Publisher, Country if not
[2] USA: Abbrev. of Publisher, year, ch. x, sec. x, pp. xxx–xxx.
Examples:
[3] G. O. Young, “Synthetic structure of industrial plastics,” in Plastics,
2nd ed., vol. 3, J. Peters, Ed. New York: McGraw-Hill, 1964,
pp. 15–64.
[4] A. Harriman. (1993, June). Compendium of genealogical
software. Humanist. [Online]. Available e-mail:
HUMANIST@NYVM.ORG Message: get GENEALOGY REPORT
Gambar 3.9.1 Source code fibo.h
Basic format for patents (when available online):
[5] Name of the invention, by inventor’s name. (year, month day). Patent
Number [Type of medium]. Available: site/path/file
Example:
[6] Musical toothbrush with adjustable neck and mirror, by L.M.R. Brooks.
(1992, May 19). Patent D 326 189
[Online]. Available: NEXIS Library: LEXPAT File: DESIGN
Lampiran
Tugas 1
Tugas 2
File Tugas 1
File Tugas 2
Tugas 3
Tugas 4
Tugas 5
Tugas 6
Tugas 7
Add.c
Main.c
Add.h
Tugas 8
Tugas 9
Inputn.c
Fibo.c
Fibo_main.c
Fibo.h
inputn.h
Hasil fibo_main.exe