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
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 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 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 di atas merupakan cara menyimpan file tadi. Yaitu dengan klik file dan klik save as. Maka akan di tampilkan hasil seperti berikut.
Gambar diatas merupakan langkah untuk menyimpan NotePad dalam bentuk *.asm
Gambar di atas merupakan hasil dari penyimpanan NotePad dalam bentuk *.asm
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
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.
Dari screenshoot di atas tampak bahwa dalam listing program sudah tidak terdapat error, mengindikasikan bahwa program selanjutnya dapat disimulasikan dengan EdSim 51.
Screenshoot di atas merupakan tampilan struktur dasar pada EdSim 51 setelah di-Load. Selanjutnya akan diamati proses tiap step-nya.
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
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
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.
Perintah no operation, tetapi instruksi tetap menggunakan proses sebanyak 1byte. Merupakan perintah delay pada High Level Assembly ini namun system tetap bekerja.
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
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.
Dari screenshoot di atas tampak bahwa dalam listing program sudah tidak terdapat error, selanjutnya dapat disimulasikan dengan EdSim 51.
Screenshoot di atas merupakan tampilan struktur dasar pada EdSim 51 setelah di-Load. Selanjutnya akan diamati proses tiap step-nya.
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).
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.
Terdapat instruksi pemanggilan FUNGSI2 pada ACALL FUNGSI2. Instruksi ACALL (Absolute Call) digunakan untuk memanggil subrutin program.
Terdapat instruksi RET (Return From Subroutine). Instruksi RET digunakan untuk kembali dari suatu subrutin program ke alamat terakhir subrutin tersebut dipanggil.
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.
Terdapat instruksi RET (Return From Subroutine). Instruksi RET digunakan untuk kembali dari suatu subrutin program ke alamat terakhir subrutin tersebut dipanggil.
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
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
counter.asmdengan Save as type adalah All Files. Compiler ASM 51 akan digunakan untuk melihat apakah listing tersebut terdapat error atau tidak.
Screenshoot di atas merupakan tampilan struktur dasar pada EdSim 51 setelah di-Load. Selanjutnya akan diamati proses tiap step-nya.
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.
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.
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.
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.
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.
Terdapat instruksi MOV (Move Memory) MOV A,#30H. Nilai 30 atau 00110000 dalam biner diisikan ke akumulator sehingga ACC bernilai 0x30.
Terdapat instruksi MOV (Move Memory) MOV B,A. Nilai A 0x30 diisikan ke B sehingga B bernilai 0x30.
Terdapat instruksi MOV (Move Memory) MOV 3FH,A. Nilai A 0x30 diisikan ke data memory alamat 3FH sehingga data memory 3FH bernilai 30.
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.
3FH.
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.
Terdapat instruksi MOV (Move Memory) MOV 3FH,#00001111H. Nilai 11 diisikan ke alamat data memory 3F.
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.
3FH.
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.
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.
A,R1.
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.
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.