Anda di halaman 1dari 30

Arfian Nabiel Al Hilmy

1462000002
Kompulasi dan Disassamble Program
Dasar Teori
Suatu program komputer akan mudah dibaca dan
dimengerti oleh manusia jika ditulis dalam bahasa manusia atau
bahasa tingkat tinggi (high level language), seperti bahasa
pemrograman C. Tetapi, agar program yang telah dibuat
tersebut dapat dijalankan pada sistem komputer, maka setiap
baris instruksi atau pernyataan pada bahasa program C harus
diterjemahkan oleh suatu program lain agar berubah menjadi
urutan instruksi yang sesuai dengan bahasa mesin tingkat
rendah. Instruksi‐instruksi tersebut kemudian dikemas dalam
suatu bentuk yang disebut executable object program dan
disimpan dalam file biner.
Langkah‐langkah menerjemahkan baris‐baris
kode program pada C menjadi file eksekusi dilakukan
dalam empat langkah meliputi pre‐processor, compiler,
assembler, dan linker, yang seluruhnya disebut sistem
kompilasi.
Misalkan kita menulis program C dalam dua file Optimasi tingkat‐2 merupakan kompromi yang baik
p1.c dan p2.c. Kemudian kita mengkompilasi kode antara kinerja optimasi dan kemudahan debugging.
program tersebut dengan mengetikkan command Flag –o memerintahkan compiler untuk memberi
line : nama file eksekusi yang dihasilkan dengan nama
prog. Perintah gcc tersebut menerjemahkan kode
$ gcc –O2 –o prog p1.c p2.c
program menjadi file eksekusi dengan melalui empat
Perintah gcc merupakan compiler default pada langkah. Pertama C pre‐processor akan memproses
Linux yang menggunakan GNU C Compiler. Secara semua preprocessor directive, misalnya #define,
sederhana kita juga dapat menggunakan perintah atau memasukkan isi file‐ file yang tertulis #include
cc. Flag –O2 memerintahkan compiler untuk directive ke kode program. Kedua, compiler
melakukan optimasi tingkat‐2. Secara umum, jika menghasilkan kode assembly untuk setiap file,
tingkat optimasi meningkat maka program akan menjadi p1.s dan p2.s. Selanjutnya, assembler
berjalan lebih cepat, tetapi hal ini beresiko mengkonversi kode assembly menjadi file kode objek
meningkatkan waktu kompilasi dan meningkatkan biner p1.o dan p2.o. Terakhir, linker menggabungkan
kesulitan ketika melakukan debugging kode kedua file kode objek dengan kode‐kode yang
program. mengimplementasikan fungsi‐fungsi library Unix
standar (mis. printf) dan menghasilkan file eksekusi.
Untuk hanya melakukan preprocessing, kita dapat Untuk memeriksa isi dari file kode objek, terdapat suatu
menggunakan opsi “‐E” pada command line : $ gcc – program yang bernama disassembler. Program tersebut
E p1.c dapat melakukan konversi file kode objek menjadi
format assembly. Pada sistem Unix/Linux, program
Untuk melihat kode assembly yang dihasilkan oleh
OBJDUMP (singkatan dari “OBJect DUMP”) dapat
compiler C, kita dapat menggunakan opsi “‐S” pada
dipanggil menggunakan flag “‐d” : $ objdump –d p1.o
command line : $ gcc –O2 –S p1.c
Untuk menghasilkan kode yang dapat dieksekusi, kita
Perintah ini akan menyebabkan compiler hanya harus menjalankan linker pada seluruh file kode objek.
menghasilkan file assembly p1.s dan tidak Program eksekusi akan dihasilkan dengan
melakukan langkah berikutnya. Kode assembly yang menggabungkan seluruh file kode objek pada command
dihasilkan sesuai dengan format GAS (“Gnu line : $ gcc –O2 –o prog code.o main.c
Assembler”). File program eksekusi prog yang dihasilkan berisi tidak
Jika pada command line digunakan opsi “‐c”, maka hanya kode yang kita masukkan, tetapi juga informasi
GCC akan melakukan ‘compile’ dan ‘assemble’ kode yang digunakan untuk memulai dan mengakhiri
program : $ gcc –O2 –c p1.c program. Kita juga dapat melakukan dissasamble file
Perintah ini akan menghasilkan file kode object p1.o, prog : $ objdump –d prog
dalam bentuk format biner dan tidak dapat dilihat Disassembler akan mengekstrak berbagai urutan kode
secara langsung. yang terdapat pada file eksekusi prog.
REPRESENTASI DAN MANIPULASI LEVEL
BIT, POINTER DAN ARRAY
Dasar Teori
Bahasa pemrograman C mendukung operasi Boolean level bit.
Simbol yang biasa digunakan untuk melakukan operasi Boolean pada
C adalah : | untuk OR, & untuk AND, ~ untuk NOT, dan ^ untuk
EXCLUSIVE‐OR. Operasi‐operasi ini dapat dilakukan pada berbagai tipe
data, seperti char, int, short, long atau unsigned.
Pada operasi logika, C juga mendukung dengan simbol : || untuk
operasi logika OR, && untuk operasi logika AND, dan ! untuk operasi
logika NOT. Operasi ini mudah tertukar dengan operasi Boolean level
bit, tetapi sebenarnya kedua operasi ini sangat berbeda. Pada operasi
logika, setiap argumen yang bukan nol merepresentasikan TRUE,
sementara argumen nol (0) merepresentasikan FALSE.
Fungsi logika mengembalikan nilai 1 dan 0, yang
mengindikasikan TRUE dan FALSE.
Selain operasi Boolean dan operasi logika, terdapat juga
operasi shift. C dapat melakukan operasi shift pada level bit
ke kiri dan ke kanan. Pada umumnya, seluruh mesin dapat
mendukung dua bentuk operasi right shift : logical dan
arithmetic. Logical right shift mengisi sisi paling kiri dengan
bit 0, sementara arithmetic right shift mengisi sisi paling kiri
dengan bit tanda yang direpresentasikan pada MSB.
Dasar Teori
Pada percobaan ini anda diminta untuk membuat 10 buah fungsi yang berhubungan dengan
representasi dan manipulasi informasi pada level bit. Setiap fungsi harus dilengkapi dengan fungsi main
dan dikompilasi hingga diperoleh file eksekusi‐nya. Penilaian dilakukan berdasarkan kebenaran dari
program serta efisiensi penggunaan kode.
Persiapan lingkungan kerja : Pindah ke direktori kerja anda (nama direktori sama dengan NIM anda).
Simpan seluruh program anda pada direktori tersebut.
• Fungsi 1 : bitXor(x,y) • Fungsi 2 : oddBits(void)
Buat fungsi yang memiliki perilaku Fungsi evenBits memberikan nilai
serupa dengan operasi ^. Operator return satu word, dimana seluruh bit
yang boleh digunakan hanya & dan ~. ganjil diset menjadi 1. Setiap bit pada
Contoh : bitXor(4,5) = 1 satu word diberi nomor dari 0 (LSB)
Prototype fungsi : int bitXor(intx, int y) hingga 31 (MSB).
Prototype fungsi : int oddBits(void)
• Fungsi 3 : getByte(x,n) • Fungsi 5 : reverseBytes(x)
Fungsi getByte mengekstrak byte n dari word data Fungsi reverseBytes membalikkan urutan byte
x. Urutan byte dalam word diberi nomor dari 0 dari input word dengan menukar byte 0 dengan
(LSB) hingga 3 (MSB). byte 3, byte 1 dengan byte 2. Urutan byte pada
word berurutan dari 0 (LSB) hingga 3 (MSB).
Contoh : getByte(0x12345678,1) = 0x56 Prototype Contoh : reverseBytes(0x01020304) = 0x04030201
fungsi : int getByte(int x, int n) Prototype fungsi : int reverseBytes(int x)
• Fungsi 4 : bitMask(highbit,lowbit) • Fungsi 6 : tmax(void)
Fungsi bitMask menghasilkan suatu mask dimana Fungsi tmax mengembalikan nilai two’s
seluruh bit antara highbit dan lowbit diset complement integer terbesar. Prototype fungsi
menjadi 1, dan bit sisanya diset menjadi 0. : int tmax(void)
Asumsi 0 <= lowbit <= 31 dan 0 <= highbit <= 31.
Jika lowbit > highbit, mask seluruhnya 0.
Contoh : bitMask(5,3) = 0x38
Prototype fungsi : int bitMask(int highbit, int
lowbit)
• Fungsi 7 : minBytes(x) • Fungsi 8 : shiftRegister(x)
Fungsi minBytes menghitung nilai dari byte Fungsi untuk memasukkan data berdasarkan
data pertama dikurangi byte data kedua. fungsi shift register pada sistem digital.
Sistem bilangan negaif yang digunakan Asunsi jumlah bit adalah 32 bit, dan setiap
adalah two’s complement. Tidak boleh nilai yang dimasukkan adalah 5 bit. Nilai
menggunakan operator pengurangan (‐), awal register adalah 0x00000000.
hanya boleh menggunakan penambahan (+) Contoh :
dan invers (~). shiftRegister(0x04)= 0x00000004 (dlm biner
Contoh : minBytes(0x15,0x07) = 0x0E 0x...0000000100) shiftRegister(0x13)=
Prototype fungsi : int minBytes(int x, int y) 0x00000093 (dlm biner 0x...0010010011) ket
: input sebelumnya berpengaruh pada nilai
sekarang.
Prototype fungsi : int shiftRegister (int x)
TENTANG ARRAY
Array adalah kumpulan lokasi penyimpanan data, setiap data
menyimpan tipe data yang sama. Setiap lokasi penyimpanan disebut elemen array
Anda tahu bahwa semua bahasa pemrograman tingkat tinggi menggunakan
variabel. Sedangkan pada bahasa pemrograman tingkat rendah variabel
didefinisikan dengan cara yang lebih rumit. Di sinilah salah satu kelebihan C
ditunjukkan, dimana ia dapat menjembatani antara bahasa kelas tinggi (unggul
dengan kemudahan karena konsepnya manusiawi) dengan bahasa tingkat rendah
(powerfull, karena akses maksimal terhadap hardware). Dalam C, programmer
memiliki akses terhadap memory secara langsung dengan menggunakan pointer.
Untuk memahami konsep pointer, anda perlu mempelajari konsep pengalamatan
memory. Definisi pointer adalah variabel yang menyimpan alamat memory.
LAMPU LED DAN SEVEN SEGMEN
LAMPU LED
Dioda pemancar cahaya (LED)
adalah sumber cahaya semikonduktor dua arah.
Ini adalah dioda sambungan p‐n yang
memancarkan cahaya ketika diaktifkan. Ketika
arus yang sesuai diterapkan pada lead, elektron
dapat bergabung kembali dengan lubang
elektron di dalam perangkat, melepaskan
energi dalam bentuk foton. Efek ini disebut
electroluminescence, dan warna cahaya (sesuai
dengan energi foton) ditentukan oleh celah pita
energi semikonduktor. LED biasanya kecil
(kurang dari 1 mm2) dan komponen optik
terintegrasi dapat digunakan untuk membentuk
pola radiasi.
LED memiliki banyak kelebihan dibanding
sumber cahaya pijar, termasuk konsumsi energi
yang lebih rendah, masa pakai yang lebih lama,
ketahanan fisik yang lebih baik, ukuran yang
lebih kecil, dan peralihan yang lebih cepat.
Dioda pemancar cahaya digunakan dalam
aplikasi yang beragam seperti pencahayaan
penerbangan, lampu depan otomotif, iklan,
pencahayaan umum, sinyal lalu lintas, lampu
kilat kamera, wallpaper yang menyala, dan
perangkat medis. LED juga secara signifikan
lebih hemat energi dan, bisa dibilang, memiliki
lebih sedikit masalah lingkungan terkait dengan
pembuangan mereka.
Beberapa istilah yang berkaitan dengan LED
1. Polaritas 2. Moar Current dan Moar Light
Dalam elektronik, polaritas menunjukkan Kecerahan LED secara langsung tergantung
apakah komponen rangkaian simetris atau pada seberapa banyak arus yang ditariknya.
tidak. LED, dioda, hanya akan memungkinkan Itu berarti dua hal. Yang pertama adalah
arus mengalir dalam satu arah. Dan ketika tidak bahwa LED super terang menguras baterai
ada aliran arus, tidak ada cahaya. Sisi positif lebih cepat, karena kecerahan tambahan
dari LED disebut "anode" dan ditandai dengan berasal dari kekuatan ekstra yang digunakan.
memiliki "lead," atau kaki yang lebih panjang. Yang kedua adalah Anda dapat mengontrol
Sisi negatif lain dari LED disebut “katoda.” Arus
kecerahan LED dengan mengendalikan jumlah
mengalir dari anoda ke katoda dan tidak pernah
arus yang melewatinya. Namun, pengaturan
arah sebaliknya. LED yang terbalik dapat
suasana bukan satu‐satunya alasan untuk
menjaga seluruh rangkaian agar tidak
beroperasi dengan benar dengan memblokir
mengurangi arus Anda.
aliran arus. Jadi jangan panik jika
menambahkan LED merusak sirkuit Anda.
3. Power LED
Jika Anda menghubungkan LED secara langsung ke sumber saat ini, ia akan
mencoba membuang daya sebanyak yang diizinkan untuk dikonsumsi,
dantu akan menghancurkan LED itu sendiri. Itulah mengapa penting untuk
membatasi jumlah arus yang mengalir melintasi LED. Untuk hal ini, dapat
menggunakan resistor. Resistor membatasi aliran elektron di sirkuit dan
melindungi LED dari mencoba untuk menarik terlalu banyak arus. Jangan
khawatir, hanya dibutuhkan sedikit matematika dasar untuk menentukan
nilai resistor terbaik untuk digunakan.
RESISTOR
Resistor merupakan komponen elektronik yang memiliki dua pin
dan didesain untuk mengatur tegangan listrik dan arus listrik,
dengan resistansi tertentu (tahanan) dapat memproduksi
tegangan listrik di antara kedua pin, nilai tegangan terhadap
resistansi berbanding lurus dengan arus yang mengalir. Pilihan
teknologi material adalah spesifik untuk tujuan resistor tersebut.
Seringkali itu adalah trade‐off antara biaya, presisi dan
persyaratan lainnya. Sebagai contoh, komposisi karbon adalah
teknik yang sangat tua dengan presisi rendah, tetapi masih
digunakan untuk aplikasi spesifik di mana pulsa energi tinggi
terjadi. Resistor komposisi karbon memiliki tubuh campuran
partikel karbon halus dan keramik non‐konduktif.
Teknik film karbon memiliki toleransi yang lebih baik. Ini
terbuat dari batang non‐ konduktif dengan lapisan film
karbon tipis di sekitarnya. Lapisan ini diperlakukan
dengan potongan spiral untuk meningkatkan dan
mengontrol nilai resistansi. Logam dan film oksida
logam banyak digunakan saat ini, dan memiliki sifat
yang lebih baik untuk stabilitas dan toleransi. Lebih jauh
lagi, mereka kurang dipengaruhi oleh variasi suhu.
Mereka hanya sebagai resistor film karbon yang
dibangun dengan film resistif di sekitar tubuh silindris.
Film oksida logam umumnya lebih tahan lama. Resistor
Wirewound mungkin adalah tipe yang paling tua dan
dapat digunakan baik untuk presisi tinggi maupun
aplikasi daya tinggi. Mereka dibangun dengan melilitkan
kawat paduan logam khusus, seperti nikel krom, di
sekitar inti non‐konduktif. Mereka tahan lama, akurat
dan dapat memiliki nilai resistansi yang sangat rendah.
Kerugiannya adalah mereka menderita reaktan parasit pada frekuensi tinggi. Untuk persyaratan
tertinggi pada presisi dan stabilitas, resistor foil logam digunakan. Mereka dibangun dengan
menyemen film cold rolled alloy khusus ke substrat keramik.

Resistor aksial biasanya menggunakan pola pita warna untuk menunjukkan resistansi. Resistor
pasang‐permukaan ditandas secara numerik jika cukup besar untuk dapat ditandai, biasanya
resistor ukuran kecil yang sekarang digunakan terlalu kecil untuk dapat ditandai. Kemasan
biasanya cokelat muda, cokelat, biru, atau hijau, walaupun begitu warna lain juga mungkin,
seperti merah tua atau abu‐abu. Identifikasi empat pita adalah skema kode warna yang paling
sering digunakan. Ini terdiri dari empat pita warna yang dicetak mengelilingi badan resistor. Dua
pita pertama merupakan informasi dua digit harga resistansi, pita ketiga merupakan faktor
pengali (jumlah nol yang ditambahkan setelah dua digit resistansi) dan pita keempat
merupakan toleransi harga resistansi. Kadang‐kadang terdapat pita kelima yang menunjukkan
koefisien suhu, tetapi ini harus dibedakan dengan sistem lima warna sejati yang menggunakan
tiga digit resistansi.
SEVEN SEGMEN
Pada umumnya seven segment terdiri
7 buah led yang disusun membentuk
angka 8, dimana setiap segmentnya
terdiri dari LED yang salah satu kaki
terminal lednya di jadikan satu atau
yang disebut dengan common. Kaki
yang dijadikan satu / common sendiri
dibagi menjadi 2 macam yaitu kaki
common anoda dan kaki common
katoda. Skema dari 7 batang led tadi
biasanya ditandai dengan huruf a - g,
sebagai berikut :
Common Anoda Implementasi runing LED pada CodeVision AVR
Common anoda merupakan bagian kaki dari anoda dengan Proteus 8 Professional
(+) yang dijadikan satu dan dihubungkan dengan Proteus Design Suite adalah perangkat alat
arus positif tegangan. Sedangkan untuk perangkat lunak berpemilik yang digunakan
mengaktifkan kaki yang lainnya harus diberi terutama untuk otomatisasi desain elektronik.
tegangan negatif. atau led akan menyala jika dalam Perangkat lunak ini digunakan terutama oleh
kondisi aktif low (diberi logika 0). misalkan ingin insinyur dan teknisi desain elektronik untuk
menampilkan angka 1 pada seven segment, maka membuat skema dan cetakan elektronik untuk
yang harus dilakukan adalah kaki common diberi pembuatan papan sirkuit cetak.
tegangan +, sedangkan kaki b dan c diberi tegangan - Proteus Design Suite adalah aplikasi Windows untuk
. menangkap skematis, simulasi, dan desain tata letak
Common Katoda PCB (Printed Circuit Board), dan tersedia dalam
Common katoda ini kebalikan dari common anoda, banyak konfigurasi, tergantung pada ukuran desain
jadi kaki common yang disatukan adalah kaki katoda yang diproduksi dan persyaratan untuk simulasi
(-), sehingga untuk mengaktifkan kaki yang lain diberi mikrokontroler. Semua produk Desain PCB termasuk
tegangan (+) atau diberi logika high (1). autorouter dan kemampuan simulasi SPICE basic
mixed mode.
Simulasi mikrokontroller di Proteus bekerja dengan menerapkan file hex atau file
debug ke bagian mikrokontroler pada skema, kemudian disimulasikan bersama
dengan elektronik analog dan digital yang terhubung dengannya. Kemampuan
ini memungkinkan penggunaannya dalam spektrum luas proyek prototyping di
berbagai bidang seperti kontrol motor, kontrol suhu dan desain antarmuka
pengguna. Dukungan tersedia untuk simulasi bersama:
1. Teknologi Microchip PIC10, PIC12, PIC16, PIC18, PIC24, dsPIC33
Mikrokontroler.
2. Atmel AVR (dan Arduino), 8051 dan ARM Cortex-M3 Microcontrollers
3. Mikrokontroler NXP 8051, ARM7, ARM Cortex-M0 dan ARM Cortex-M3.
4. Texas Instruments MSP430, PICCOLO DSP dan ARM Cortex-M3
Microcontrollers.
5. Parallax Basic Stamp, Freescale HC11, 8086 Mikrokontroler.
PUSH BUTTON DAN LCD 16 x 2
Push Button
Push Button atau tombol
sederhana adalah mekanisme sakelar
sederhana untuk mengontrol beberapa aspek
mesin atau proses. Permukaan biasanya datar
atau berbentuk untuk mengakomodasi jari
atau tangan manusia, sehingga mudah
ditekan atau didorong. Sakelar tombol tekan
adalah mekanisme kecil yang tersegel yang
melengkapi sirkuit listrik saat Anda
menekannya. Ketika menyala, sebuah pegas
logam kecil di dalam membuat kontak dengan
dua kabel, memungkinkan aliran listrik. Saat
mati, pegas memendek, kontak terganggu,
dan arus tidak mengalir. Tubuh sakelar
terbuat dari plastik non‐konduktif.
• Kontak Sesaat
Saklar sementara hanya berfungsi selama Anda menekannya, seperti tombol pada telepon,
kalkulator atau bel pintu. Mereka dapat dibagi lagi menjadi tipe normal‐on dan normal‐off.
• Biasanya-Off
Dengan sakelar yang biasanya mati, tidak ada koneksi sampai Anda menekan tombol. Sebagian
besar tombol push switch digunakan dengan cara ini. Contohnya termasuk tombol bel, tombol
ponsel dan pembuka pintu garasi.
• Biasanya-On
Di sini saklar berfungsi normal, tetapi mengganggu sirkuit ketika Anda menekannya. Ini lebih
khusus, dan dapat digunakan bersama dengan trik pengkabelan. Misalnya, menghubungkan sakelar
yang biasanya aktif secara paralel dengan bola lampu akan menyalakan lampu ketika tombol
ditekan; jika tidak, arus akan mengalir melalui saklar, membiarkan bola lampu mati.
• Kontak Non-Sesaat
Non‐sesaat switch mengambil satu push untuk menyalakan, yang lain untuk mematikan. TV dan
stereo menggunakan sakelar non‐sementara untuk tombol daya mereka.
LCD 16 x 2
Layar LCD (Liquid Crystal Display) adalah modul display elektronik dan
menemukan berbagai aplikasi. Layar LCD 16x2 adalah modul yang
sangat dasar dan sangat umum digunakan di berbagai perangkat dan
sirkuit. Modul‐modul ini lebih disukai daripada tujuh segmen dan
multi‐segmen LED lainnya. Alasannya: LCD ekonomis; mudah diprogram;
tidak memiliki batasan menampilkan karakter khusus & bahkan khusus
(tidak seperti dalam tujuh segmen), animasi dan sebagainya.
LCD 16x2 berarti dapat menampilkan 16 karakter per baris dan ada 2
garis seperti itu. Dalam LCD ini setiap karakter ditampilkan dalam
matriks 5x7 piksel. LCD ini memiliki dua register, yaitu, Command dan
Data.
Register dapat menyimpan instruksi perintah yang
diberikan ke LCD. Perintah adalah instruksi yang
diberikan kepada LCD untuk melakukan tugas yang
telah ditetapkan seperti menginisialisasi,
membersihkan layarnya, mengatur posisi kursor,
mengontrol tampilan, dan lain‐lain. Register data
menyimpan data yang akan ditampilkan pada LCD. Data
adalah nilai ASCII karakter yang akan ditampilkan pada
LCD. Di bagian belakang LCD, sebuah PCB terpasang
yang berisi sirkuit yang diperlukan untuk memproses
sinyal. Komponen utama dari sirkuit adalah kontroler
dan memori dalam bentuk COB IC. Pada karakter lcd
karakter dihasilkan dalam matriks 5x8 atau 5x7. Dimana Karakter LCD memiliki kontroler yang dibangun pada
5 mewakili jumlah kolom dan 7/8 mewakili jumlah mereka bernama HD44780. Kami benar‐benar
baris. Ukuran maksimum matriks adalah 5x8. Anda berbicara dengan pengontrol ini untuk menampilkan
tidak dapat menampilkan karakter lebih besar dari karakter di layar LCD. HD44780 harus ditangani dan
matriks dimensi 5x8. Biasanya kita menampilkan diinisialisasi dengan benar sebelum mengirim data
karakter dalam matriks 5x7 dan meninggalkan baris ke sana. HD44780 memiliki beberapa register yang
ke‐8 untuk kursor. Jika kita menggunakan baris ke‐8 dari diinisialisasi dan dimanipulasi untuk menampilkan
matriks untuk tampilan karakter, maka mereka tidak karakter pada lcd. Register ini dipilih oleh pin
akan ada ruang untuk kursor. karakter LCD.

Anda mungkin juga menyukai