• Tidak ada hasil yang ditemukan

Laporan Praktikum Arsitektur Sistem Komputer - Compiler Bahas C dan Bahasa Assembly Intel x86

N/A
N/A
Protected

Academic year: 2021

Membagikan "Laporan Praktikum Arsitektur Sistem Komputer - Compiler Bahas C dan Bahasa Assembly Intel x86"

Copied!
17
0
0

Teks penuh

(1)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 1

PERCOBAAN 1 COMPILER BAHASA C

DAN BAHASA ASSEMBLY INTEL ® x86

Kevin Manatar Oloan Situmorang (13212029)

Asisten: Devi Oktama Putri Lim (13211124) Tanggal Percobaan: 29/09/2014 EL3111 - Praktikum Arsitektur Sistem Komputer

Laboratorium Dasar Teknik Elektro - Sekolah Teknik Elektro dan Informatika ITB

Abstrak

Pada percobaan ini, praktikan akan memahami tentang proses kompilasi bahasa C menjadi bahasa mesin. Di antara proses tersebut akan dipahami bahasa assembly yang terjadi dalam proses compiler. Di dalamnya akan ada pemahaman mengenai stack dan procedure call.

Kata kunci : bahasa C, assembly, makefile, batch file, stack memory, procedure call.

1. P

ENDAHULUAN

Adapun beberapa tujuan yang hendak dicapai dalam modul praktikum ini adalah sebagai berikut:  Praktikan memahami tahap-tahap kompilasi program dalam Bahasa C sebagai Bahasa tingkat tinggi hingga diperoleh Bahasa tingkat rendah yang dapat dieksekusi oleh mesin.  Praktikan mampu melakukan kompilasi

program bahasa C menggunakan compiler GCC beserta penggunaan makefile dan batch file.

 Praktikan memahami bahasa assembly dan mampu melakukan analisis terhadap bahasa assembly Interl ® x86 yang dihasilkan oleh compiler GCC.

 Praktikan memahami penggunaan stack memory pada setiap procedure call.

Dalam praktikum ini, beberapa perangkat yang dipakai adalah sebagai berikut.

 Komputer Desktop / Laptop dengan system operasi Microsoft ® Windows ™ 7/8/8.1.  Compiler GCC dalam paket program

CodeBlocks untuk melakukan kompilasi program.

 Notepad++ sebagai teks editor dan HexEdit sebagai heksadesimal editor.

Berikut dijelaskan metode (langkah-langkah) percobaan yang akan dikerjakan.

 Tugas 1 : Proses Kompilasi Bahasa C Menggunakan GCC

 Tugas 2 : Proses Kompilasi Bahasa C Menggunakan GCC dengan Bantuan Batch File

Buat program kode seperti pada modul. Simpan file dengna

code.c.

Preprocess code.c menjadi code.i. (Perintah command prompt

terdapat pada modul).

Assemble code.c menjadi code.o. (Perintah command prompt terdapat pada modul).

Lakukan semua proses kompilasi menjadi code .exe (Perintah command prompt

terdapat pada modul).

Buka file code.o dan code.exe pada teks editor.

(2)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 2  Tugas 3 : Disassembly File Objek

 Tugas 4 : Optimisasi Kompilasi Program pada GCC

 Tugas 5 : Kompilasi Beberapa File Kode dengan GCC

 Tugas 6 : Penggunaan Makefile pada GCC Salin file code.c dari tugas 1 ke

tugas 2.

Buat batch file dengan kode terlampir pada modul.

Simpan kode dengan nama batch.bat pada folder yang

sama dengan code.c.

Klik batch.bat.

Lihat semua file yang dihasilkan folder tersebut.

Salin file code.o dan code.exe dari foler tugas 2 ke folder tugas 3.

Gunakan objdump untuk disassembly code.o (Perintah command propmpt

terlampir pada modul).

Gunakan objdump untuk disassembly code.exe (Perintah command propmpt

terlampir pada modul).

Buka file disassemlby_code.o dan disassembly_code_exe.asm dengan

teks editor. Bandingkan.

Salin code.c dari folder tugas 2 ke folder tugas 4.

Ubah nama file code.c menjadi code_O0.c.

Salin code_O0.c menjadi code_O1.c, code_O2.c, code_O3.c , code_Os.c,

code_Ofast.c.

Buat file batch.bat untuk mengkompilasi kelima file di atas (Perintah command

prompt terdapat pada moudl).

Buat file code_O0.s, code_O1.s, code_O2.c, code_O3.s, code_Os.s, dan

code_Ofast.s dengan teks editor.

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.

(3)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 3  Tugas 7 : Header File

 Tugas 8 : Pemanggilan Prosedur dan Stack Memory

 Tugas 9 : Program Fibonacci

2. L

ANDASAN

T

EORITIS

2.1

K

OMPILASI

M

ENGGUNAKAN

GCC

Proses menerjemahkan baris kode program dalam Bahasa C menjadi file executable dilakukan dalam empat langkah yaitu pre-processor, compiler, assembler, dan linker yang seluruhnya disebut sistem kompilasi.

 Preprocessor

Semua perintah pre-processor yang ditulis dalam bahasa tingkat tinggi akan diproses terlebih dahulu oleh pre-processor sebelum compiler melaksanakan tugasnya. Beberapa tugas dari pre-processor ini adalah sebagai berikut.

o Semua komentar dalam file program diganti dengan spasi satu buah. Salin file main_text.c, text.c, dan

text.h dari folder tugas 5 ke folder tugas 6.

Buatlah makefile dengan menggunakan teks editor terdapat pada modul.

Simpan makefile dengan nama makefile (tanpa eksistensi /

akhiran).

Gunakan command prompt untuk kompilasi. (Perintah command prompt terlampir pada modul).

Bandingkan hasil tugas 5 dengan tugas 6 melakukan main_text.exe.

Pada tugas ini, akan diapahami bagaimana extern pada header file.

Buatlah program dengan kode terlampir di modul.

Simpan dengan nama add.c.

Buat sebuah program sederhana main.c.

Buatlah header file add.h pada main.c.

Lakukan kompilasi file (Perintah command prompt

terdapat pada modul).

Buka CodeBlocks lakukan setting seperti pada modul.

Perhatikan nilai CPU Registers, Call Stack, Disassembly, Memory Dump, dan Watches untuk setiap kode.

Analisis data yang diperoleh.

Implementasi prosedur-prosedur yang dibutuhkan. Disertakan juga

file header.

Buat program utama fibo_main.c.

Buat makefile untuk melakukan kompilasi seluruh file kode

program.

Jalankan program yang telah dikompilasi lalu periksa

(4)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 4 o Semua \n (backslash-newline) yang

menandakan baris baru akan dihapus tidak peduli dimanapun dia berada. Fitur ini memungkinkan kita untuk membagi baris program yang panjang ke dalam beberapa baris tanpa mengubah arti.

o Macro yang telah didefinisikan diganti dengan definisinya.

Contohnya, pada perintah #define

MAX_ROWS 10, pre-processor akan

mengganti semua kata MAX_ROWS dengan 10. Pada perintah #include <stdio.h>, pre-processor akan mengganti baris tersebut dengan isi file stdio.h.

 Compiler

Compiler akan menerjemahkan bahasa tingkat

tinggi C menjadi kode assembly. Kode assembly ini berisi instruksi-instruksi yang sesuai dengan instruction set yang dimiliki oleh mesin. File yang dihasilkan pada tahap ini masih berupa file teks (.s).

 Assembler

Assembler akan menerjemahkan bahasa assembly menjadifile objek. File objek ini

merupakan file biner (.o).  Linker

Linker akan menggabungkan file biner yang

diperoleh pada tahap sebelumnya dengan file biner lain yang merupakan dependencydari program yang dibuat, contohnya library untuk menjalankan fungsi printf. Hasil dari linker berupa file biner executable(dalam platform Microsoft® Windows™, file ini memiliki akhiran .exe).

2.2

D

ISSASSEMBLY

M

ENGGUNAKAN

GCC

Selain dapat melakukan kompilasi, paket compiler GCC juga menyertakan sebuah disassembler yang mampu melakukan disassembly file biner (.oatau .exe) menjadi file assembly(.s) bernama Object Dump.

2.3

O

PTIMISASI

P

ROGRAM

M

ELALUI

P

ROSES

K

OMPILASI

GCC mendukung beberapa tingkat optimisasi program yang dapat dilakukan saat proses kompilasi dilakukan. Terdapat beberapa tingkat optimisasi program yang dapat dipilih dengan menambahkan flag optimisasi saat melakukan kompilasi program. Umumnya optimisasi program merupakan trade-off antara execution speed, program

size, compilation time, dan kemudahan dalam

melakukan debugging.

2.4

M

AKEFILE DAN

B

ATCH

F

ILE

Untuk suatu project yang terdiri atas beberapa file kode, tentu akan sangat merepotkan untuk melakukan kompilasi dengan menggunakan perintah kompilasi yang ditulis pada command

prompt satu per satu untuk setiap file. GCC

memiliki fitur makefile yang berfungsi untuk menulis daftar nama file kode di dalam project tersebut. Kita cukup memberikan GCC nama makefile lalu GCC akan melakukan proses kompilasi untuk semua file tersebut untuk kemudian menggabungkannya pada file executable. Makefile dapat bersifat sederhana hingga kompleks, bergantung pada sejauh mana kita menggunakan makefile untuk mengorganisasikan

project kita.

Pada platform Microsoft® Windows™, terdapat sebuah file shell script bernama Windows™ Batch File. Kita dapat menuliskan perintah-perintah yang biasa kita tuliskan secara terpisah pada command

prompt dalam suatu file yang disimpan dengan

ekstensi .bat. Untuk mengeksekusi perintah-perintah tersebut, kita cukup menjalankan file .bat tersebut sehingga command prompt terbuka dan perintah-perintah yang kita tuliskan dieksekusi secara otomatis.

2.5

I

NSTRUKSI DAN

B

AHASA

A

SSEMBLY

I

NTEL

®

X

86

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

(5)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 5 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.

 EIP adalah register 32-bit yang digunakan sebagai instruction pointer. Dengan demikian, EIP akan berisi alamat dari instruksi selanjutnya yang akan dieksekusi.

Instruksi-instruksi yang digunakan pada Intel® x86 tidak akan dijelaskan di dalam modul praktikum ini. Praktikan dapat mempelajari lebih jauh mengenai instruksi-instruksi ini pada bab 3di buku “Computer System –A Programmer’s Perspective” yang ditulis oleh Bryant dan O’Hallaron.

2.6

S

TACK DAN

P

ROCEDURE

C

ALL

Stack pada umumnya disusun atas beberapa activation frame. Setiap frame memiliki sebuah base pointeryang menunjukkan alamat tertinggi (highest address) pada frame tersebut. Karena stack tumbuh

dari high address menuju low address, base

pointerakan 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 addresske dalam stack. Kemudian, callee memasukkan alamat old base

pointer milik caller ke dalam stackdan memperbarui

nilai base pointer 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

variable 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.

3. H

ASIL DAN

A

NALISIS

3.1

T

UGAS

1

:

P

ROSES

K

OMPILASI

B

AHASA

C

M

ENGGUNAKAN

GCC

Setelah dilihat pada teks editor, code.o dan code.exe sama-sama menghasilkan kode biner. Namun code.o menghasilkan kode yang lebih singkat dibandingkan dengan code.exe.

Sesuai dengan teori yang dipahami pada landasan teoritis, hasil terjemahan assembler akan menghasilkan file objek. File objek ini apabila melalui linker akan menjadi executable file yang akan mempaparkan file biner lainnya yang merupakan dependency dari program yang dibuat. Oleh karena itulah executable file akan berisi file biner daripada file objek.

Gambar 3.1.1 Screenshot potongan code.o

(6)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 6 Berdasarkan pengamatan screenshot di atas, file

objek tidak dapat dibaca dalam teks editor karena file objek berupa file biner yang tidak dapat dibaca oleh teks editor.

Adapun seperti kita ketahui proses kompilasi bahasa C diolah menjadi bahasa mesin melalui 4 tahap yaitu pre-processor, compiler, assembler, dan linker. Apabila program dijalankan dalam suatu mikroprocessor yang berbeda, maka assembler harus didesain sedemikian rupa agar file bahasa C dapat menghasilkan terjemahan bahasa mesin yang sama.

3.2

T

UGAS

2

:

P

ROSES

K

OMPILASI

B

AHASA

C

M

ENGGUNAKAN

GCC

DENGAN

B

ANTUAN

B

ATCH

F

ILE

Setelah menjalankan batch file, diperoleh file-file yang sama seperti yang dihasilkan pada tugas 1. Dari hasil ini, dapat disimpulkan bahwa batch file dapat melakukan kerja yang sama dengan mengetik kode di command prompt secara manual. Sesuai dengan landasan teoritis, batch file mampu mengeksekusi perintah-perintah dengan cukup menjalankan file .bat sehingga command prompt dapat terbuka dan perintah-perintah yang dituliskan dieksekusi secara otomatis.

3.3

T

UGAS

3

:

D

ISASSEMBLY

F

ILE

O

BJEK Fungsi Object Dump akan melakukan disassemlby dari file biner (.o atau .exe) menjadi file assembly (.s). Diperoleh hasil file assembly seperti di bawah.

Gambar 3.3.1 Screenshot disassemlby_code_o.asm

Gambar 3.3.2 Screenshot potongan disassemlby_code_exe.asm

3.4

T

UGAS

4

:

O

PTIMISASI

K

OMPILASI

P

ROGRAM PADA

GCC

Diperoleh beberapa file assembly untuk masing-masing optimisasi kompilasi sebagai berikut.

Kode 3.4.1 code_O0.s code_O0.o: file format pe-i386

Disassembly of section .text: 00000000 <_main>: 0: 55 push %ebp 1: 89 e5 mov %esp,%ebp 3: 83 e4 f0 and $0xfffffff0,%esp 6: 83 ec 10 sub $0x10,%esp 9: e8 00 00 00 00 call e <_main+0xe> e: c7 44 24 0c 00 00 00 movl $0x0,0xc(%esp) 15: 00 16: c7 44 24 08 00 00 00 movl $0x0,0x8(%esp) 1d: 00 1e: eb 0c jmp 2c <_main+0x2c> 20: 8b 44 24 0c mov 0xc(%esp),%eax 24: 01 44 24 08 add %eax,0x8(%esp) 28: ff 44 24 0c incl 0xc(%esp) 2c: 81 7c 24 0c f3 01 00 cmpl $0x1f3,0xc(%esp) 33: 00 34: 7e ea jle 20 <_main+0x20> 36: 8b 44 24 08 mov 0x8(%esp),%eax 3a: c9 leave 3b: c3 ret

(7)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 7 Kode 3.4.2 code_O1.s Kode 3.4.2 code_O2.s Kode 3.4.2 code_O3.s Kode 3.4.2 code_Ofast.s Kode 3.4.2 code_Os.s code_O1.o: file format pe-i386

Disassembly of section .text: 00000000 <_main>: 0: 55 push %ebp 1: 89 e5 mov %esp,%ebp 3: 83 e4 f0 and $0xfffffff0,%esp 6: e8 00 00 00 00 call b <_main+0xb> b: b8 00 00 00 00 mov $0x0,%eax 10: 40 inc %eax 11: 3d f4 01 00 00 cmp $0x1f4,%eax 16: 75 f8 jne 10 <_main+0x10> 18: b8 4e e7 01 00 mov $0x1e74e,%eax 1d: c9 leave 1e: c3 ret 1f: 90 nop

code_O2.o: file format pe-i386

Disassembly of section .text.startup: 00000000 <_main>: 0: 55 push %ebp 1: 89 e5 mov %esp,%ebp 3: 83 e4 f0 and $0xfffffff0,%esp 6: e8 00 00 00 00 call b <_main+0xb> b: b8 4e e7 01 00 mov $0x1e74e,%eax 10: c9 leave 11: c3 ret 12: 90 nop 13: 90 nop

code_O3.o: file format pe-i386 Disassembly of section .text.startup: 00000000 <_main>: 0: 55 push %ebp 1: 89 e5 mov %esp,%ebp 3: 83 e4 f0 and $0xfffffff0,%esp 6: e8 00 00 00 00 call b <_main+0xb> b: b8 4e e7 01 00 mov $0x1e74e,%eax 10: c9 leave 11: c3 ret 12: 90 nop 13: 90 nop

code_Ofast.o: file format pe-i386

Disassembly of section .text.startup: 00000000 <_main>: 0: 55 push %ebp 1: 89 e5 mov %esp,%ebp 3: 83 e4 f0 and $0xfffffff0,%esp 6: e8 00 00 00 00 call b <_main+0xb> b: b8 4e e7 01 00 mov $0x1e74e,%eax 10: c9 leave 11: c3 ret 12: 90 nop 13: 90 nop

code_Os.o: file format pe-i386

Disassembly of section .text.startup: 00000000 <_main>: 0: 55 push %ebp 1: 89 e5 mov %esp,%ebp 3: 83 e4 f0 and $0xfffffff0,%esp 6: e8 00 00 00 00 call b <_main+0xb> b: b8 4e e7 01 00 mov $0x1e74e,%eax 10: c9 leave 11: c3 ret 12: 90 nop 13: 90 nop

(8)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 8 Dari tampilan file assembly hasil optimisasi

kompilasi program di atas, diperoleh beberapa analisis sebagai berikut.

 File assembly hasil kompilasi –O0 memiliki code size yang lebih besar dibandingkan file assembly yang lain. Di samping itu penggunaan memori lebih sedikit.

 File assembly hasil kompilasi –O1 memiliki code size lebih kecil dibandingkan file assembly hasil kompilasi –O0. Namun menggunakan memori yang lebih banyak.  File assembly hasil kompilasi –O2 memiliki

code size yang lebih kecil lagi dibandingkan file assembly hasil kompilasi –O1. Penggunaan memori sama dengan sebelumnya.

 Untuk file assembly hasil kompilasi –O3 memiliki code size yang sama dengan file assembly hasil kompilasi –O2. Penggunaan memori juga sama seperti sebelumnya. Namun waktu dalam melakukan kompilasi semakin lama.

 File assembly hasil kompilasi –Os memiliki code size yang sama dengan assembly –O3 dan waktu kompilasi juga berkurang dibandingkan dengan hasil kompilasi –O3.

 File assembly hasil kompilasi –Ofast memiliki code size yang sama dengan assembly –Os dan memiliki waktu kompilasi yang sama dengan waktu kompilasi mode –O3.

3.5

T

UGAS

5

:

K

OMPILASI

B

EBERAPA

F

ILE

K

ODE DENGAN

GCC

Hasil yang ditampilkan oleh main_text.exe :

Gambar 3.5.1 Screenshot main_text.exe Pada percobaan ini, file bahasa C dapat berjalan walaupun terdiri atas file yang terpisah. File-file dapat tetap terintegrasi karena digunakan file header. Pada percobaan ini digunakan file text.h.

3.6

T

UGAS

6

:

P

ENGGUNAAN

M

AKEFILE

PADA

GCC

Hasil yang ditampilkan oleh main_text.exe :

Gambar 3.6.1 Screenshot main_text.exe Pada percobaan ini digunakan makefile (terlampir). Penggunaan makefile (sesuai dengan landasarn teoritis) akan mempersingkat proses kompilasi dibandingkan dengan menggunakan command

prompt secara manual. Perbedaan dengan batch file adalah makefile melakukan beberapa perintah dalam satu perintah di command prompt. Sedangkan batch file melakukannya untuk setiap perintah.

Adapun hasil tugas 5 dan hasil tugas 6 adalah sama (dapat dilihat pada hasil tampilan gambar 3.5.1 dan gambar 3.5.2).

3.7

T

UGAS

7

:

H

EADER

F

ILE Hasil yang ditampilkan oleh main.exe :

Gambar 3.7.1 Screenshot main.exe

Pada percobaan ini, digunakan extern agar variabel accum dapat diakses secara global. Variabel accum diletakkan dalam file header.

3.8

T

UGAS

8

:

P

EMANGGILAN

P

ROSEDUR DAN

S

TACK

M

EMORY

Setelah melakukan percobaan diperoleh hasil sebagai berikut.

Gambar 3.8.1 Isi register ESP dan EBP pada CPU Register pada return squaresum(a, b);

Gambar 3.8.2 Call stack pada return squaresum(a, b);

(9)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 9 Gambar 3.8.3 Nilai memory ESP pada return

squaresum(a, b);

Gambar 3.8.4 Nilai memory EBP pada return squaresum(a, b);

Gambar 3.8.5 Isi register ESP dan EBP pada CPU Register pada int temp1 = square(y);

Gambar 3.8.6 Call stack pada int temp1 = square(y);

Gambar 3.8.7 Nilai memory ESP pada int temp1 = square(y);

Gambar 3.8.8 Nilai memory EBP pada int temp1 = square(y);

Gambar 3.8.9 Isi register ESP dan EBP pada CPU Register pada return x*x;

Gambar 3.8.10 Call stack pada return x*x;

Gambar 3.8.11 Nilai memory ESP dan EBP pada return x*x;

Gambar 3.8.12 Isi register ESP dan EBP pada CPU Register pada int temp2 = square(z);

(10)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 1 0 Gambar 3.8.13 Call stack pada int temp2 =

square(z);

Gambar 3.8.14 Nilai memory ESP pada int temp2 = square(z);

Gambar 3.8.15 Nilai memory ESP pada int temp2 = square(z);

Gambar 3.8.16 Isi register ESP dan EBP pada CPU Register pada return x*x;

Gambar 3.8.17 Call stack pada return x*x;

Gambar 3.8.18 Nilai memory ESP pada return x*x;

Gambar 3.8.19 Isi register ESP dan EBP pada CPU Register pada return temp1+temp2;

Gambar 3.8.20 Call stack pada return temp1+temp2;

Gambar 3.8.21 Nilai memory ESP pada return temp1+temp2;

(11)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 11 Gambar 3.8.22 Nilai memory EBP pada return

temp1+temp2;

Gambar 3.8.23 Isi register ESP dan EBP pada CPU Register saat program selesai dieksekusi

Gambar 3.8.24 Call stack saat program selesai dieksekusi

Gambar 3.8.25 Nilai memory ESP saat program selesai dieksekusi

Gambar 3.8.26 Nilai memory EBP saat program selesai dieksekusi

3.9

T

UGAS

9

:

P

ROGRAM

F

IBONACCI Setelah melakukan percobaan ini, diperoleh hasil seperti di bawah.

Gambar 3.9.1 Hasil kompilasi menggunakan makefile

Gambar 3.9.2 Tampilan fibo_main.exe

4. K

ESIMPULAN

Diperoleh beberapa kesimpulan yaitu sebagai berikut.

 Proses kompilasi program dalam bahasa C dilalui oleh 4 tahap, yaitu preprocessor, compiler, assembler, dan linker.

 Makefile dan batch file dapat digunakan untuk mempermudah dalam melakukan kompilasi.  Bahasa assembly dihasilkan dari proses

assembler dimana bahasa assembly bergantung dari bahasa C-nya.

 Untuk setiap proses procedure call akan dialokasikan dalam stack memory.

D

AFTAR

P

USTAKA

[1]

Hanindhito, Bagus. Modul Praktikum EL3111

Arsitektur Sistem Komputer, Sekolah Teknik

Elektro dan Informatika, 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.

L

AMPIRAN

(12)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 12

Kode 5.1.1 code.c

Lampiran untuk Tugas 2 :

Kode 5.2.1 batch.bat

Lampiran untuk Tugas 4 :

Kode 5.4.1 batch.bat

Lampiran untuk Tugas 5 :

Kode 5.5.1 text.c

// Praktikum EL3111 Arsitektur

Sistem Komputer

// Modul : 1

// Percobaan : Proses

Kompilasi Bahasa C Menggunakan GCC // Tanggal : 29 September 2014

// Kelompok : 16 // Rombongan : A

// Nama (NIM) 1 : Khairunnisa (13212028)

// Nama (NIM) 2 : Kevin Manatar Oloan Situmorang (13212029)

// Nama File : code.c // Deskripsi : Demonstrasi proses kompilasi C menjumlahkan deret bilangan sebanyak N_LOOP #define N_LOOP 500

int main(void) {

int indeks; int accumulator; indeks = 0; accumulator = 0; while(indeks<N_LOOP) { accumulator = accumulator + indeks; indeks = indeks + 1; } return accumulator; } %~d0 cd "%~dp0" gcc -E code.c > code.i gcc -S code.c gcc -c code.c gcc -o code.exe code.c code.exe pause %~d0 cd "%~dp0" gcc -O0 -c code_O0.c gcc -O1 -c code_O1.c gcc -O2 -c code_O2.c gcc -O3 -c code_O3.c gcc -Os -c code_Os.c gcc -Ofast -c code_Ofast.c

objdump -d code_O0.o > code_O0.s objdump -d code_O1.o > code_O1.s objdump -d code_O2.o > code_O2.s objdump -d code_O3.o > code_O3.s objdump -d code_Os.o > code_Os.s objdump -d code_Ofast.o >

code_Ofast.s pause

// Praktikum EL3111 Arsitektur Sistem Komputer

// Modul : 1

// Percobaan : Kompilasi Beberapa File Kode dengan GCC

// Tanggal : 9 September 2014 // Kelompok : 16

// Rombongan : A

// Nama (NIM) 1 : Khairunnisa (13212028)

// Nama (NIM) 2 : Kevin Manatar Oloan Situmorang (13212029) // Nama File : text.c

// Deskripsi : Demonstrasi

MakeFile, Mencetak string ke layar #include <stdio.h>

#include "text.h"

void test(void) {

printf("Arsitektur Sistem

Komputer sangat menyenangkan!\n");

(13)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 13

Kode 5.5.2 text.h

Kode 5.5.3 main_text.c

Lampiran untuk Tugas 6 :

Kode 5.6.1 makefile

Lampiran untuk Tugas 7 :

Kode 5.7.1 add.c

// Praktikum EL3111 Arsitektur

Sistem Komputer // Modul : 1

// Percobaan : Kompilasi Beberapa File Kode dengan GCC

// Tanggal : 29 September 2014 // Kelompok : 16

// Rombongan : A

// Nama (NIM) 1 : Khairunnisa (13212028)

// Nama (NIM) 2 : Kevin Manatar Oloan Situmorang (13212029) // Nama File : text.h

// Deskripsi : Demonstrasi

MakeFile, Mencetak string ke layar #ifndef TES_H

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

// Praktikum EL3111 Arsitektur Sistem Komputer

// Modul : 1

// Percobaan : Kompilasi Beberapa File Kode dengan GCC

// Tanggal : 29 September 2014 // Kelompok : 16

// Rombongan : A

// Nama (NIM) 1 : Khairunnisa (13212028)

// Nama (NIM) 2 : Kevin Manatar Oloan Situmorang (13212029) // Nama File : main_text.c // Deskripsi : Demonstrasi

MakeFile memanggil prosedur test pada text.c

#include "text.h"

void main(void) {

test(); }

all: main_text.exe

main_text.exe: main_text.o text.o gcc main_text.o text.o -o main_text.exe main_text.o: main_text.c gcc -c main_text.c text.o: text.c gcc -c text.c

// Praktikum EL3111 Arsitektur Sistem Komputer

// Modul : 1

// Percobaan : Header File // Tanggal : 29 September 2014 // Kelompok : 16

// Rombongan : A

// Nama (NIM) 1 : Khairunnisa (13212028)

// Nama (NIM) 2 : Kevin Manatar Oloan Situmorang (13212029) // Nama File : add.c

// Deskripsi : Demonstrasi header file menjumlahkan dua bilangan #include "add.h"

#include <stdio.h>

int accum = START_VAL;

int sum(int x, int y) {

int t = x + y; accum += t; return t; }

(14)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 14

Kode 5.7.2 add.h

Kode 5.7.3 main.c

Lampiran untuk Tugas 8 :

// Praktikum EL3111 Arsitektur

Sistem Komputer // Modul : 1

// Percobaan : Header File // Tanggal : 29 September 2014 // Kelompok : 16

// Rombongan : A

// Nama (NIM) 1 : Khairunnisa (13212028)

// Nama (NIM) 2 : Kevin Manatar Oloan Situmorang (13212029) // Nama File : add.h

// Deskripsi : Demonstrasi MakeFile

#ifndef START_VAL

#define START_VAL 0 extern int accum;

int sum(int x, int y); #endif

// Praktikum EL3111 Arsitektur Sistem Komputer

// Modul : 1

// Percobaan : Header File // Tanggal : 29 September 2014 // Kelompok : 16

// Rombongan : A

// Nama (NIM) 1 : Khairunnisa (13212028)

// Nama (NIM) 2 : Kevin Manatar Oloan Situmorang (13212029) // Nama File : main_add.c // Deskripsi : Demonstrasi MakeFile

#include<stdio.h> #include "add.h"

void main(void) {

int x; int y;

int z;

printf ("Masukkan bilangan

pertama :");

scanf("%d", &x);

printf ("Masukkan bilangan

kedua :");

scanf ("%d", &y); z = sum(x,y);

printf ("Jumlahnya : %d\n", z);

printf ("Masukkan bilangan

pertama :");

scanf("%d", &x);

printf ("Masukkan bilangan

kedua :"); scanf ("%d", &y); z = sum(x,y); printf ("Jumlahnya : %d\n", z); printf("akumulasi: %d\n", accum); }

(15)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 15

Kode 5.8.1 Kode sumofsquare.c

Lampiran untuk Tugas 9 :

Kode 5.9.1 Kode fibo.c

Kode 5.9.2 Kode fibo.h

// Praktikum EL3111 Arsitektur

Sistem Komputer // Modul : 1

// Percobaan : Pemanggilan Prosedur dan Stack Memory // Tanggal : 9 September 2014 // Kelompok : 16

// Rombongan : A

// Nama (NIM) 1 : Khairunnisa (13212028)

// Nama (NIM) 2 : Kevin Manatar Oloan Situmorang (13212029) // Nama File : sumofsquare.c // Deskripsi : Demonstrasi procedure call dan stack

menghitung jumlah dari kuadrat bilangan

#include <stdio.h> #include <stdlib.h>

int square (int x) {

return x*x; }

int squaresum (int y, int z) {

int temp1 = square(y); int temp2 = square(z); return temp1+temp2; }

int main (void) {

int a = 5; int b = 9; return squaresum(a,b); }

// Praktikum EL3111 Arsitektur Sistem Komputer

// Modul : 1

// Percobaan : Program Fibonacci // Tanggal : 29 September 2014 // Kelompok : 16

// Rombongan : A

// Nama (NIM) 1 : Khairunnisa (13212028)

// Nama (NIM) 2 : Kevin Manatar Oloan Situmorang (13212029) // Nama File : fibo.c

// Deskripsi : Menangani proses kalkulasi deret

#include <stdio.h> #include "fibo.h"

int accum = START_VAL;

int fibo (int x, int y) {

int t = x + y; accum += t; return t; }

// Praktikum EL3111 Arsitektur Sistem Komputer

// Modul : 1

// Percobaan : Program Fibonacci // Tanggal : 29 September 2014 // Kelompok : 16

// Rombongan : A

// Nama (NIM) 1 : Khairunnisa (13212028)

// Nama (NIM) 2 : Kevin Manatar Oloan Situmorang (13212029) // Nama File : fibo.h

// Deskripsi : Demonstrasi MakeFile,

#ifndef START_VAL

#define START_VAL 0 extern int accum;

int fibo(int x, int y); #endif

(16)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 16

Kode 5.9.3 Kode inputn.c

Kode 5.9.4 Kode inputn.h

Kode 5.9.5 Kode fibo_main.c

// Praktikum EL3111 Arsitektur

Sistem Komputer // Modul : 1

// Percobaan : Program Fibonacci // Tanggal : 29 September 2014 // Kelompok : 16

// Rombongan : A

// Nama (NIM) 1 : Khairunnisa (13212028)

// Nama (NIM) 2 : Kevin Manatar Oloan Situmorang (13212029) // Nama File : inputn.c

// Deskripsi : Menangani proses meminta pengguna untuk memasukkan nilai n hingga menerima dan

menyimpan nilai n yang dimasukkan pengguna.

#include <stdio.h> #include "inputn.h"

void inputn (int *n) {

char temp;

printf("Masukkan nilai n :"); scanf ("%d", &(*n));

scanf("%c", &temp); }

// Praktikum EL3111 Arsitektur Sistem Komputer

// Modul : 1

// Percobaan : Program Fibonacci // Tanggal : 29 September 2014 // Kelompok : 16

// Rombongan : A

// Nama (NIM) 1 : Khairunnisa (13212028)

// Nama (NIM) 2 : Kevin Manatar Oloan Situmorang (13212029) // Nama File : inputn.h // Deskripsi : Demonstrasi MakeFile,

#ifndef START_VAL

#define START_VAL 0

void inputn(int *n); #endif

// Praktikum EL3111 Arsitektur Sistem Komputer

// Modul : 1

// Percobaan : Program Fibonacci // Tanggal : 29 September 2014 // Kelompok : 16

// Rombongan : A

// Nama (NIM) 1 : Khairunnisa (13212028)

// Nama (NIM) 2 : Kevin Manatar Oloan Situmorang (13212029) // Nama File : main.c

// Deskripsi : Memanggil prosedur-prosedur pada inputn.c dan fibo.c #include <stdio.h>

#include "fibo.h" #include "inputn.h"

void main(void) {

int i; int z; int batas; inputn(&batas); int a = 1; int b = 1; printf ("%d ", a); printf ("%d ", b); if (batas>2) { for (i=3;i<=batas;i++) { z = fibo (a,b); printf ("%d ", z); a=b; b=z; } } } all: fibo_main.exe

fibo_main.exe: fibo_main.o fibo.o inputn.o gcc fibo_main.o fibo.o inputn.o -o fibo_main.exe fibo_main.o: fibo_main.c gcc -c fibo_main.c fibo.o: fibo.c gcc -c fibo.c inputn.o: inputn.c gcc -c inputn.c

(17)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 17

Gambar

Gambar 3.1.1 Screenshot potongan code.o
Gambar 3.3.2 Screenshot potongan  disassemlby_code_exe.asm  3.4  T UGAS  4 : O PTIMISASI  K OMPILASI
Gambar 3.5.1 Screenshot main_text.exe  Pada  percobaan  ini,  file  bahasa  C  dapat  berjalan  walaupun  terdiri  atas  file  yang  terpisah
Gambar 3.8.25 Nilai memory ESP saat program  selesai dieksekusi

Referensi

Dokumen terkait