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: 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. 1.1 DATA PERCOBAAN 1
Screenshoot code.s untuk optimisasi O2

Screenshoot saat running program dgn optimasi O2

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

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 optimasi Os

1.5

PERCOBAAN 5

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

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 yang ditunjukkan oleh main1.c pada lampiran.

Screenshoot running coba.exe

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 disassembler pada file program eksekusi menghasilkan code assembly yang lebih panjang dan kompleks dibanding hasil disassembler pada file kode objek. Hal ini dikarenakan file program eksekusi merupakan gabungan dari beberapa file kode objek yang disatukan dalam proses linker, sehingga pantas jika code assembly dari file program eksekusi lebih kompleks.

Screenshoot running coba.exe setelah text.c diubah

1.6

TUGAS (PROGRAM FIBONACCI)

Pada percobaan ini didapatkan data screenshot berikut.

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

2. 2.1

ANALISIS PERCOBAAN 1

Pada percobaan 1 ini kita membuat fungsi sum yang merupakan operator penjumlah. Fungsi ini memberikan output hasil penjumlah, selain itu juga fungsi ini akan mengubah sebuah variabel bernama accum yang merupakan total dari hasil penjumlahan yang pernah dilakukan . Selain itu tidak ada yang bisa dianalisis dari percobaan 1.

2.2

PERCOBAAN 2

Jika kita membandingkan kode assembly code.s yang dihasilkan antara tingkat optimasi O1 dan O2, kode assembly yang dihasilkann oleh optimasi O2 lebih panjang 1 baris dibandingkan O1. Hal tersebut dikarenakan pada optimiasasi O2 terdapat tambahan fitur instruction scheduling yang tidak terdapat pada optimisasi O1. Untuk kode assembly pada -O3 sama dengan O2, hal ini dapat terjadi karena tidak ada bagian yang dapat dioptimisasi lagi oleh dengan O3. Sedangkan untuk kode assembly pada Os, lebih panjang dari -O2, karena optimisasi dengan Os memiliki fitur yang tidak dimiliki -O2 yaitu menghasilkan file eksekusi yang ukurannya sekecil mungkin. 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. Jika kita membandingkan tingkat optimasi -O2 dan O3 pada praktikum ini, tingkat optimasi O2 menghasilkan file eksekusi (prog.exe) yang sama besarnya dengan tingkat optimasi -O3 yaitu 27.654 byte. Selain itu proses
3

Setelah command untuk preprosesor diberikan akan muncul tulisan yang sebagian berisi tentang sourcecode yang kita tulis, dalam hal ini code.c dengan mengganti variabel yang sudah didefine sebelumnya, dalam hal ini adalah START_VAL. Compile dan assembler akan menghasilkan object code. Object code adalah serangkaian instruksi dalam bahasa mesin yang sudah dapat dibaca langsung oleh computer namun masih perlu di

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB

kompilasi untuk optimisasi -O2 lebih cepat dibanding -O3. Untuk kecepatan program, tidak ada perbedaan diantara keduanya.

perintah migw32-make pada Command Prompt.

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 preprocessor, 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

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 printf ("%d",sum(a,b)); //print hasil dari a+b } dan 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.

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

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

You might also like