Oleh: Catur A. Novriadi 0!"0#!0$ LABO%A&O%'() *'+',A ,O)P(&A+' *A,(L&A+ )A&-)A&',A .AN 'L)( P-N/-&A0(AN ALA) (N'1-%+'&A+ LA)P(N/ $002 '. P-N.A0(L(AN A. Latar Belakang Setiap baris program bahasa assembler umumnya terdiri atas kode operasi (op code) dan operan. Op code adalah perintah yang akan dilaksanakan, sedangkan operan adalah sasaran op code. Operan dapat terdiri dari dua bagian yaitu sumber (source) dan tujuan (destination) atau hanya terdapat satu bagian saja (biasanya hanya tujuan). Program assembly lengkap, sama seperti program bahasa tingkat tinggi lainnya (Pascal, C, C ++ dan lain lain), yaitu terdiri atas kumpulan kumpulan baris instruksi assembler. Sebenarnya program assembly lengkap, tidak hanya terdiri dari op code dan operan saja, tetapi juga terdapat apa yang dinamakan pseudo operation (pseudo ops). Pseudo ops adalah suatu perintah kepada assembler untuk memberitahukan apa yang harus dilakukan terhadap data, percabangan bersyarat, perintah macro dan listing. Pseudo ops memiliki bentuk serupa dengan mnemonic pada instruksi assembler, tetapi tidak menghasilkan kode bahasa mesin ketika decompile (diterjemahkan oleh compiler). B. &u3uan ujuan dari dilakukannya percobaan Pengantar Pemrograman !ahasa assembler ini adalah " #. $engetahui %ungsi program program sederhana dari bahasa assembler &. 'apat membuat program program sederhana dari bahasa assembler (. $engetahui hasil compiler dari program program yang telah di buat ''. &'N4A(AN P(+&A,A !ahasa )ssembler adalah bahasa komputer yang kedudukannya di antara bahasa mesin dan bahasa le*el tinggi misalnya bahasa C atau Pascal. Program yang ditulis dengan bahasa assembler terdiri dari label, kode mnemonic dan lain sebagainya, pada umumnya dinamakan sebagai program sumber (source code) yang belum bisa diterima oleh prosessor untuk dijalankan sebagai program, tapi harus diterjemahkan dulu menjadi bahasa mesin dalam bentuk kode biner. Program sumber dibuat dengan program editor biasa, misalnya note pad pada +indo+s atau side kick pada 'OS, selanjutnya program sumber diterjemahkan ke bahasa mesin dengan menggunakan program assembler. ,asil kerja program assembler adalh -program objek. dan juga -assembler listing.. Program objek berisikan kode kode bahasa mesin, kode kode bahasa mesin inilah yang diumpankan ke memori program prosessor. 'alam dunia mikrokontroller biasanya program objek ini diisikan ke /0 1P2O$, dan khusus untuk microkontroller buatan )$13, program ini diisikan ke dalam %lash P1P2O$ yang ada di dalam chip )45C6# atau )45C&76#. /ambar !. Bagan ,er3a Proses Assembler ()ndri 8ristanto, &77() Contoh baris program sederhana bahasa assembler adalah " $O0 )9, !9 8eterangan " $O0 " kode operasi, mengkopi )9 " operan, sebagai tujuan !9 " operan, sebagai sumber Contoh pseudo ops yang sering dijumpai adalah" #. )ssume, digunakan untuk menetapkan register register yang akan ber%ungsi sebagai register segment dalam program &. Comment, digunakan untuk menyisipkan suatu komentar di dalam program (. '! dan ':, digunakan untuk mende%inisikan suatu *ariabel atau untuk inisialisasi tempat penyimpanan ;. '/P, digunakan untuk membuat duplikasi suatu data 6. 1</, untuk menyatakan suatu nilai mutlak =. O2>, untuk meletakkan o%%set a+al data atau program ?. P2OC@1A'P, menyatakan identi%ikasi dari suatu blok perintah yang umumnya merupakan subrutin 4. S1>$1A@1A'S, untuk menyatakan a+al dan akhir suatu program segment 5. 3)!13, untuk menandai rujukan tempat melompat atau looping #7. 'sb. ()ri% Surtono, &77?) '''. 0A+'L .AN P-)BA0A+AN A. 0asil Program #. Program penambahan untuk melihat debugnya .$O'13 S$)33 .CO'1 O2> #77h Proses " $O0 ),, #6h $O0 )3, ; )'' ),, )3 $O0 )9, #&(;h $O0 !9, 7B&&#h )'' )9, !9 $O0 )9, #&(;h $O0 !9, 5)!Ch $O0 C9, 6=?4h $O0 '9, 7'1B7h )'' C9, '9 )'C )9, !9 CAC )3 CA &7h 1A' Proses 0asiln5a C"D)S$Edebug %ilet.com F2 )9G7777 !9G7777 C9G77&& '9G7777 SPGBBB1 !PG7777 SCG7777 'CG7777 'SG7!(7 1SG7!(7 SSG7!(7 CSG7!(7 CPG7#77 A0 /P 1C P3 AH A) PO AC 7!(7"7#77 !;#6 $O0 ),,#6 F/ 7!(7"7#77 !;#6 $O0 ),,#6 7!(7"7#7& !77; $O0 )3,7; 7!(7"7#7; 7&17 )'' ),,)3 7!(7"7#7= !4(;#& $O0 )9,#&(; 7!(7"7#75 !!&#B& $O0 !9,B&&# 7!(7"7#7C 7(C( )'' )9,!9 7!(7"7#71 !4(;#& $O0 )9,#&(; 7!(7"7### !!!C5) $O0 !9,5)!C 7!(7"7##; !5?46= $O0 C9,6=?4 7!(7"7##? !)B7'1 $O0 '9,'1B7 7!(7"7##) 7(C) )'' C9,'9 7!(7"7##C #(C( )'C )9,!9 7!(7"7##1 B1C7 CAC )3 F )9G#677 !9G7777 C9G77&& '9G7777 SPGBBB1 !PG7777 SCG7777 'CG7777 'SG7!(7 1SG7!(7 SSG7!(7 CSG7!(7 CPG7#7& A0 /P 1C P3 AH A) PO AC 7!(7"7#7& !77; $O0 )3,7; F )9G#67; !9G7777 C9G77&& '9G7777 SPGBBB1 !PG7777 SCG7777 'CG7777 'SG7!(7 1SG7!(7 SSG7!(7 CSG7!(7 CPG7#7; A0 /P 1C P3 AH A) PO AC 7!(7"7#7; 7&17 )'' ),,)3 F )9G#57; !9G7777 C9G77&& '9G7777 SPGBBB1 !PG7777 SCG7777 'CG7777 'SG7!(7 1SG7!(7 SSG7!(7 CSG7!(7 CPG7#7= A0 /P 1C P3 AH A) PO AC 7!(7"7#7= !4(;#& $O0 )9,#&(; F )9G#&(; !9G7777 C9G77&& '9G7777 SPGBBB1 !PG7777 SCG7777 'CG7777 'SG7!(7 1SG7!(7 SSG7!(7 CSG7!(7 CPG7#75 A0 /P 1C P3 AH A) PO AC 7!(7"7#75 !!&#B& $O0 !9,B&&# F )9G#&(; !9GB&&# C9G77&& '9G7777 SPGBBB1 !PG7777 SCG7777 'CG7777 'SG7!(7 1SG7!(7 SSG7!(7 CSG7!(7 CPG7#7C A0 /P 1C P3 AH A) PO AC 7!(7"7#7C 7(C( )'' )9,!9 F )9G7;66 !9GB&&# C9G77&& '9G7777 SPGBBB1 !PG7777 SCG7777 'CG7777 'SG7!(7 1SG7!(7 SSG7!(7 CSG7!(7 CPG7#71 A0 /P 1C P3 AH A) P1 CI 7!(7"7#71 !4(;#& $O0 )9,#&(; F )9G#&(; !9GB&&# C9G77&& '9G7777 SPGBBB1 !PG7777 SCG7777 'CG7777 'SG7!(7 1SG7!(7 SSG7!(7 CSG7!(7 CPG7### A0 /P 1C P3 AH A) P1 CI 7!(7"7### !!!C5) $O0 !9,5)!C F )9G#&(; !9G5)!C C9G77&& '9G7777 SPGBBB1 !PG7777 SCG7777 'CG7777 'SG7!(7 1SG7!(7 SSG7!(7 CSG7!(7 CPG7##; A0 /P 1C P3 AH A) P1 CI 7!(7"7##; !5?46= $O0 C9,6=?4 F )9G#&(; !9G5)!C C9G6=?4 '9G7777 SPGBBB1 !PG7777 SCG7777 'CG7777 'SG7!(7 1SG7!(7 SSG7!(7 CSG7!(7 CPG7##? A0 /P 1C P3 AH A) P1 CI 7!(7"7##? !)B7'1 $O0 '9,'1B7 F )9G#&(; !9G5)!C C9G6=?4 '9G'1B7 SPGBBB1 !PG7777 SCG7777 'CG7777 'SG7!(7 1SG7!(7 SSG7!(7 CSG7!(7 CPG7##) A0 /P 1C P3 AH A) P1 CI 7!(7"7##) 7(C) )'' C9,'9 F )9G#&(; !9G5)!C C9G(6=4 '9G'1B7 SPGBBB1 !PG7777 SCG7777 'CG7777 'SG7!(7 1SG7!(7 SSG7!(7 CSG7!(7 CPG7##C A0 /P 1C P3 AH A) PO CI 7!(7"7##C #(C( )'C )9,!9 F )9G)CB# !9G5)!C C9G(6=4 '9G'1B7 SPGBBB1 !PG7777 SCG7777 'CG7777 'SG7!(7 1SG7!(7 SSG7!(7 CSG7!(7 CPG7##1 A0 /P 1C A> AH )C PO AC 7!(7"7##1 B1C7 CAC )3 F )9G)CB& !9G5)!C C9G(6=4 '9G'1B7 SPGBBB1 !PG7777 SCG7777 'CG7777 'SG7!(7 1SG7!(7 SSG7!(7 CSG7!(7 CPG7#&7 A0 /P 1C A> AH A) PO AC 7!(7"7#&7 C'&7 CA &7 F< &. Program mencetak karakter dari H sampai ) JGGGGGGGGGGGGGGGGGGGGGGGGGGGGJ J P2O>2)$ " C!)7.)S$ J J B/A>SC " $1AC1)8 8)2)812 J J KHK..K)K '1A>)A J J CA &#h S120CS 7& J JGGGGGGGGGGGGGGGGGGGGGGGGGGGGJ .$O'13 S$)33 .CO'1 O2> #77h Proses " $O0 ),,7&h J Ailai ser*is $O0 '3,LHL J '3G6)h $O0 C9,&= J !anyaknya pengulangan yang akan dilakukan /lang " CA &#h J Cetak karakterMM '1C '3 J 8urang '3 dengan # 3OOP /lang J 3ompat ke /lang CA &7h 1A' Proses 0asiln5a C"D)S$Etasm cba7.asm urbo )ssembler 0ersion &.7 Copyright (c) #544, #557 !orland Cnternational )ssembling %ile" cba7.asm 1rror messages" Aone :arning messages" Aone Passes" # 2emaining memory" ;??k C"D)S$EtlinkNt cba7 urbo 3ink 0ersion (.7 Copyright (c) #54?, #557 !orland Cnternational C"D)S$Ecba7 HI9:0/S2<POA$38OC,>B1'C!) (. Program membuat kalimat 'OSS1> .$O'13 S$)33 .S)C8 #77h .')) ,ello$essage '! L,alo 'uniaML,#(,#7,LPL .CO'1 mo* aQ,Rdata mo* ds,aQ J set 'S agar menunjuk ke segmen ')) mo* ah,5 J %ungsi cetak string 'OS mo* dQ,OBBS1 ,ello$essage J alamat K,alo duniaMK int &#h J tampilkan K,alo duniaMK mo* ah,;Ch J %ungsi terminasi program 'OS int &#h J selesaiM 1A' 0asiln5a C"D)S$Etasm hello.asm urbo )ssembler 0ersion &.7 Copyright (c) #544, #557 !orland Cnternational )ssembling %ile" hello.asm 1rror messages" Aone :arning messages" Aone Passes" # 2emaining memory" ;??k C"D)S$Etlink hello.obj urbo 3ink 0ersion (.7 Copyright (c) #54?, #557 !orland Cnternational C"D)S$Ehello ,alo 'uniaM B. Pembahasan Program 'ari praktikum yang dilakukan yaitu pengantar pemrograman bahasa assembler 8ita membuat ( buah program a+al atau sederhana menggunakan bahasa assembler kemudian 8ita dapat amati hasil dari compilernya apakah berhasil atau gagal karena kesalahan dari program tersebut (kesalahan syntaQ) ataukah salah pada saat mengcompile program tersebut (kesalahan logika). Pada program pertama disini yang kita buat adalah program penjumlahan atau operasi penambahan yang dapat 8ita lihat hasilnya melalui debug. Penekanan -2. pada saat pertama kali digunakan untuk melihat nilai pada semua register. Pada baris pertama dapat 8ita lihat register yang dinamakan sebagai general purpose ()9, !9, C9 dan '9). 2egister SP yang digunakan pada operasi stack menunjukkan nilai BBB1 (akhir dari Segment), jadi operasi stack nantinya akan ditaruh pada posisi tersebut. Pada baris kedua dapat 8ita lihat keempat register segmen, yaitu 'S, 1S, SS, CS. 8eempat register segment menunjukkan nilai yang sama yaitu 7!(7. ,al ini dikarenakan program 8ita adalah program com dan hanya menggunakan # segment. Pada baris kedua dapat juga 8ita lihat register CP bernilai #77h. 2egister CP menunjukkan bah+a 8ita sekarang sedang berada pada o%%set ke #77h dari segment akti% (CS"CP atau 7!(7 " #77). Pada baris ketiga dapat 8ita lihat 7!(7 " 7#77, nilai ini menunjukkan pasangan dari CS"CP setelah itu dapat 8ita lihat nilai !;#6 yang menunjukkan isi dari alamat 7!(7 " 7#77 adalah !; sedangkan isi dari alamat 7!(7 " #77# adalah #6. nilai !;#6 ini sebenarnya merupakan suatu bahasa mesin untuk perintah $O0 ),, #6. Oadi bahasa mesin untuk perintah -$O0 ),, nilai. adalah !; disertai nilai tersebut. 'ari nilai !;#6 ini dapat diketahui bah+a perintah $O0 akan menggunakan & byte di memory. Setelah itu penekanan / bertujuan untuk melihat kode bahasa assembler pada program yang telah dituliskan, setelah itu tekanlah ST untuk mengeksekusi instruksi yang terdapat pada alamat yang ditunjukkan CS"CP ($O0 ),, #6). Setelah 8ita menekan ST maka akan ditampilkan hasil setelah instruksi -$O0 ),, #6. dieksekusi. Pada program kedua 8ita mencoba mencetak karakter dari suatu huru% yang dimulai dari huru% H berturut turut hingga huru% ) disini yang 8ita gunakan adalah -CA &#h S120CS 7&. dengan menggunakan C9,&= berarti ada &= karakter yang akan 8ita cetak atau ditampilkan disini yang kemudian 8ita gunakan 3oop /lang. Pada program ketiga ini 8ita coba untuk mencetak kalimat yang menggunakan perintah Stack. Stack artinya ialah StumpukanT dalam arti lain stack adalah bagian memory yang digunakan untuk menyimpan nilai dari suatu register untuk sementara. Operasi operasi pada assembler yang langsung menggunakan stack misalnya pada perintah P/S,, POP, P/SB dan POPB. 8arena menggunaka Stack dan 'osseg pada saat kita merunning program ini atau mengcompilenya 8ita gunakan -.O!O. dibelakangnya, ini dimaksudkan karena program yang 8ita buat bersi%at Objection.