You are on page 1of 7

MODUL 1 KOMPILASI DAN DISASSEMBLE PROGRAM

Septian Gilang Permana Putra (13210003)


Asisten: Kevin Hendharta
Tanggal Percobaan: 25/10/2011
EL3110-Praktikum Arsikom
Laboratorium Dasar Teknik Elektro - Sekolah Teknik Elektro dan Informatika ITB

Abstrak
Pada praktikum kali ini, topik yang dibahas adalah
kompilasi dan disassemble program Pada praktikum ini
akan dilakukan 6 percobaan dengan tujuan untuk
mengetahui cara tahap menerjemahkan bahasa C menjadi file
eksekusi, mengetahui pengaruh perbedaan tingkat optimasi
terhadap kode assembly dan file eksekusi yang dihasilkan,
serta mengetahui cara kerja kompilasi dengan makefile. Dari
percobaan yang dilakukan didapat kesimpulan bahwa: Screenshoot saat running program dgn optimasi O2
Proses untuk bahasa C menjadi file eksekusi melewati 4
langkah, yaitu pre-processor, compiler, assembler, dan linker.
Secara umum semakin tinggi tingkat optimasi akan
menyebabkan waktu kompilasi semakin lama, file eksekusi
yang dihasilkan berukuran semakin besar, dan program yang
dihasilkan semakin cepat. Proses kompilasi dapat dilakukan
dengan membuat file ’makefile’ lalu memberikan
perintah ”migw32-make” pada Command Prompt.

Kata kunci: pre-prosesor, compiler, assemble, linker,


dissasemble, tingkat optimasi, makefile.

1. DATA
Screenshoot code.s untuk optimisasi –O2
1.1 PERCOBAAN 1
Percobaan ini hanya membuat file ‘code.c’. Source
code untuk file ‘code.c’ ini ada pada lampiran.

1.2 PERCOBAAN 2
Pada percobaan ini didapatkan data screenshot
berikut.

Screenshoot code.o untuk optimisasi –O2

1.3 PERCOBAAN 3
Pada percobaan ini didapatkan data screenshot
berikut.

Screenshoot preprosesing, compile, serta compile dan assemble dgn


optimasi -O2

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 1


Screenshoot disassembler code.o dgn optimasi –O2

Screenshoot code.s untuk optimisasi –O1

Screenshoot disassembler prog.exe dgn optimasi –O2

1.4 PERCOBAAN 4
Pada percobaan ini didapatkan data screenshot
berikut.

Screenshoot code.s untuk optimisasi –O3

Screenshoot compile, compile dan assemble serta disassembler dgn


optimasi –O1

Screenshoot code.s untuk optimisasi –Os

Screenshoot compile, compile dan assemble serta disassembler dgn


1.5 PERCOBAAN 5
optimasi –Os
Pada percobaan ini didapatkan data screenshot
berikut.

Screenshoot compile, compile dan assemble serta disassembler dgn


optimasi –O3

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 2


linking dengan object code lain sehingga dapat
menjadi executable file. Komputer menyimpan
object code sebagai file kode objek dalam format
(.o), dalam percobaan ini salah satu contohnya
adalah ’code.o’.
Agar pada main.c dan fungsi sum() dapat
digunakan caranya adalah dengan menginclude
langsung ’code.c’ dalam source code main, sepertti
Screenshoot running coba.exe
yang ditunjukkan oleh ’main1.c’ pada lampiran.

2.3 PERCOBAAN 3
Pada percobaan 3, proses disassembler pada file
kode objek ’code.o’ serta file program
eksekusi ’prog.exe’ menghasilkan kode dalam
bentuk bahasa assembly.
Jika kita bandingkan hasil disassembler pada file
kode objek ’code.o’ dengan file program
eksekusi ’prog.exe’, kita dapatkan hasil
Screenshoot running coba.exe setelah text.c diubah disassembler pada file program eksekusi
menghasilkan code assembly yang lebih panjang
1.6 TUGAS (PROGRAM FIBONACCI) dan kompleks dibanding hasil disassembler pada
Pada percobaan ini didapatkan data screenshot file kode objek. Hal ini dikarenakan file program
berikut. eksekusi merupakan gabungan dari beberapa file
kode objek yang disatukan dalam proses linker,
sehingga pantas jika code assembly dari file
program eksekusi lebih kompleks.

2.4 PERCOBAAN 4
Pada percobaan 4 ini kita melakukan mencoba
melakukan proses kompilasi dan disassembler
dengan tingkat optimasi yang berbeda dari
sebelumnya, yaitu -O1, -O3, dan –Os.
Screenshoot running coba.exe
Jika kita membandingkan kode assembly ’code.s’
yang dihasilkan antara tingkat optimasi –O1 dan –
2. ANALISIS
O2, kode assembly yang dihasilkann oleh optimasi
–O2 lebih panjang 1 baris dibandingkan –O1. Hal
2.1 PERCOBAAN 1
tersebut dikarenakan pada optimiasasi –O2
Pada percobaan 1 ini kita membuat fungsi sum terdapat tambahan fitur instruction scheduling yang
yang merupakan operator penjumlah. Fungsi ini tidak terdapat pada optimisasi –O1. Untuk kode
memberikan output hasil penjumlah, selain itu assembly pada -O3 sama dengan –O2, hal ini
juga fungsi ini akan mengubah sebuah variabel dapat terjadi karena tidak ada bagian yang dapat
bernama accum yang merupakan total dari hasil dioptimisasi lagi oleh dengan –O3. Sedangkan
penjumlahan yang pernah dilakukan . Selain itu untuk kode assembly pada –Os, lebih panjang dari
tidak ada yang bisa dianalisis dari percobaan 1. -O2, karena optimisasi dengan –Os memiliki fitur
yang tidak dimiliki -O2 yaitu menghasilkan file
2.2 PERCOBAAN 2 eksekusi yang ukurannya sekecil mungkin.
Setelah command untuk preprosesor diberikan Secara umum semakin tinggi tingkat optimasi
akan muncul tulisan yang sebagian berisi tentang akan menyebabkan waktu kompilasi semakin
sourcecode yang kita tulis, dalam hal ini ’code.c’ lama, file eksekusi yang dihasilkan berukuran
dengan mengganti variabel yang sudah didefine semakin besar, dan program yang dihasilkan
sebelumnya, dalam hal ini adalah ’START_VAL’. semakin cepat. Jika kita membandingkan tingkat
optimasi -O2 dan –O3 pada praktikum ini, tingkat
Compile dan assembler akan menghasilkan object
optimasi –O2 menghasilkan file eksekusi
code. Object code adalah serangkaian instruksi
(‘prog.exe’) yang sama besarnya dengan tingkat
dalam bahasa mesin yang sudah dapat dibaca
optimasi -O3 yaitu 27.654 byte. Selain itu proses
langsung oleh computer namun masih perlu di
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 3
kompilasi untuk optimisasi -O2 lebih cepat perintah ”migw32-make” pada Command
dibanding -O3. Untuk kecepatan program, tidak Prompt.
ada perbedaan diantara keduanya.

2.5 PERCOBAAN 5
Setelah memberikan perintah ”migw32-make”
pada Command Prompt, yang terjadi adalah
sourcecode yang kita buat tadi berhasil di compile
dan assemble menjadi sebuah executable
file ’coba.exe’. Dari hasil tersebut, hal yang dapat
disimpulkan adalah cara melakukan proses
compile dan assemble suatu source code tidak
hanya dengan memberikan perintah ”gcc” pada
Command Prompt, tapi juga dapat dengan cara
membuat file makefile lalu memberikan
perintah ”migw32-make” pada Command Prompt.
Setelah text.c diganti, maka output tulisan menjadi
juga berganti seperti yang ditunjukkan pada
screenshoot di atas. Hal ini menunjukkan, kita
dapat membagi ”tugas” yang berbeda dalam
beberapa file C. Secagai contohnya text.c dalam
program ini bertugas mengatur masalah output
teks yang akan ditampilkan.

2.6 TUGAS (PROGRAM FIBONACCI)


Pada tugas untuk membuat program deret
fibonacci ini saya mengimplementasikannya
menggunakan for to do, bukan dengan cara
rekursif seperti biasanya. Program ini terdiri dari 2
file C, fibo.c untuk menghitung hasil deret
fibonacci dengan inputan angka tertentu, dan
inputn.c untuk meminta inputan angka tertentu
tadi dari user sekaligus menjadi main program.
Karena input untuk fungsi fibonaci adalah
bilangan positif, maka pada inputn.c ditambah
algoritma untuk memverifikasi input tersebut.
Source code untuk inputn.c, fibo.c dan makefile
ada pada lampiran.

3. KESIMPULAN
Kesimpulan yang dapat diambil dari serangkaian
percobaan yang dilakukan kali ini adalah:
 Proses untuk bahasa C menjadi file
eksekusi melewati 4 langkah, yaitu pre-
processor, compiler, assembler, dan linker.
 Secara umum semakin tinggi tingkat
optimasi akan menyebabkan waktu
kompilasi semakin lama, file eksekusi
yang dihasilkan berukuran semakin besar,
dan program yang dihasilkan semakin
cepat.
 Proses kompilasi dapat dilakukan dengan
membuat file ’makefile’ lalu memberikan

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 4


LAMPIRAN

*Untuk code assembly, sudah ada screen shoot nya di bagian Data

1. Source code untuk ‘code.c’ :


#define START_VAL 0
int accum = START_VAL;
int sum(int x, int y) {
int t = x + y; // variabel t diisi hasil a+b
accum += t; // nilai accum ditambah sebesar t
return t; // fungai mengoutputkan nilai t
}

2. Source code untuk ‘main.c’ :


#include <stdio.h>
void main (){
int a,b;
scanf ("%d %d",&a,&b); //input nilai variabel dan b
printf ("%d",sum(a,b)); //print hasil dari a+b
}

3. Source code untuk ‘main1.c’ :


#include <stdio.h>
#include "code.c"
void main (){
int a,b;
printf ("%d\n",accum); // print nilai awal accum
scanf ("%d %d",&a,&b); //input nilai variabel dan b
printf ("%d\n",sum(a,b)); // print hasil dari a+b :
printf ("%d\n",accum); // print nilai akhir accum
}

4. Source code untuk ‘main_text.c’ :


#include "text.h"
void main (){
test();
}

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 5


5. Source code untuk ‘text.c’ :
#include <stdio.h>
#include "text.h"
void test(){
printf ("Arsitektur Komputer I !\n");
}

6. Source code untuk ‘text.h’ :


#ifndef TES_H
#define TES_H 100
void test();
#endif

7. Source code untuk makefile:


all:coba

coba:main_text.o text.o
gcc main_text.o text.o -o coba

main_text.o:main_text.c
gcc -c main_text.c

text.o:text.c
gcc -c text.c

8. Source code untuk ‘text.c’ setelah diubah:


#include <stdio.h>
#include "text.h"
void test(){
printf ("TES_H = %d\n",TES_H);
}

9. Source code untuk ‘inputn.c’:


#include <stdio.h>
void main (){
int n;
do{
printf("\nBerapa banyak deret yang anda inginkan? ");
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 6
scanf("%d",&n); // input nilai n
if (n<=0){
printf("\nInput harus >0 \n");
}
}while (n<=0); //validasi input agar selalu bilangan positif
fibonacci(n); //pemanggilan fungsi fibonacci
printf("\n");
}

10. Source code untuk ‘fibo.c’:


#include <stdio.h>
void fibonacci(int n){
int a = 0;
int b = 1;
int sum, i;
for (i=0;i<n;i++){
printf("%d ",b);
sum = a + b;
a = b;
b = sum;
}
}

11. Source code untuk makefile :


all:coba

coba:inputn.o fibo.o
gcc inputn.o fibo.o -o coba

inputn.o:inputn.c
gcc -c inputn.c

fibo.o:fibo.c
gcc -c fibo.c

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 7