Anda di halaman 1dari 24

Percobaan I

COMPILER BAHASA C
DAN BAHASA ASSEMBLY INTEL® X86

Tiorida Sagala (14S15027)


Tanggal Percobaan : 28/09/2017
NWS3103 Praktikum Arsitektur Sistem Komputer
Laboratorium Sistem Digital – Teknik Elektro
Institut Teknologi Del

tinggi dengan ekstensi .c menjadi bahasa tingkat rendah


Abstrak— Practice in module-01 will perform the dengan ekstensi .exe atau .o .
compilation of C language using GCC. The C language Pada praktikum modul 1 ini, diharapkan praktikan mencapai
compilation process using GCC with help by batch file, beberapa tujuan, yaitu :
object disassembly file, compile optimization program on 1. Praktikan memahami tahap-tahap kompilasi program
GCC, compile some code files with GCC, makefile usage dalam Bahasa C sebagai Bahasa tingkat tinggi hingga
on GCC, header file, call procedure and stack memory. diperoleh Bahasa tingkat rendah yang dapat dieksekusi oleh
mesin.
This practice using GCC Compiler software in 2. Praktikan mampu melakukan kompilasi program bahaca c
packet CodeBlocks program, Notepad++ as editor text and menggunakan compiler GCC beserta penggunaan makefile
HexEdit as hexadecimal editor and laptop which have dan batch file.
microsoft windows 7/8/8.1 operating system. In this 3. Praktikan memahami Bahasa assembly dan mampu
practice, students expected to understand the step of melakukan analisis terhadap Bahasa assembly Intel® x86
compilation program in C language, able to compile the yang dihasilkan oleh compiler GCC.
program in C language using GCC compiler, makefile 4. Praktikan memahami pengunaan stack memory pada setiap
usage and batch file, able to understand and analyze intel procedure call.
x86 asembly language generated by GCC compiler, and
able to understand usage of stack memory on each II. LANDASAN TEORETIS
procedure call.
A. Kompilasi menggunakan GCC
Untuk membuat suatu program, bahasa tingkat tinggi cenderung
Kata Kunci— GCC, HexEdit, Asembly, and Notepas++.
banyak digunakan karena bahasa tingkat tinggi ini mudah
dimengerti oleh manusia seperti halnya bahasa C. Sayangnya,
bahasa tingkat tinggi tidak dapat dimengerti oleh mesin
(mikroprosesor) sehingga tidak dapat dieksekusi. Oleh karena
I. PENDAHULUAN
itu, diperlukan sebuah penerjemah bahasa pemrograman tingkat
Perkembangan teknologi informasi dan computer setiap tinggi menjadi bahasa tingkat rendah yang berisi urutan instruksi
waktunya akan semakin meningkat, yang dimana disebabkan yang dimengerti oleh mesin.
oleh tuntutan keperluan manusia. Pekerjaan Manusia di era Urutan instruksi tersebut kemudian dikemas dalam suatu
sekarang tidak pernah lepas dari bantuan mesin. Didalam bentuk executable object program yang disimpan dalam bentuk file
mesin terdapat yang namanya microprocessor. Microprosesor biner.
adalah otak dari sebuah mesin. Untuk menjalankan sebuah Kumpulan instruksi yang dimengerti oleh mesin disebut
mesin membutuhkan sebuah kodingan atau algoritma – instruction set. Dari sisi instruction set, terdapat dua penggolongan
algoritma didalam microprocessor. Sebuah program terkenal mesin (mikroprosesor) yaitu complex instruction set computer (CISC),
sederhana untuk membuat algoritma adalah bahasa C tapi contohnya mikroprosesor Intel®, dan reduced instruction set
program yang sesederhana inipun tak bisa dibaca oleh computer (RISC), contohnya MIPS32®. Beberapa mikroprosesor
microprocessor dari sebuah mesin karna bahasa c adalah salah Intel® bahkan memiliki tambahan set instruksi seperti MMX,
satu bahsa tingkat tinggi yang mana hanya dapat dimengerti SSE, dan sebagainya.
oleh manusia tetapi tidak dapat dimengerti oleh mesin, Proses menerjemahkan baris kode program dalam bahasa C
microprosesor yang ada pada mesin hanya dapat membaca menjadi file executable dilakukan dalam empat langkah yaitu
algoritma bahasa tingkat rendah atau bisa dikatakan bahasa preprocessor, compiler, assembler, dan linker yang seluruhnya disebut
mesin yang menggunakan bilangan biner sebagai komponen sistem kompilasi.
utamanya. Untuk mengantisipasi permasalahan ini muncullah
bahasa Asembly yang dapat meng-convert bahasa tingkat
gcc -S Program.c
Eksekusi perintah tersebut akan menghasilkan file Program.s
yang berisi baris instruksi assembly pada folder yang sama dengan
 Preprocessor Program.c. File ini dapat dibuka dengan teks editor
Semua perintah preprocessor yang ditulis dalam bahasa tingkat contohnya Notepad++.
tinggi akan diproses terlebih dahulu oleh preprocessor sebelum  Hanya melakukan proses preprocessing, compiling, dan assembly
compiler melaksanakan tugasnya. Beberapa tugas dari preprocessor
ini adalah sebagai berikut. gcc -c Program.c
Semua komentar dalam file program diganti dengan spasi satu
buah. Eksekusi perintah tersebut akan menghasilkan file Program.o
Semua \n (backslash-newline) yang menandakan baris baru akan yang merupakan file biner. File ini dapat dibuka dengan program
dihapus tidak peduli dimanapun dia berada. Fitur ini hex editor contohnya HexEdit.
memungkinkan kita untuk membagi baris program yang  Melakukan seluruh proses kompilasi (preprocessing, compiling,
panjang ke dalam beberapa baris tanpa mengubah arti. assembly, dan linking)
Macro yang telah didefinisikan diganti dengan definisinya.
gcc -o Program.exe Program.c
Contohnya, pada perintah #define MAX_ROWS 10,
preprocessor akan mengganti semua kata MAX_ROWS dengan 10. Eksekusi perintah tersebut akan menghasilkan Program.exe
Pada perintah #include <stdio.h>, preprocessor akan yang dapat langsung dieksekusi (dijalankan). Kita juga dapat
mengganti baris tersebut dengan isi file stdio.h. melakukan kompilasi dua file bahasa C sekaligus.
 Compiler gcc -o Program.exe sub.c main.c

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.

 ESI dan EDI adalah register 32-bit yang digunakan


sebagai indexing register. Register ini juga dapat digunakan
sebagai general storage.
GCC dapat diperintahkan untuk melakukan kompilasi makefile
dengan perintah sebagai berikut.  ESP adalah register 32-bit yang digunakan sebagai stack
mingw32-make -f makefile pointer. Dengan demikian, ESP akan berisi nilai alamat
Perintah tersebut akan melakukan kompilasi terhadap makefile (address) elemen puncak (top element) dari stack. Perlu diingat
yang diberikan menjadi sebuah program bernama bahwa stack membesar dari alamat tinggi (high address) ke
contoh.exe. Program ini dihasilkan oleh hasil linker terhadap arah alamat rendah (low address). Dengan demikian,
dua file objek bernama main.o dan text.o (tentunya memasukkan elemen baru ke dalam stack akan mengurangi
termasuk dengan library yang lain yang dibutuhkan). Untuk nilai alamat yang tersimpan pada ESP sedangkan
memperoleh main.o, GCC harus melakukan kompilasi source mengeluarkan elemen dari dalam stack akan menambah
code main.c menjadi file objek. Begitupula untuk memperoleh ESP.
text.o, GCC harus melakukan kompilasi source code text.c.  EBP adalah register 32-bit yang digunakan sebagai base
Pada platform Microsoft® Windows™, terdapat sebuah file pointer. Dengan demikian, EBP akan berisi alamat dari
shell script bernama Windows™ Batch File. Kita dapat current activation frame pada stack.
menuliskan perintah-perintah yang biasa kita tuliskan secara  EIP adalah register 32-bit yang digunakan sebagai
terpisah pada command prompt dalam suatu file yang disimpan instruction pointer. Dengan demikian, EIP
dengan ekstensi .bat. Untuk mengeksekusi perintah-perintah
tersebut, kita cukup menjalankan file .bat tersebut sehingga akan berisi alamat dari instruksi selanjutnya yang akan
command prompt terbuka dan perintah- perintah yang kita tuliskan dieksekusi.
Instruksi-instruksi yang digunakan pada Intel® x86 tidak akan Perbandingan memory yang digunakan code.c (bahasa C)
dijelaskan di dalam modul praktikum ini. Praktikan dapat dengan code.exe(bahasa mesin) sangat besar ya itu 1:125kb,
mempelajari lebih jauh mengenai instruksi-instruksi ini pada bab ini disebabkan code.exe banyak memiliki library didalamnya.
3 di buku “Computer System – A Programmer’s Perspective”
yang ditulis oleh Bryant dan O’Hallaron.
F. Stack dan Procedure Call
Stack pada umumnya disusun atas beberapa activation frame. Setiap
frame memiliki sebuah base pointer yang menunjukkan alamat
tertinggi (highest address) pada frame tersebut. Karena stack tumbuh
dari high address menuju low address, base pointer akan menunjukkan
alamat tertinggi frame tersebut.
Ketika suatu program (caller) memanggil sebuah prosedur (callee),
caller akan memasukkan argumen- argumen untuk memanggil
callee dari argumen terakhir hingga argumen paling awal secara
berurutan ke dalam stack. Selanjutnya, caller akan memasukkan
return address ke dalam stack.
Kemudian, callee memasukkan alamat old base pointer milik caller ke
dalam stack dan
memperbarui
nilai base pointer
Gambar 3.1.1 code.c
yang sesuai
dengan frame
callee (nilai base
pointer yang baru
sama dengan
nilai stack pointer
setelah old base
pointer disimpan
ke dalam stack).
Kemudian callee
melakukan
alokasi terhadap variabel lokal dan melakukan komputasi sesuai
dengan fungsi callee tersebut.
Ketika callee selesai dieksekusi, callee akan menyimpan return
value pada register EAX. Kemudian, callee akan membersihkan
framenya sendiri dengan mengganti alamat base pointer dengan old
base pointer yang telah disimpan pada stack. Kemudian, return
address digunakan untuk melanjutkan eksekusi instruksi pada
caller.
Gambar 3.1.2 code.exe
III. HASIL DAN ANALISIS. .
A. Tugas I : Proses Kompilasi Bahasa C Menggunakan GCC
Pada percobaan tugas 1 ini, proses kompilasi bahasa c B. Tugas 2 : Proses Kompilasi Bahasa C Menggunakan GCC
menggunakan gcc ke dalam bentuk bahasa mesin adalah dengan Bantuan Batch File
dengan menyimpan file dalam notepad++ dalam code.c. Pada tugas 2 ini, mengkompilasi bahasa c menggunakan
setelah itu mengubah code.c => code.i kedua file ini masih batch file. Yang mula – mula kita mengkopi file code.c dari
dlam bentuk filetext, perbedaan yang didapat pada perubahan folder tugas 1 ke tugas 2. Lalu mengetik file bacth.bat code
code.c => code.i yaitu tidak terdapatnya koment dicode.c sesuai modul , lalu menyimpannya dalam folder tugas 2
didalam code.i. serta semua N_LOOP pada code.c sudah seperti gambar dibawah.
berubah menjadi angka 500 saja di code.i.
Selanjutnya code.c diubah menjadi code.i lalu code.i diubah
menjadi code.s(bahasa asembly). Pada code ini algoritma-
algoritma yang sebelumnya mudah dimengerti manusia dalam
bahasa c sekarang sulit dapat dimengerti manusia tetapi dapat
dengan mudah dimengerti oleh mesin.
Proses selanjutnya dengan mengubah code.s(bahasa
Asembly) menjadi code.o. File Code.o ini sudah dalam file
dalam binary sehingga mudah dimengerti oleh mesin.
Gambar 3.2.1 Batch.bat Gambar 3.3.1 disassembly_code_exe.asm
Ketika mengklik 2x file batch tiba-tiba muncul semua file
yang sama dengan tugas 1, ini dapat terjadi karena File batch
hanya dapat diterjemahkan oleh command interpreter dimana
cara kerja dari file tersebut sama dengan command prompt
tetapi berbeda cara mengeksekusinya.

Gambar 3.2.2 File Tugas 1

Gambar 3.3.2 Disassembly_code_o.asm

Gambar 3.2.3 File Tugas 2 Gambar 3.3.3 Perbedaan pemakain memory


disassembly_code_exe.asm dan disassembly_code_o.asm
C. Tugas 3 : Disassembly File Objek
D. Tugas 4 : Optimisasi Kompilasi Program pada GCC
Pada tugas 3 ini,akan melakukan disassembly file objek, Pada tugas 4 ini akan ditunjukkan bagaimana optimasi
yang dimana kita copy file code.exe dan code.o dari tugas 2. kompilasi program pada GCC. Mula- mula copy file code.c
Setelah itu kita ubah code.exe menjadi bahasa asembly yaitu dari folder tugas 2 ke folder tugas 4, setelah itu ganti nama
disassembly_code_exe. Setelah itu disassembly_code_exe.asm code.c menjadi code_O0.c, setelah itu copy dan ganti
kita dissembly menjadi disassembly_code_o .asm yang code_O0.c menjadi code_O1.c, code_O2.c , code_O3.c,
dimana nya mempunyai persamaan yaitu masih dalam type code_O4.c, code_Os.c, code_Ofast.c.
ASM file dan juga memiliki perbedaan yaitu pada file Pada saat kompilasi dari semua file dengan kode optimasi
disassembly_code_exe.asm memakai memori lebih banyak yang berbeda-beda maka akan secara otomatis smua file akan
yaitu 125kb sedangkan disassembly_code_o.asm hanya melakukan terdisassembly pada semua file objek yang
memakai 2kb. Pemakaian memory yang sangat banyak pada dihasilkan. Yang dimana batch.bat yang membuat semua file
disassembly_code_exe.asm karna banyak menyimpan library. terdisassembly adalah sebagai berikut :
Pada disassembly_code_exe.asm bahasanya sudah sangat
sulit dimengerti oleh manusia tapi pada
disassembly_code_o.asm relatif lebih mudah dimengerti
manusia.

Jika pada semua file dibuka menggunakan devC++ maka


akan didapatkan code_O3.s dan code_Ofast.c dengan line
terbanyak, dan length terpanjang, tetapi done parsing tercepat
berada papa file code.Ofast.s,code.O1,code.O2.c yaitu 0,015
seconds itu diakibatkan file code.Ofast.s,code.O1,code.O2.c
sudah mengaktifkan flag flag setiap keadaan.

E. Tugas 5 : Kompilasi Beberapa File Kode dengan GCC


Pada tugas 5 ini akan dilihatkan bagimana kompilasi
beberapa file kode dengan GCC . Dimana terlebih dahulu
membuat atau mengcopy file yang ada pada modul dengan G. Tugas 7 : Header File
nama main_text.c dan text.c. Untuk kompilasi kedua file ini Pada tugas yang ke 7 ini akan ditunjukkan bagaimana
akan mambutuhkan file header, yang dimana file header sudah membuat serta memanfaatkan header file . Mula-mula kita
mendeklarasikan kedua file yang dimana membuat kedua file harus membuat add.c, add.h, yang dimana akan diinclude pada
terhubung. Hasil kompilasi dari kedua file tadi akan main.c, yang dimana pada file main.c diminta untuk
menghasilkan file main_text.exe yang kemudian ditampilkan memasukkan 2 bilangan dan dijumlahkan dengan memanggil
ada command prompt. Jadi hasil dari eksekusi file yang tadi fungsi sum.
menunjukkkan bahwa GCC juga bisa digunakan untuk
mengkompilasi beberapa file menjadi satu file yang utuh
dengan bantuan file penghubung yaitu file header.

Gambar 3.7.1 Hasil eksekusi pemakaian header file


H. Tugas 8 : Pemanggilan Prosedur dan Stack Memory
Pada tugas yang 8 akan dilakukan pemanggilan prosedur dan
Gambar 3.5.1 Hasil dari penggabungan 2 file.
stack memory yang pertama-tama kita harus membuat project
baru di CodeBlock 13.12 , setelah itu hapus code yang tersedia
F. Tugas 6: Penggunaan Makefile pada GCC lalu copy source code tugas pendahuluan no3 ke project dan
Pada tugas 6 akan ditunjukkan bagaimana penggunaan ditempelkan pada project kerja tersebut .Pada proses
makefle pada gcc. Mula mula pemanggilan file, memory bisa dimodelkan sebagai stack, itu
main_text.c, text.c, dan text.h dari folder tugas 5 dicopy ke terjadivkarna proses pemanggilan file disebut berbasis
folder tugas 6. Kemudian copy code dari modul ke notepad++ stacking data. Memory computer yang dipakai bersifat
dinamis, yang dimana ukurannya dapat mengecil atau
yang akan menjadi makefilenya.
membesar sesuai dengan kebutuhan. Maka dari itu hal ini
dipengaruhi oleh banyaknya data dan optimasi yang
dilakukan. Disini memory akan dihapus jika dilakukan return
addres. Nilai memory diantara addres yang ditampilkan EBP
dan ESP pada tiap-tiap kode yang diinstrusikan adalah seperti
yang sudah terlampir dilampiran.

Gambar 3.6.1 Makefile


Yang dimana code diatas disimpan dalam nama
makefile(tanpa ekstensi). Kemudian akan dilakukan kompilasi
kedua file dengan menggunakan metode makefile yang
sebelumnya kita simpan tadi,dimana akan menghasilkan file
baru . Jika kita mengeksekusi file dengan command prompt
akan diperoleh hasil kompilasi yang sama dengan file ditugas
5 ,seperti gambar dibawah ini.

Gambar 3.6.2 Hasil eksekusi command prompt tugas 6


Gambar 3.8.1 Return squaresum(a,b) esp 0x28ff30
Gambar 3.9.2 source code inputn.h

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

Hasil eksekusi command prompt main.exe program penambahan 2 bilangan

Tugas 8
Tugas 9
Inputn.c

Fibo.c
Fibo_main.c

Fibo.h
inputn.h

Hasil fibo_main.exe

Anda mungkin juga menyukai