p6 adam mikro

39
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

Upload: muhammad-abbie-hamzah

Post on 28-Oct-2015

64 views

Category:

Documents


3 download

TRANSCRIPT

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 tersebutPORT_led EQU P0;definisi PORT0 ;definisi PORT0Org 00H;alamat awal pada 0000HINIT_uC:MOV PORT_led,#0AH ;memberikan nilai 10 pada bilangan hexa 0AMOV P1,#0 ;memberikan nilai 0 hexa pada di P1MOV P2,#00001111B ;memberikan nilai 00001111Bpada biner atau 0F pada hexa binerMOV P3,#00 ; memberikan nilai 0 pada P3MAIN: ;label untuk menandai batasan operasiNOP ;isi program utama, operasi MAIN , NOP == no operation, berfungsi untuk memberi delay pada operasiNOP ;isi program utama, operasi MAIN , NOP == no operation, berfungsi untuk memberi delay pada operasiNOP ;isi program utama, operasi MAIN , NOP == no operation, berfungsi untuk memberi delay pada operasiSJPM MAIN ;lompat ke MAINEND

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 DirectiveOrg 00H ;alamatawalpada 0000HINIT_uC: ;Label;InisialisasiAwalCALL FUNGSI1 ; Label yang bernamaFungsi 1WHILE_1: ;perintahpengulangan; programutamaACALL FUNGSI2 ;pemanggilan/menujuFungsi 2LCALL FUNGSI3 ;pemanggilan/menujufungsi 3SJMP WHILE_1 ;Loop forever ; Lompatke label WHILE_1FUNGSI1: ;program rutinfungsi 1; isi program fungsi 1RET ;kembalike “pemanggil”FUNGSI2: ;program rutinfungsi 2; isi program fungsi 2

RET ;kembalike “pemanggil”FUNGSI3: ;program rutinfungsi 3; isi program fungsi 3RET ;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 MOD51Org 00H ;alamatawalpada 0000HWHILE_1: Label while_1MOV 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 HMOV B,Amemberinilaipada B sebesarnilai AMOV 3FH,Amemberinilaipada 3FH sebesarnilai AMOV DPTR,#65535 memberinilaipada DPTR sebesar 65635PUSH 3FH MOV 3FH,#00001111H memberinilaipada 3FH sebesar 00001111HMOV A,3FHmemberinilaipada A sebesar 3FHPOP 3FH mengambilmemoridaristackkemudianmengisimemorikembalisepertisemulayaitu 3FHMOV 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_1END ;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.