Anda di halaman 1dari 33

BAB VII PERCOBAAN 6 Struktur Bahasa Assembler,Compiler dan Programmer

7.1 Tujuan Percobaan 1. Memahami penggunaan compiler ASM51.exe 2. Memahami penggunaan simulator EdSim51.jar 3. Mengetahui struktur dan cara penulisan dalam bahasa Assembler. 4. Memahami penggunaan Mnemonic bahasa Assembler dan Mengkonversinya menjadi bahasa mesin.

7.2Analisa dan Pembahasan 7.2.1 Percobaan Project Baru Assembler 7.2.1.1 Penjelasan Source Code Jalankan aplikasi text editor seperti NOTEPAD.exe yang tersedia, kemudian tuliskan listing program sebagai berikut :
$DATE(Maret 2011) ;menandakan komen yang berisi tanggal praktikum $NOPAGING ;menandakan komen yang menerangkan tanpa operasi $MOD51 ;menandakan komen yang menandakan program tersebut PORT_led EQU P0;definisi PORT0 ;definisi PORT0 Org 00H;alamat awal pada 0000H INIT_uC: MOV PORT_led,#0AH ;memberikan nilai 10 pada bilangan hexa 0A MOV P1,#0 ;memberikan nilai 0 hexa pada di P1 MOV P2,#00001111B ;memberikan nilai 00001111Bpada biner atau 0F pada hexa biner MOV P3,#00 ; memberikan nilai 0 pada P3 MAIN: ;label untuk menandai batasan operasi NOP ;isi program utama, operasi MAIN , NOP == no operation, berfungsi untuk memberi delay pada operasi NOP ;isi program utama, operasi MAIN , NOP == no operation, berfungsi untuk memberi delay pada operasi NOP ;isi program utama, operasi MAIN , NOP == no operation, berfungsi untuk memberi delay pada operasi SJPM MAIN ;lompat ke MAIN END

7.2.1.2 Hasil Percobaan

Gambar 7. 1 SS New Notepad

Gambar di atas merupakan gambar bagaimana cara membuat notepad baru. Cara yang di lakukan adalah dengan mengklik kanan mouse pada layar background di sembarang area kemudian pilih new dan klik Text Document, maka akan tertampil hasil berikut ini.

Gambar 7. 2 Tampilan Notepad

Gambar diatas merupakan gambar tampilan Notepad baru. Untuk bisa memasukkan program yang di kehendaki, hanya klik pada bagian layar body of text tersebut. Bila ingin copy dan paste program tinggal copy dari pdf ataupun word dan klik pada layar, klik kanan dan pilih/klik paste. Maka akan tertampil seperti berikut ini.

Gambar 7. 3 Memasukkan Program ke Notepad

Gambar diatas merupakan gambar hasil dari copy paste yang di kehendaki. Jika ingin menghendaki untuk menyimpan maka akan di tunjukkan pada gambar di bawah ini.

Gambar 7. 4 Cara Save 1

Gambar di atas merupakan cara menyimpan file tadi. Yaitu dengan klik file dan klik save as. Maka akan di tampilkan hasil seperti berikut.

Gambar 7. 5 Cara save 2

Gambar diatas merupakan langkah untuk menyimpan NotePad dalam bentuk *.asm

Gambar 7. 6 Listing program stuktur dasar

Gambar di atas merupakan hasil dari penyimpanan NotePad dalam bentuk *.asm

Gambar 7. 7 Tampilan ASM 51

Diatas merupakan screenshot program ASM 51, yang digunakan untuk mengcompile program berformat *.asm . Ouput yang dihasilkan ada 2 tipe jenis

file. Ouputnya yaitu file berformat *.LST dan *.HEX . Program *.LST digunakan untuk mengetahui apakah program yang setelah di compile tersebut terdapat error atau tidak. Sedangkan program berformat *.HEX merupakan program yang sudah terconvert ke dalam bentuk HEXA. Setelah ketikkan nama maka tekan enter, kemudian ASM51 akan auto close dan di direktori akan otomatis tertampil 2 hasil yang telah di sebutkan. Berikut jika file *.LST di buka dengan notepad. Berikut merupakan screenshot hasil yang telah keluar dari compiler ASM51.exe

Gambar 7. 8 Hasil Output setelah Di compile

Dapat dilihat secara seksama jika dalam file tersebut masih terdapat error yang di tunjukkan seperti pada bagian paling bawah dimana tertulis : Line #1, ERROR #29: Expecting an EOL or COMMENT Line #15, ERROR #23: Illegal or missing directive Dari error summary tersebut bisa langsung di ketahui dimanakah letak ke errorannya. Pertama dari line pertama terdapat $DATE(Maret 2011) seharusnya di ganti dengan $DATE (Juni 2012), jadi tanggal saat program akan di compile harus sesuai dengan settingan tanggal yang ada pada computer compiler.

Kemudian Line #15 terdapat perintah SJPM MAIN merupakan perintah yang salah. Karena dalam library ASM 51 tidak terdapat perintah SJPM, seharusnya SJPM di ganti dengan SJMP (short jump) merupakan perintah melompat ke subrutin yang di tuju. Namun SJMP hanya bisa di gunakan untuk berpindah ke subrutin yang tidak jauh dari perintah SJMP tersebut.

Gambar 7. 9 Hasil compiler struktur dasar

Dari screenshoot di atas tampak bahwa dalam listing program sudah tidak terdapat error, mengindikasikan bahwa program selanjutnya dapat disimulasikan dengan EdSim 51.

Gambar 7. 10 Tampilan struktur dasar pada EdSim 51

Screenshoot di atas merupakan tampilan struktur dasar pada EdSim 51 setelah di-Load. Selanjutnya akan diamati proses tiap step-nya.

Gambar 7. 11 Step 1 struktur dasar

Terdapat instruksi MOV PORT_led,#0AHsehingga terjadi perubahan memori di P0 (didefinisikan sebagai PORT_led) menjadi 0x0A. Digunakan untuk mengisi 0Ahexa ke dalam memori Port_led. Bisa terlihat seperti gambar di atas

Gambar 7. 12 Step 2 struktur dasar

Terdapat instruksiMOV P1,#0sehingga terjadi perubahan memori di P1 menjadi


0x00.

Gambar 7. 13 Step 3 struktur dasar

Terdapat instruksi MOV P2,#00001111B sehingga terjadi perubahan memori di P2 menjadi 0x0F dalam hexa. Digunakan untuk mengisi 0Fhexa ke dalam memori P2. Bisa terlihat seperti gambar di atas

Gambar 7. 14 Step 4 struktur dasar

Terdapat instruksi MOV P3,#00sehingga terjadi perubahan memori di P3 menjadi 0x00.Digunakan untuk mengisi 00hexa ke dalam memori P3. Bisa terlihat seperti gambar di atas.

Gambar 7. 15 Step 5 struktur dasar

Perintah no operation, tetapi instruksi tetap menggunakan proses sebanyak 1byte. Merupakan perintah delay pada High Level Assembly ini namun system tetap bekerja.

Gambar 7. 16 Step 6 struktur dasar

Perintah no operation, tetapi instruksi tetap menggunakan proses sebanyak 1byte.

Gambar 7. 17 Step 7 struktur dasar

Perintah no operation, tetapi instruksi tetap menggunakan proses sebanyak 1byte.

Gambar 7. 18 Step 8 struktur dasar

Perintah SJMP (short jump) ke MAIN. Short jump adalah lompat tanpa syarat jarak pendek. Disebut juga jump relative 8-bit. SJMP merupakan instruksi 2

byte. Byte pertama adalah opcode, sedang byte lainnya adalah alamat relative yang dituju. Jadi SJMP bisa di tuliskan dengan SJMP (alamat yang di tuju).

7.2.2 Percobaan Struktur dan Fungsi Jalankan aplikasi text editor seperti NOTEPAD.exe yang tersedia, kemudian tuliskan listing program sebagai berikut :
; Program struktur Assembler MCS51; komen yang berisitulisan program struktur assembler MCS51 ; Xtall 11,059200 MHz ;menerangkanXtall yang digunakan ;$MOD51 ;Assembler Control (MOD yang digunakan) PORT_led EQU P0 ;Assembler Directive Org 00H ;alamatawalpada 0000H INIT_uC: ;Label ;InisialisasiAwal CALL FUNGSI1 ; Label yang bernamaFungsi 1 WHILE_1: ;perintahpengulangan ; programutama ACALL FUNGSI2 ;pemanggilan/menujuFungsi 2 LCALL FUNGSI3 ;pemanggilan/menujufungsi 3 SJMP WHILE_1 ;Loop forever ; Lompatke label WHILE_1 FUNGSI1: ;program rutinfungsi 1 ; isi program fungsi 1 RET ;kembalike pemanggil FUNGSI2: ;program rutinfungsi 2 ; isi program fungsi 2

RET ;kembalike pemanggil FUNGSI3: ;program rutinfungsi 3 ; isi program fungsi 3 RET ;kembalike pemanggil END ;akhir program

Gambar 7. 19 Listing program struktur dasar dan fungsi

Pada NotePad kemudian File > Savedan simpan dengan nama dasar.asm dengan Save as type adalah All Files. Compiler ASM 51 akan digunakan untuk melihat apakah listing tersebut terdapat error atau tidak.

Gambar 7. 20 Hasil compiler struktur dasar dan fungsiy

Dari screenshoot di atas tampak bahwa dalam listing program sudah tidak terdapat error, selanjutnya dapat disimulasikan dengan EdSim 51.

Gambar 7. 21 Tampilan struktur dasar dan fungsi pada EdSim 51

Screenshoot di atas merupakan tampilan struktur dasar pada EdSim 51 setelah di-Load. Selanjutnya akan diamati proses tiap step-nya.

Gambar 7. 22 Step 1 struktur dasar dan fungsi

Terdapat instruksi pemanggilan FUNGSI1 padaCALL FUNGSI1 WHILE_1:. Instruksi CALL digunakan untuk memanggil sebuah subrutin. Subrutin adalah sekumpulan blok instruksi tertentu yang memiliki tugas tertentu. Kumpulan instruksi dalam subrutin tersebut dapat digunakan atau dijalankan dengan dengan cara memanggil (CALL).

Gambar 7. 23 Step 2 struktur dasar dan fungsi

Terdapat instruksi RET (Return From Subroutine). Instruksi RET digunakan untuk kembali dari suatu subrutin program ke alamat terakhir subrutin tersebut dipanggil. Jadi program akan kembali ke WHILE_1.

Gambar 7. 24 Step 3 struktur dasar dan fungsi

Terdapat instruksi pemanggilan FUNGSI2 pada ACALL FUNGSI2. Instruksi ACALL (Absolute Call) digunakan untuk memanggil subrutin program.

Gambar 7. 25 Step 4 struktur dasar dan fungsi

Terdapat instruksi RET (Return From Subroutine). Instruksi RET digunakan untuk kembali dari suatu subrutin program ke alamat terakhir subrutin tersebut dipanggil.

Gambar 7. 26 Step 5 struktur dasar dan fungsi

Terdapat instruksi pemanggilan FUNGSI3 pada LCALL FUNGSI3. Instruksi LCALL (Long Call) digunakan untuk memanggil subrutin program. LCALL merupakan instruksi 3-byte. Byte pertama adalah opcode sedang 2 byte lainnya adalah alamat yang dituju. Saat instruksi LCALL ini dijalankan, CPU tidak lagi mengeksekusi instruksi-instruksi di bawah LCALL, namun segera melompat ke alamat yang dituju. Namun berbeda dengan LJMP yang hanya melompat begitu saja. Sementara itu LCALL digunakan untuk menjalankan blok rutin di tempat lain sampai selesai, dan kemudian kembali menjalankan instruksi-instruksi di bawah instruksi LCALL tadi yang sempat ditinggalkannya.

Gambar 7. 27 Step 6 struktur dasar dan fungsi

Terdapat instruksi RET (Return From Subroutine). Instruksi RET digunakan untuk kembali dari suatu subrutin program ke alamat terakhir subrutin tersebut dipanggil.

Gambar 7. 28 Step 7 struktur dasar dan fungsi

Instruksi SJMP WHILE_1. Short jump adalah lompat tanpa syarat jarak pendek. Disebut juga jump relative 8-bit. SJMP merupakan instruksi 2 byte. Byte pertama adalah opcode, sedang byte lainnya adalah alamat relatif yang dituju. Instruksi SJMP WHILE_1 mengakibatkan melompat ke ACALL
FUNGSI2

dan akan melakukan proses yang sama seperti step 3 dan

seterusnya secara terus-menerus (loop forever).

7.2.3Percobaan Program Counter dan Data Transfer Jalankan aplikasi text editor seperti NOTEPAD.exe yang tersedia, kemudian tuliskan listing program sebagai berikut :
; Program struktur Assembler MCS51 ;komen yang berisi Program struktur Assembler MCS51 ; Xtall 11,059200 MHz ;komen yang berisiXtall 11,059200 MHz ;$MOD51 ;Assembler Control, MOD yang digunakan MOD51 Org 00H ;alamatawalpada 0000H WHILE_1: Label while_1 MOV R0,#0AH ; memberinilaipada register nolnya (R0) sebesar 0A H (10 desimal) MOV R1,#0EFH; memberinilaipada register nolnya (R1) sebesar 0EF H MOV 3FH,#01010101B memberinilaipada 3FH sebesar 01010101B MOV A,3FHmemberinilaipada A sebesar 3F H MOV A,R0memberinilaipada register nolnya (R1) sebesar 0EF H (10 desimal) MOV A,#30H memberinilaipada A sebesar 30 H MOV B,Amemberinilaipada B sebesarnilai A MOV 3FH,Amemberinilaipada 3FH sebesarnilai A MOV DPTR,#65535 memberinilaipada DPTR sebesar 65635 PUSH 3FH MOV 3FH,#00001111H memberinilaipada 3FH sebesar 00001111H MOV A,3FHmemberinilaipada A sebesar 3FH POP 3FH mengambilmemoridaristackkemudianmengisimemorikembalisepertis emulayaitu 3FH MOV A,3FHmemberinilaipada register nolnya (R1) sebesar 0EF H (10 desimal) XCH A,R1menukarisidari A dengan Register 1 (R1). SJMP WHILE_1 ;Loop forever; Lompatke label WHILE_1 END ;akhir program

Gambar 7. 29 Listing program counter dan data transfer

Pada NotePad kemudian File > Savedan

simpan dengan nama

counter.asmdengan Save as type adalah All Files. Compiler ASM 51 akan digunakan untuk melihat apakah listing tersebut terdapat error atau tidak.

Gambar 7. 30 Tampilan program counter dan data transfer

Screenshoot di atas merupakan tampilan struktur dasar pada EdSim 51 setelah di-Load. Selanjutnya akan diamati proses tiap step-nya.

Gambar 7. 31 Step 1 program counter dan data transfer

Terdapat instruksi MOV (Move Memory) MOV R0,#0AH. Instruksi ini untuk mengisi isi akumulator/register atau data dari nilai luar atau alamat lain. Nilai 0A diisikan ke R0 sehingga menjadi 0x0A.

Gambar 7. 32 Step 2 program counter dan data transfer

Terdapat instruksi MOV (Move Memory) MOV R1,#0EFH. Instruksi ini untuk mengisi isi akumulator/register atau data dari nilai luar atau alamat lain. Nilai EF diisikan ke R1 sehingga menjadi 0xEF.

Gambar 7. 33 Step 3 program counter dan data transfer

Terdapat instruksi MOV (Move Memory) MOV 3FH,#01010101B. Instruksi ini untuk mengisi isi akumulator/register atau data dari nilai luar atau alamat lain. Nilai biner 01010101 atau 55 dalam hexa diisikan ke data memory 3F sehingga memory 3F bernilai 55.

Gambar 7. 34 Step 4 program counter dan data transfer

Terdapat instruksi MOV (Move Memory) MOV A,3FH. Instruksi ini untuk mengisi isi data memory dari alamat 3F. Nilai biner 01010101 atau 55 dalam hexa pada data memory 3F diisikan ke akumulator.

Gambar 7. 35 Step 5 program counter dan data transfer

Terdapat instruksi MOV (Move Memory) MOV A,R0. Instruksi ini untuk mengisi isi register ke akumulator. Nilai R0 0A atau 00001010 dalam biner diisikan ke akumulator sehingga ACC bernilai 0x0A.

Gambar 7. 36 Step 6 program counter dan data transfer

Terdapat instruksi MOV (Move Memory) MOV A,#30H. Nilai 30 atau 00110000 dalam biner diisikan ke akumulator sehingga ACC bernilai 0x30.

Gambar 7. 37 Step 7 program counter dan data transfer

Terdapat instruksi MOV (Move Memory) MOV B,A. Nilai A 0x30 diisikan ke B sehingga B bernilai 0x30.

Gambar 7. 38 Step 8 program counter dan data transfer

Terdapat instruksi MOV (Move Memory) MOV 3FH,A. Nilai A 0x30 diisikan ke data memory alamat 3FH sehingga data memory 3FH bernilai 30.

Gambar 7. 39 Step 9 program counter dan data transfer

Terdapat instruksi MOV DPTR (Move Data Pointer) MOV DPTR,#65535. Nilai 65535 desimal atau FF dalam hexa diisikan ke data pointer sehingga data pointer bernilai FF.

Gambar 7. 40 Step 10 program counter dan data transfer

Terdapat instruksi PUSH

3FH.

Instruksi PUSH digunakan untuk

memasukkan/menyimpan sebuah data ke dalam stack pointer. Data asal dapat berupa isi dari sebuah register, isi dari sebuah memory, atau data langsung. Dalam hal ini isi dari alamat 3FH di push ke stack. Bila suatu data dimasukkan ke dalam stack, byte rendah dari SP itu akan menempati lokasi yang dialamati oleh SP-1 dan byte tingginya akan menempati SP-2 dan seterusnya. Menggunakan stack dalam program cukup mudah. Isi register didorong pada stack dengan perintah seperti berikut: PUSH reg_satu. Perintah Push 3FH menggeser stack pointer yang tadinya ada di alamat 0x07 ke alamat 0x08 dan memasukkan nilai pada alamat 3FH yaitu 30.

Gambar 7. 41 Step 11 program counter dan data transfer

Terdapat instruksi MOV (Move Memory) MOV 3FH,#00001111H. Nilai 11 diisikan ke alamat data memory 3F.

Gambar 7. 42 Step 12 program counter dan data transfer

Terdapat instruksi MOV (Move Memory) MOV A,3FH. Instruksi ini untuk mengisi isi data memory dari alamat 3F. Nilai biner 00010001 atau 11 dalam hexa pada data memory 3F diisikan ke akumulator.

Gambar 7. 43 Step 13 program counter dan data transfer

Terdapat instruksi POP

3FH.

Instruksi POP adalah instruksi untuk

memanggil kembali sebuah data dari dalam stack untuk diletakkan dalam suatu register atau dalam lokasi memory tertentu. Dalam hal ini isi dari stack dipanggil kembali ke alamat 3FH.

Gambar 7. 44 Step 14 program counter dan data transfer

Terdapat instruksi MOV (Move Memory) MOV A,3FH. Instruksi ini untuk mengisi isi data memory dari alamat 3F ke akumulator. Nilai biner 00110000 atau 30 dalam hexa pada data memory 3F diisikan ke akumulator.

Gambar 7. 45 Step 15 program counter dan data transfer

Terdapat instruksi XCH

A,R1.

Isi dari Register R1 ditukar dengan isi dari

akumulator. Instruksi XCH berfungsi untuk menukarkan isi suatu register lain atau isi suatu register dengan isi suatu lokasi memory, dan instruksi ini tidak berlaku untuk pertukaran data antar lokasi memory. Isi dari Register R1 ditukar dengan isi dari akumulator.

Gambar 7. 46 Step 16 program counter dan data transfer

Instruksi SJMP

WHILE_1.

Instruksi SJMP

WHILE_1

mengakibatkan

melompat ke MOV R0,#0AH dan akan melakukan proses yang sama seperti step 1 dan seterusnya secara terus-menerus (loop forever).

7.3

Kesimpulan 1. ASM 51 merupakan program compiler assembler bahasa program tingkat tinggi yang di gunakan untuk memprogram chip MCS 51 atau Intel dengan kelas 8051. 2. Edsim merupakan simulator mikrokontroler MCS 51. 3. Instruksi MOV digunakan untuk mengisi isi akumulator/register atau data pada suatu alamat dari data luar atau alamat lain. 4. Instruksi ACALL (Absolute Call) digunakan untuk memanggil subrutin suatu program. ACALL merupakan instruksi 2-byte. 5. Instruksi LCALL (Long Call) digunakan untuk memanggil subrutin suatu program. LCALL merupakan instruksi 3-byte. 6. Instruksi SJMP (Short Jump) adalah lompat tanpa syarat jarak pendek. Digunakan untuk memerintahkan menjangkau ke alamat kode tertentu. Disebut juga jump relatif 8-bit. SJMP merupakan instruksi 2-byte. 7. Instruksi AJMP (Absolute Jump) adalah lompat tidak bersyarat jarak menegah. Digunakan untuk memerintahkan menjangkau ke alamat kode tertentu. Disebut juga jump 11-bit. AJMP merupakan instruksi 2-byte. 8. Instruksi LJMP (Long Jump) adalah lompat tanpa syarat jarak jauh. Digunakan untuk memerintahkan menjangkau ke alamat kode tertentu. LJMP merupakan instruksi 3-byte. 9. Instruksi NOP (No Operation) menyisipkan perintah untuk tidak mengerjakan apa-apa. NOP merupakan instruksi 1-byte. 10. Instruksi PUSH digunakan untuk memasukkan/menyimpan sebuah data ke dalam stack. PUSH merupakan instruksi 2-byte. 11. Instruksi POP adalah instruksi untuk memanggil kembali sebuah data dari dalam stack untuk diletakkan dalam suatu register atau dalam lokasi memory tertentu. POP merupakan instruksi 2-byte. 12. Instruksi RET merupakan perintah untuk kembali dari suatu subrutin program ke alamat terakhir subrutin tersebut dipanggail. RET merupakan instruksi 1-byte.

13. Instruksi XCH berfungsi untuk menukarkan isi suatu register lain atau isi suatu register dengan isi suatu lokasi memory. XCH merupakan instruksi 2-byte. 14. Jika dalam program terdapat $DATEmaka di harapkan agar sesuai dengan saat program akan di compile menggunakan ASM51.

Anda mungkin juga menyukai