GAMBAR 38
1. Tujuan[kembali]
·
- Memahami dan mengerti penggunaan bahasa assembler dengan emu8086
- Dapat membuat sebuah program aplikasi menggunakan emu 8086
- Mampu membuat program aplikasi Int 21 hexa Service 01 hexa
2. Alat dan Bahan[kembali]
1. Emulator 8086
Emu8086 merupakan aplikasi emulator bagi pemrograman bahasa assembler atau mikrokontroler. Dengan menggunakan aplikasi emulator, kita dapat mensimulasikan apakah program kontrol hardware yang kita buat sudah benar atau masih salah.
Dalam “emu8086” terdapat beberapa menu, antara lain:
- Emulate : untuk menjalankan emulator kode program yang kita buat
- Compile : untuk membuat (compile) “binary executable file” atau ekstensi “.com” atau “.exe” dari kode program.
- Run : menjalankan aplikasi dari emulator yang dihasilkan (execute).
- Single Step : Menjalankan aplikasi dengan cara tracing (diproses perbaris kode program).
Memulai pemrograman bahasa Assembler terdiri dari beberapa kode operasi code (op code) dan pseudo ops. Bentuk instruksinya adalah op code diikuti operand. Opcode adalah perintah yang akan dilaksanakan, sedangkan operand dpaat terdiri dari sumber (source) dan tujuan (destination).
PENGGUNAAN "EMU8086"
include emu8086.inc
ORG 100h
PRINT "Hello World"
Gotoxy 10,5
PUTC 65
PUTC 'B'
RET
END
ORG 100h
PRINT "Hello World"
Gotoxy 10,5
PUTC 65
PUTC 'B'
RET
END
3. Dasar Teori[kembali]
Teori Bahasa Assembler
Dalam bahasa tingkat rendah tidak dibutuhkan struktur program karena semuanya diserahkan kepada pemakai.
REGISTER
Register adalah sebagian kecil memori komputer yang dipakai untuk tempat penampungan data. Sebagian besar register yang terdapat pada mikroprosesor 8088 adalah 16 bit.
Ada 5 kelompok Register, yaitu :
1. General Purpose Register
General purpose register dapat dibagi menjadi register low dan high bits yang masing-masing berkemampuan 8 bit. Seperti register AX, register low-nya adalah AL dan register high-nya adalah AH.
Ada empat macam General purpose register yaitu:
a. Register AX (AH + AL) atau Accumulator Register adalah register aritmatik untuk dipakai dalam operasi pertambahan, pengurangan, perkalian dan pembagian. Register AH dapat juga digunakan untuk tempat nilai service number untuk beberapa interrupt tertentu.
b. Register BX (BH + BL) atau Base register adalah salah satu dari dua register base Addressing mode, yang dapat mengambil atau menulis langsung dari/ke memory.
c. Register CX (CH + CL) atau Counter Register adalah suatu counter untuk meletakkan jumlah lompatan pada loop yang dilakukan.
d. Register DX (DH + DL) atau Data Register mempunyai tiga tugas, yaitu:
1. Membantu AX dalam proses perkalian dan pembagian, terutama perkalian dan pembagian 16 bit.
2. DX merupakan register offset dari DS
3. DX bertugas menunjukkan nomor port pada operasi port
2. Segment Register
a. CS (Code Segment) Register adalah berfungsi menunjukkan segment program berada dengan pasangan register ini adalah register IP.
b. DS (Data Segment) Register adalah berfungsi menunjukkan segment dari segment data. Pasangan dari DS adalah DX.
c. SS (Stack Segment) Register adalah berfungsi menunjukkan segment dari segment stack. Pasangan dari SS adalah SP
d. ES (Extra Segment) Register adalah berfungsi untuk pemograman pada saat melakukan operasi ke segment lain.
3. Pointer Register berfungsi menyimpan offset dari relative address.
a. IP (Instruction Pointer) Register adalah berfungsi untuk menunjukkan baris perintah program. Pada saat pertama program dijalankan register ini akan langsung menunjuk pada awal program.
b. SP (Stack Pointer) Register adalah merupakan pasangan SS yang digunakan untuk operasi stack. Pada saat pertama program dijalankan register ini akan menunjuk pada byte terakhir stack.
c. BP (Base Pointer) Register adalah mempunyai fungsi sama dengan register BX, tetapi BX menulis dan membaca dengan segment DS (Data Segment) sedang BP menulis dan membaca dengan segment SS (Stack Segment).
4. Index Register yaitu SI (Source Index) dan DI (Destination Index) adalah berfungsi melakukan operasi STRING. Namun demikian, kedua register ini sering digunakan untuk menulis dan membaca ke atau dari memori seperti halnya BX dan BP.
5. Flag Register adalah berfungsi mengecek apakah sesuatu berfungsi atau tidak.
Contohnya:
- Interrupt Flag mengecek apakah pada saat operasi Interrupt sedang aktif atau tidak, bila tidak aktif, Interrupt tidak akan dijalankan.
- Carry Flag mengecek apakah pada saat operasi terjadi kesalahan atau tidak,
- Sign Flag menunjukkan apakah suatu bilangan bertanda atau tidak dan sebagainya.
PERINTAH DASAR ASSEMBLER
1. MOV
Perintah untuk mengisi, memindahkan, memperbaharui isi suatu register, variabel ataupun suatu lokasi memori.
Tata penulisan: MOV [operand1],[operand2]
a. Operand1 berupa register, variabel, lokasi memory dan
b. Operand2 berupa: register, variabel, lokasi memory ataupun bilangan.
Contoh :
MOV AH,AL ; mengkopi isi register AL ke register AH.
MOV AH, 02 ; mengisi register AH dengan 02
2. Int (Interrupt)
Subrotine yang akan dipanggil sudah tersedia pada memori komputer.
Ada dua jenis yaitu :
a. Bios Interrupt yaitu Int 0H hingga 1FH yang disediakan oleh BIOS (Basic Input Output System).
Contoh: Int 16H service 01H berfungsi untuk mencek apakah ada tombol keyboard yang ditekan.
b. DOS Interrupt yaitu Int 1FH keatas yang disediakan oleh DOS (Disk Operating System).
Contoh: Int 20H berfungsi menghentikan kerja suatu program.
3. Int 20h dan Int 21h service 02h
a. Int 20h
Bertugas memberhentikan proses komputer terhadap suatu program COM. Bila pada setiap program COM yang dibuat tidak terdapat Int 20h, maka akan terjadi hanging pada komputer. Hal ini terjadi karena komputer tidak menemukan perintah pemberhentian proses.
b. Int 21h Service 02
Seperti Int 20h, Int 21h adalah salah satu Int yang termasuk DOS Interrupt, karena Int 21h mempunyai banyak sekali tugas, maka tugasnya dibagi-bagi menjadi beberapa bagian. Untuk memanggil bagian-bagian itu, perlu menyertakan nomor bagiannya yang disebut juga dengan service number. Contoh Int 21h yang bertugas mencetak sebuah huruf ke layar yaitu fungsi kedua dari Int 21h.
Untuk menjalankan fungsi Int 21h service 02 harus dipenuhi beberapa syarat yaitu :
a) Register AH, harus berisi service number dari Int 21h yang akan dijalankan (02h).
b) Register DL, harus berisi bilangan hexa dari karakter ASCII (American Standard Code for Information Interchange) yang akan dicetak.
LOMPAT / JUMP
Pada jump dengan memakai register CX, dimana setiap kali lompat nilai CX berkurang satu dan sampai CX = 0 maka tidak bisa melompat lagi.
Pada instruksi jump ini, lompatan hanya dapat dipakai satu kali saja.
Ada 2 macam lompatan, yaitu :
1. Lompatan Tak Bersyarat
Lompatan tak bersyarat dapat dikelompokkan menjadi dua macam, yaitu :
a. Near Jump: yang jauh lompatan tidak lebih dari FF hexa byte, ataupun 256 byte.
b. Far Jump: yang jauh lompatan tidak lebih dari FFFF hexa byte, ataupun 1 segment.
Tata penulisan: JMP [Lokasi Memory]
2. Lompatan Bersyarat
Ada beberapa jenis lompatan yang kegunaannya dapat disesuaikan dengan keperluan yang dibutuhkan.
Tata penulisan: [Perintah jump] [Lokasi Memory]
Sebelum memakai lompatan bersyarat, terlebih dahulu dilakukan perintah perbandingan (Compare). Hal ini dilakukan karena untuk beberapa jenis lompatan harus menggunakannya sebelum melakukan lompatan.
Tata penulisan: CMP [Operand1],[Operand2]
Operand1: variabel atau register dan
Operand2: variabel, isi lokasi memory, lokasi memory, variabel ataupun register.
Contoh:
- CMP AX, 0120 ; Perintah ini digunakan untuk membandingkan AX dengan 0120
b. CMP BX,AX ; Perintah ini digunakan untuk membandingkan BX dengan AX.
INPUT DARI KEYBOARD
- Input Per Huruf dengan Echo(tercetak ke layar)
Menggunakan Interrupt 21 hexa dengan service number 01 hexa, yaitu:
a) AH = 01H
Proses dapat diberhentikan dengan menekan tombol control dan tombol break atau C secara bersamaan.
b) AL = Hasil penekanan input dari keyboard
Contoha program menggunakan Int 21 hexa service 01 hexa ditunjukkan pada gambar 38
Gambar 38 Program Aplikasi Int 21 hexa Service 01 hexa
Hal yang perlu diperhatikan dalam membuat program seperti ini, adalah:
b. Pointer program (IP) diharap jangan melewati daerah data karena bila melewati data akan terjadi kesalahan proses yang dapat menyebabkan terjadinya hanging.
c. Untuk itu, arahkanlah kerja program menggunakan lompatan ke arah setelah data, dalam program label 'MULAI".
d. Angka 13,10 pada akhir setiap baris data merupakan instruksi untuk ganti baris meletakkan kursor ke sebelah kolom 0 dari layar sesuai dengan fungsi kode ASCII masing-masing.
4. Program[kembali]
Prosedur Percobaan:
- Memasukkan program kedalam aplikasi emu 8086.
- Emulate program.
- Run hasil program tersebut .
5. Listing Program[kembali]
;PROGRAM INPUT KEYBOARD
START: JMP MULAI // Melakukan lompatan ke arah lokasi memori dengan label mulai.
Tanya db 'Jawablah Pertanyaan Di Bawah Ini !',13,10 //Terdapat variabel Tanya yang digunakan untuk mencetak kalimat dan angka 13,10 mengintruksi untuk ganti baris
db 'Apakah Anda seorang mahasiswa ?(Y/T)',13,10 //Mencetak kalimat dan angka 13,10 pada akhir baris data merupakan intruksi untuk ganti baris
db 'Jawaban Anda :$ //Mencetak kalimat dan $ sebagai kata yang diinputkan akan dicetak
Jawab1 db 13,10,'Anda Adalah Seorang Mahasiswa ',13,10,'$' //Terdapat variabel Jawab1 yang digunakan untuk mencetak kalimat, 13,10 mengintruksi untuk ganti baris dan $ akan mencetak hasil dari jawaban
Jawab2 db 13,10,'Anda Adalah Seorang Mahasiswi ',13,10,'$' //Terdapat variabel Jawab2 yang digunakan untuk mencetak kalimat, 13,10 mengintruksi untuk ganti baris dan $ akan mencetak hasil dari jawaban
MULAI: MOV AH,09H ; SERVICE NUMBER = 09h //Mengisi AH dengan service
MOV DX,OFFSET Tanya ; MENCETAK TANYA //Mengisi register DX dengan OFFSET DATA yaitu dengan variabel TANYA
INT 21H //Mengakhiri instruksi dan mencetak kata
ULANG: MOV AH,01H ; SERVICE NUMBER = 01h //Mengisi AH dengan service
INT 21H //Mengakhiri instruksi dan mencetak kata
CMP AL, 'Y' ; APAKAH JAWABAN 'Y' //Lompat ke jika kata Y
JE Mahasiswa ; JIKA SAMA LOMPAT KE Mahasiswa //Mencetak hasil lompatan
CMP AL, 'y' ; APAKAH JAWABAN 'y' //Lompat ke jika kata y
JE Mahasiswa ; JIKA SAMA LOMPAT KE Mahasiswa //Mencetak hasil lompatan
CMP AL, 'T' ; APAKAH JAWABAN 'T' //Lompat ke jika kata T
JE Mahasiswi ; JIKA SAMA LOMPAT KE Mahasiswi //Mencetak hasil lompatan
CMP AL, 't' ; APAKAH JAWABAN 'y' //Lompat ke jika kata t
JE Mahasiswi ; JIKA SAMA LOMPAT KE Mahasiswi //Mencetak hasil lompatan
JNE ULANG ; JIKA TIDAK SAMA LOMPAT ULANG //Melakukan lompatan jika salah input
Mahasiswi: MOV AH,09H //Mengisi AH dengan Service
MOV DX,OFFSET JAWAB2 ;MENCETAK JAWAB2 //Mengisi register DX dengan OFFSET DATA yaitu dengan variabel JAWAB2
INT 21H //Mengakhiri instruksi dan mencetak kata
JMP SELESAI ;LOMPAT KE SELESAI //Lompat ke Selesai
Mahasiswa: MOV AH,09H
MOV DX,OFFSET JAWAB1 ;MENCETAK JAWAB1 //Mengisi register DX dengan OFFSET DATA yaitu dengan variabel JAWAB1
INT 21H //Mengakhiri instruksi dan mencetak kata
SELESAI: MOV AH,4CH
INT 21H ;AKHIR PROGRAM //Mengakhiri program
6. Video[kembali]
7. Flowchart[kembali]
[kembali]
Tidak ada komentar:
Posting Komentar