Sie sind auf Seite 1von 8

Percobaan I

Judul Modul Praktikum


ANJU M. SILITONGA (14S16037)
Tanggal Percobaan : 27/09/2018
NWS3103 Praktikum Arsitektur Sistem Komputer
Laboratorium Sistem Digital – Teknik Elektro
Institut Teknologi Del

Abstract
Pada praktikum ini Praktikan diharapkan mampu memahami Berikut dijelaskan metode (langkah-langkah) percobaan yang
tahap-tahap kompilasi program dalam bahasa C sebagai akan dikerjakan.
bahasa tingkat tinggi hingga diperoleh bahasa tingkat rendah
yang dapat dieksekusi oleh mesin, mampu melakukan Tugas 1 : Proses Kompilasi Bahasa C Menggunakan GCC
kompilasi program bahasa C menggunakan compiler GCC
beserta penggunaan makefile dan batch file, mampu
memahami bahasa assembly dan mampu melakukan analisis Buat program kode seperti pada modul. Simpan file dengna
terhadap bahasa assembly intel® x86 yang dihasilkan oleh code.c.
compiler GCC serta memahami penggunaan stack memory Preprocess code.c menjadi code.i. (Perintah command prompt
pada setiap procedure call. Praktikan juga diharapkan mampu terdapat pada modul).
menguasai Bahasa c supaya nantinya akan lebih mudah Assemble code.c menjadi code.o. (Perintah command prompt
menjalankan dan mengoperasikan mesin dengan mengubah terdapat pada modul).
Bahasa tersebut dahulu ke Bahasa c. Lakukan semua proses kompilasi menjadi code .exe (Perintah
Kata kunci : Bahasa assembly intel® x86, Bahasa C, stack command prompt terdapat pada modul).
memory, procedure call, compiler GCC Buka file code.o dan code.exe pada teks editor. Bandingkan
hasilnya.
Pendahuluan

Dengan dilaksanakannya praktikum ini maka mahasiswa Tugas 2 : Proses Kompilasi Bahasa C Menggunakan GCC
diharapkan mampu menguasai tujuan yang hendak dicapai dengan Bantuan Batch File
dalam modul praktikum ini adalah sebagai berikut: Salin file code.c dari tugas 1 ke tugas 2.
Praktikan memahami tahap-tahap kompilasi program dalam Buat batch file dengan kode terlampir pada modul.
Bahasa C sebagai Bahasa tingkat tinggi hingga diperoleh Simpan kode dengan nama batch.bat pada folder yang sama
Bahasa tingkat rendah yang dapat dieksekusi oleh mesin. dengan code.c.
Praktikan mampu melakukan kompilasi program bahasa C Klikbatch.bat.
menggunakan compiler GCC beserta penggunaan makefile Lihat semua file yang dihasilkan folder tersebut.
dan batch file.
Praktikan memahami bahasa assembly dan mampu melakukan
analisis terhadap bahasa assembly Interl ® x86 yang Tugas 3 : Disassembly File Objek
dihasilkan oleh compiler GCC.
Praktikan memahami penggunaan stack memory pada setiap Salin file code.o dan code.exe dari foler tugas 2 ke folder
procedure call. tugas 3.
Gunakanobjdump untuk disassembly code.o (Perintah
command propmpt terlampir pada modul).
Dalam praktikum ini, beberapa perangkat yang dipakai adalah Gunakan objdump untuk disassembly code.exe (Perintah
sebagai berikut. command propmpt terlampir pada modul).
Komputer Desktop / Laptop dengan system operasi Microsoft Bukafile disassemlby_code.o dan disassembly_code_exe.asm
® Windows ™ 7/8/8.1/10 dengan teks editor. Bandingkan.
Compiler GCC dalam paket program CodeBlocks untuk
melakukan kompilasi program. Tugas 4 : Optimisasi Kompilasi Program pada GCC
Notepad++ sebagai teks editor dan HexEdit sebagai Salin code.c dari folder tugas 2 ke folder tugas 4.
heksadesimal editor. Ubahnama file code.c menjadi code_O0.c.
Salin code_O0.c menjadi code_O1.c, code_O2.c, code_O3.c , 2. LANDASAN TEORITIS
code_Os.c, code_Ofast.c.
Buatfile batch.bat untuk mengkompilasi kelima file di atas 2.1 KOMPILASI MENGGUNAKAN GCC
(Perintah command prompt terdapat pada moudl). Proses menerjemahkan baris kode program dalam Bahasa C
Buatfile code_O0.s, code_O1.s, code_O2.c, code_O3.s, menjadi file executable dilakukan dalam empat langkah yaitu
code_Os.s, dan code_Ofast.s dengan teks editor. pre-processor, compiler, assembler, dan linker yang
seluruhnya disebut sistem kompilasi.
Tugas 5 : Kompilasi Beberapa File Kode dengan GCC

Buatlah file main_text.c terdapat pada modul.


Buatlah file text.c tedapat pada modul.
Buatlah file text.h terdapat pada modul.
Lakukan kompilasi file (Perintah command prompt tedapat
pada modul).
Jalankan prgram main_text.exe.
Preprocessor
Semua perintah pre-processor yang ditulis dalam bahasa
Tugas 6 : Penggunaan Makefile pada GCC tingkat tinggi akan diproses terlebih dahulu oleh pre-processor
Salin file main_text.c, text.c, dan text.h dari folder tugas 5 ke sebelum compiler melaksanakan tugasnya. Beberapa tugas
folder tugas 6. dari pre-processor ini adalah sebagai berikut.
Buatlah makefile dengan menggunakan teks editor terdapat Semua komentar dalam file program diganti dengan spasi satu
pada modul. buah.
Simpan makefile dengan nama makefile (tanpa eksistensi / Semua \n (backslash-newline) yang menandakan baris baru
akhiran). akan dihapus tidak peduli dimanapun dia berada. Fitur ini
Gunakan command prompt untuk kompilasi. (Perintah memungkinkan kita untuk membagi baris program yang
command prompt terlampir pada modul). panjang ke dalam beberapa baris tanpa mengubah arti.
Bandingkan hasil tugas 5 dengan tugas 6 melakukan Macro yang telah didefinisikan diganti dengan definisinya.
main_text.exe. Contohnya, pada perintah #define MAX_ROWS 10, pre-
processor akan mengganti semua kata MAX_ROWS dengan
Tugas 7 : Header File 10. Pada perintah #include <stdio.h>, pre-processor akan
mengganti baris tersebut dengan isi file stdio.h.
Pada tugas ini, akan diapahami bagaimana extern pada header
file. Compiler
Buatlah program dengan kode terlampir di modul. akan menerjemahkan bahasa tingkat tinggi C menjadi kode
Simpan dengan nama add.c. assembly. Kode assembly ini berisi instruksi-instruksi yang
Buat sebuah program sederhana main.c. sesuai dengan instruction set yang dimiliki oleh mesin. File
Buatlah header file add.h pada main.c. yang dihasilkan pada tahap ini masih berupa file teks (.s).
Lakukan kompilasi file (Perintah command prompt terdapat
pada modul). Assembler
akan menerjemahkan bahasa assembly menjadifile objek. File
objek ini merupakan file biner (.o).
Tugas 8 : Pemanggilan Prosedur dan Stack Memory
Buka CodeBlocks lakukan setting seperti pada modul. Linker
Perhatikan nilai CPU Registers, Call Stack, Disassembly, akan menggabungkan file biner yang diperoleh pada tahap
Memory Dump, dan Watches untuk setiap kode. sebelumnya dengan file biner lain yang merupakan
Analisis data yang diperoleh. dependencydari program yang dibuat, contohnya library untuk
menjalankan fungsi printf. Hasil dari linker berupa file biner
executable(dalam platform Microsoft® Windows™, file ini
Tugas 9 : Program Fibonacci memiliki akhiran .exe).

Implementasi prosedur-prosedur yang dibutuhkan. Disertakan 2.2 DISSASSEMBLY MENGGUNAKAN GCC


juga file header. Selain dapat melakukan kompilasi, paket compiler GCC juga
Buat program utama fibo_main.c. menyertakan sebuah disassembler yang mampu melakukan
Buat makefile untuk melakukan kompilasi seluruh file kode disassembly file biner (.oatau .exe) menjadi file assembly(.s)
program. bernama Object Dump.
Jalankan program yang telah dikompilasi lalu periksa
fungsionalitasnya. 2.3 OPTIMISASI PROGRAM MELALUI PROSES
KOMPILASI
GCC mendukung beberapa tingkat optimisasi program yang Instruksi-instruksi yang digunakan pada Intel® x86 tidak akan
dapat dilakukan saat proses kompilasi dilakukan. Terdapat dijelaskan di dalam modul praktikum ini. Praktikan dapat
beberapa tingkat optimisasi program yang dapat dipilih mempelajari lebih jauh mengenai instruksi-instruksi ini pada
dengan menambahkan flag optimisasi saat melakukan bab 3di buku “Computer System –A Programmer’s
kompilasi program. Umumnya optimisasi program merupakan Perspective” yang ditulis oleh Bryant dan O’Hallaron.
trade-off antara execution speed, program size, compilation
time, dan kemudahan dalam melakukan debugging. 2.6 STACK DAN PROCEDURE CALL
Stack pada umumnya disusun atas beberapa activation frame.
2.4 MAKEFILE DAN BATCH FILE Setiap frame memiliki sebuah base pointeryang menunjukkan
Untuk suatu project yang terdiri atas beberapa file kode, tentu alamat tertinggi (highest address) pada frame tersebut. Karena
akan sangat merepotkan untuk melakukan kompilasi dengan stack tumbuh dari high address menuju low address, base
menggunakan perintah kompilasi yang ditulis pada command pointerakan menunjukkan alamat tertinggi frame tersebut.
prompt satu per satu untuk setiap file. GCC memiliki fitur Ketika suatu program (caller) memanggil sebuah prosedur
makefile yang berfungsi untuk menulis daftar nama file kode (callee), caller akan memasukkan argumen-argumen untuk
di dalam project tersebut. Kita cukup memberikan GCC nama memanggil callee dari argumen terakhir hingga argumen
makefile lalu GCC akan melakukan proses kompilasi untuk paling awal secara berurutan ke dalam stack. Selanjutnya,
semua file tersebut untuk kemudian menggabungkannya pada caller akan memasukkan return addresske dalam stack.
file executable. Makefile dapat bersifat sederhana hingga Kemudian, callee memasukkan alamat old base pointer milik
kompleks, bergantung pada sejauh mana kita menggunakan caller ke dalam stackdan memperbarui nilai base pointer yang
makefile untuk mengorganisasikan project kita. sesuai dengan frame callee (nilai base pointer yang baru sama
Pada platform Microsoft® Windows™, terdapat sebuah file dengan nilai stack pointer setelah old base pointer disimpan ke
shell script bernama Windows™ Batch File. Kita dapat dalam stack). Kemudian callee melakukan alokasi terhadap
menuliskan perintah-perintah yang biasa kita tuliskan secara variable lokal dan melakukan komputasi sesuai dengan fungsi
terpisah pada command prompt dalam suatu file yang callee tersebut.
disimpan dengan ekstensi .bat. Untuk mengeksekusi perintah- Ketika callee selesai dieksekusi, callee akan menyimpan
perintah tersebut, kita cukup menjalankan file .bat tersebut return value pada register EAX. Kemudian, callee akan
sehingga command prompt terbuka dan perintah-perintah yang membersihkan framenya sendiri dengan mengganti alamat
kita tuliskan dieksekusi secara otomatis. base pointer dengan old base pointer yang telah disimpan pada
stack. Kemudian, return address digunakan untuk melanjutkan
2.5 INSTRUKSI DAN BAHASA ASSEMBLY INTEL ® eksekusi instruksi pada caller.
X86
Arsitektur mikroprosesor Intel® x86 merupakan salah satu
arsitektur mikroprosesor yang banyak digunakan. Dengan
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.
ESP adalah register 32-bit yang digunakan sebagai stack
pointer. Dengan demikian, ESP akan berisi nilai alamat
(address) elemen puncak (top element) dari stack. Perlu
diingat bahwa stack membesar dari alamat tinggi (high
address) ke arah alamat rendah (low address). Dengan
demikian, memasukkan elemen baru ke dalam stack akan
mengurangi nilai alamat yang tersimpan pada ESP sedangkan
mengeluarkan elemen dari dalam stack akan menambah ESP.
EBP adalah register32-bit yang digunakan sebagai base
pointer. Dengan demikian, EBP akan berisi alamat dari current
activation frame pada stack.
3. HASIL DAN ANALISIS
EIP adalah register 32-bit yang digunakan sebagai instruction
pointer. Dengan demikian, EIP akan berisi alamat dari 3.1 TUGAS 1 : PROSES KOMPILASI BAHASA C
instruksi selanjutnya yang akan dieksekusi. MENGGUNAKAN GCC
Kita membuka code.o dan code.exe dalam teks editor yakni
Hex Edit maka kita mendapatkan hasil yakni code.exe dan
code.o keduanya berisi kode biner dan code.exe lebih Panjang
dan banyak mengandung bilangan biner daripada code.o.

Gambar 3.2.1 Screenshot file batch.bat pada cmd

3.3 TUGAS 3 : DISASSEMBLY FILE OBJEK

Setelah kita gunakan objdumb untuk melakukan disassembly


Gambar 3.1.1 screenshot potongan code.exe
file code.exe dan code.o maka kita dapatkan hasilnya yakni :

Gambar 3.2.2 screenshot disassembly code.o


Gambar 3.1.2 screenshot code.o

Dari gambar diatas kita bisa melihat bahwa code dalam


Bahasa C tidak dapat dibaca oleh teks editor, code hanya
dibaca berupa file biner.
Adapun seperti kita ketahui proses kompilasi bahasa C diolah
menjadi bahasa mesin melalui 4 tahap yaitu pre-processor,
compiler, assembler, dan linker. Dengan demikian kita harus
mengolah code tersebut sedemikian rupa sehingga bisa dibaca
menjadi file objek oleh suatu microprosesor agar bisa sesuai
dengan yang kita buat yakni dalam terjemahan Bahasa mesin
yang sama.
Gambar 3.2.3 screenshot potongan disassembly code.exe
3.2 TUGAS 2 : PROSES KOMPILASI BAHASA C
MENGGUNAKAN GCC DENGAN BANTUAN BATCH FILE Jika kita bandingkan keduanya mempunyai perbedaan yakni
code.exe mempunyai code yang lebih Panjang.
Setelah membuat code batch.bat dan kemudian membukanya
maka di folder tugas 2 jadi ada code sama seperti yang di 3.4 TUGAS 4 : OPTIMISASI KOMPILASI PROGRAM PADA
tugas 1 yakni ada code.i, code.o, code.h. GCC
Seperti yang kita pelajari juga bahwasannya batch file mampu
mengeksekusi perintah-perintah dengan cukup menjalankan Kita memperoleh beberapa code setelah kita buat instruksi
file .bat sehingga command prompt dapat terbuka dan sesuai modul maka kita memperoleh code seperti gambar
perintah-perintah yang dituliskan dieksekusi secara otomatis. berikut , Pembacaan percobaan ini dapat dilakukan dengan
notepad ++ karena sifat teks yang tidak berbentuk biner . Dan
berikut adalah tampilan dari assembly code_o0.s , code_o1.s ,
code _o2.s , code_o3.s , code_o3.s , code_ofast.s , code_os.s .
Gambar 3.4.1. Code _o0.s Gambar 3.4.4 Code_03.s

Gambar 3.4.2 Code_o1.s Gambar 3.4.5 code_0fast.c

Gambar 3.4.3. Code_02.s Gambar 3.4.6 code_0s.s

Dari tampilan file assembly hasil optimasi dapat kita analisis


sebagai berikut :
Code size –O0 yang pada kompilasi ini lebih beser
dbandingkan code lainnya , namun penggunaan memorynya
lebih kecil dari yang lainnya.
Code –O1 lebih kecil dibandingkan –O0 namun dapat kita
lihat penggunaan memoryna lebih banyak dibandigkan –O0.
Begitu juga dengan –O2 codenya lebih sedikit dibandingkan -
O3 namun berbanding terbalik dengan penggunaan
memorynya.
Tetapi –Os memiliki size yang sama dengan –O3 , dari segi 3.7. Tugas 7: Header File
pengamatan saat kita melakukan kompilasi terdapat sedikit
perbedaan satu sama lain .
-Ofast memiliki code size yang sama dengan –Os dan dari
segi waktu , saat kompilasi memiliki kesamaan.

3.5 Tugas 5 : Kompilasi Beberapa File Kode dengan GCC

Pada modul ini kita akan mengguakan sebuah text baru yang
kita namakan main_text file.

Gambar 3.7.1

Pada percobaan ini kita ak menggunkan sebuah menu yaitu


ekstern yang berfungsi sebagai pembaca variabel accum agar
dapat berjalan skala bersama dan dan dapat diakses secara
global. Oleh sebab itu Variabel tersebut akan diletakkan dalam
file header yang berisikan fungsi yang kan dipanggila nantinya
pada make file. Penggunaannya bilangan pertama yang di
entru ialah 2 dan selanjutnya 3 dan menghasilkan proses
Gambar 3.5.1 Tampilan Command Promt pejumlahan 5.

Pada tampilan diatas kita dapat melakukan pemanggilan


main_text . File yang tersusun secara terpisah dan saat 3.8. Tugas 8 : Pemanggilan Prosedur Dan Stack Memory
pemanggilan tersebut maka akan ditampilkan teks yang telah
dipersiapkan sebelumnya pada teks.c . Saya belum bisa menyelesaikannya karena adanya error.

3.6. Tugas 6 :Penggunaan Makefile Pada GCC

Pada percobaan ini kita akan menggunakan make file, dan 4. KESIMPULAN
ditampikan dengan pada command prount yaitu pemanggilan
main_text.exe. Dengan adanya tahapan ini maka akan Dari praktikum ini dapat kita peroleh beberapa kesimpulan
mempersinggkat dibandingkan pemanggilan dengan manual . yaitu :
• Pada saat kompilasi bahasa pemogramn bahasa C
Perbedaan make file dengan batch file dapat kita amati dari terdapat 4 tahahapan yakni : pre-processor, compiler,
cara pemanggilannya yaitu pada make file beberapa perintah assembler, dan linker
dieksekusi oleh satu buah perintah, berbeda dengan batch file • Untuk mempermudah pemanggilan text file dalam
yang melakukan semua perintah untuk menampilkan suatu command promnt dapat menggunakan makefile
hasil yang telah dipersiapkan sebelumnya. ataupun batchfile.
• Bahasa assembly sanat bergantung terhadap
penulisan bahasa C atau logaritma C nya.
• Setiap procedure call akan dialokasikan dalam stack
memory.

5. DAFTAR PUSTAKA
1] Hanindhito, Bagus. Modul Praktikum EL3111 Arsitektur
Sistem Komputer, Sekolah Teknik Elektro dan Informatika,
Gambar 3.6.1 Bandung, 2014.
[2] Bryant, Randal, dan David O’Hallaron. Computer Systems
: A Programmer’s Perspective 2nd Edition. 2011.
Massachusetts : Pearson Education Inc.
[3] Patterson, David, dan John Hennessy. Computer
Organization and Design: The Hardware/Software Interface.
2012. Waltham : Elsevier Inc.
6. Lampiran

Gambar 3.1.1 screenshot potongan code.exe

Gambar 3.4.1. Code _o0.s

Gambar 3.1.2 screenshot code.o

Gambar 3.4.2 Code_o1.s

Gambar 3.2.1 Screenshot file batch.bat pada cmd

Gambar 3.4.3. Code_02.s

Gambar 3.2.2 screenshot disassembly code.o


Gambar 3.4.6 code_0s.s

Gambar 3.2.3 screenshot potongan disassembly code.exe

Gambar 3.5.1 Tampilan Command Promt

Gambar 3.4.4 Code_03.s

Gambar 3.7.1

Gambar 3.4.5 code_0fast.c

Das könnte Ihnen auch gefallen