p6 adam mikro
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.