Gambar 42. Program Aplikasi Operasi String dengan CMPSB
- Memahami dan mengerti penggunaan bahasa assembler dengan emu8086
- Dapat membuat sebuah program aplikasi menggunakan emu 8086
- Mampu membuat program aplikasi String dengan CMPSB
Emulator 8086
EMU8086 merupakan emulator untuk prosesor 8086 yang sudah dilengkapi dengan editor dan assembler yang bersifat GUI (graphical user interface). Dengan EMU8086 internal register dapat diamati dari waktu ke waktu akibat dari eksekusi suatu instruksi assembly.
Emu8086 merupakan aplikasi emulator bagi pemrograman bahasa assembler atau mikrokontroler.
EMU8086 merupakan emulator untuk prosesor 8086 yang sudah dilengkapi dengan editor dan assembler yang bersifat GUI (graphical user interface). Dengan EMU8086 internal register dapat diamati dari waktu ke waktu akibat dari eksekusi suatu instruksi assembly.
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).
Misal : MOV AX,BX
Opcode dari contoh di atas adalah MOV, sedangkan operandnya adalah AX, BX. Maksud kode di atas adalah perintah untuk menyalin data yang ada di register BX (source operand) ke register AX (destination operand).
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.
- Membuat seseorang menjadi lebih paham cara OS, prosesor dan BIOS saling bekerjasama
- Seseorang dapat lebih mengetahui proses instruksi data dan cara prosesor menjalankan instruksi
- Menyederhanakan tugas kompleks perangkat keras
- Menurunkan kebutuhan memori
- Menurunkan waktu eksekusi yang dibutuhkan
- Memahami jauh lebih tentang apa yang terjadi di dalam komputer
- Dalam melakukan suatu pekerjaan, baris program relatif lebih panjang dibanding bahasa tingkat tinggi
- Relatif lebih sulit untuk dipahami terutama jika jumlah baris sudah terlalu banyak
- Lebih sulit dalam melakukan pekerjaan rumit, misalnya operasi matematis
OPERASI STRING
a. Peng-copy-an String dan Arah Proses
Untuk melakukan peng-copy-an string, digunakan perintah Assambler yang bernama MOVS yang mempunyai dua besaran untuk perpindahan yaitu :
- MOVSB yang berguna untuk memindahkan suatu string dari posisi memory DS:[SI] ke posisi memory ES:[DI] sebanyak 1 byte setiap kali operasi. Setelah melakukan operasi tersebut, register DI dan SI akan bertambah atau berkurang satu secara otomatis.
- MOVSW yang berguna untuk memindahkan suatu string dari posisi memory DS:[SI] ke posisi memory ES:[DI] sebanyak 1 word setiap kali operasi. Setelah melakukan operasi tersebut, register DI dan SI akan bertambah atau berkurang dua secara otomatis.
Bila direction flag berisikan 0 akan proses akan berlangsung ke bawah(ke arah memory yang lebih besar) dan bila berisikan 1 maka proses akan berlangsung ke atas(ke arah memory yang lebih kecil).
Perintah-perintah untuk menset direction flag menjadi 0 atau 1 adalah 'CLD' dan 'STD' yang masing-masing berarti 'Clear Direction Flag' dan 'Set Direction Flag.
b. Membandingkan String
Seperti halnya MOVS yang berasal dari kata MOV, maka pembanding stringpun bertata penulisan CMPS dan mempunyai dua besaran pembandingan, yaitu :
Seperti halnya MOVS yang berasal dari kata MOV, maka pembanding stringpun bertata penulisan CMPS dan mempunyai dua besaran pembandingan, yaitu :
- CMPSB yaitu membandingkan string satu byte yang terdapat diposisi ES:[DI] dengan posisi DS:[SI]. setiap selesai membandingkan, maka DI dan SI akan bertambah atau berkurang satu.
- CMPSW yaitu membandingkan string dua byte yang terdapat diposisi ES:[DI] dan posisi DS:[SI]. Setiap selesai membandingkan, maka SI dan DI akan bertambah atau berkurang dua.
Bila CMPS ini dilaksanakan dan kedua operand isinya tidak sama, maka CMPS akan mempengaruhi beberapa flag register diantaranya adalah Carry Flag.
- Memasukkan program kedalam aplikasi emu 8086.
- Emulate program.
- Run hasil program tersebut .
6. Penjelasan Program[Kembali]
Pertama harus menyediakan variabel yang berisi password yang akan dibandingkan dengan variabel yang akan di inputkan oleh user, kemudian menyediakan variabel yang akan di isi oleh user.kemudian menyediakan dua buah variabel yaitu 'SALAH' dimana yang berisikan string "SALAH ULANGI PASSWORD ANDA!" dan variabel "BENAR" yang berisi string "BENAR".
Pertama program menampilkan string "PASSWORD ANDA?: " kemudian user diperintahkan untuk menginputkan passwor dimana hasil penginputan akan dimasukkan ke variabel 'PASSWORD1' kemudian isi dari variabel ini akan dibandingkan dengan isi dari variabel LEI. Jika isi dari kedua variabel ini tidak sebanding maka akan tampil "SALAH ULANGI PASSWORD ANDA" jika kedua variabel ini sebanding maka akan tampil "BENAR".
START: JMP MULAI = /ketika program jalan, program langsung jump/melompat ke fungsi Mulai .
KATA DB 'PASSWORD ANDA?: $' = mendeklarasikan variabel KATA dalam bentuk DB (Define byte klo dk salah) yang berisi string 'PASSWORD ANDA?: $' tanda dolar digunakan agar variabel KATA bisa menggunakan Int 21 hexa service 09 hexa.
LEI DB 'LEI' = mendeklarasikan variabel lei yang berisi string lei
PASSWORD1 DB 4,?,4 DUP(?) = mendeklarasikan 4 Define BYTE tidak diketahui isinya dengan nama PASSWORD1
SALAH DB 13,10, 'SALAH ULANGI PASSWORD ANDA!' ,13,10,13,10,'$' = mendeklarasikan variabel SALAH dalam bentuk DB yang berisikan string 'SALAH ULANGI PASSWORD ANDA!'Angka 13,10 itu untuk enter(newline) dan meletakkan kursor ke sebelah kolom 0 dari layar
BENAR DB 13,10, 'BENAR !',13,10,13,10, '$' = variabel BENAR dalam bentuk DB yang berisikan string.
BENAR DB 13,10, 'BENAR !',13,10,13,10, '$' = variabel BENAR dalam bentuk DB yang berisikan string.
MULAI: MOV AH 09H = AH diisi dengan service number dari interrupt.
MOV DX, OFFSET KATA = merupakan register untuk membaca isi data yang diberi label "kata"
MOV DX, OFFSET KATA = merupakan register untuk membaca isi data yang diberi label "kata"
PUSH DS = PUSH berfungsi untuk memasukkan isi suatu register/variabel ke stack.
Stack adalah tempat peletakan sementara isi register.
Stack pada file.COM terdapat diakhir segment dan ketika pertama kali dijalankan program penunjuk stack (SP) akan langsung ke byte terakhir dari segment.
DS adalah segment variabel tempat menampung kata yang akan dicetak
Stack pada file.COM terdapat diakhir segment dan ketika pertama kali dijalankan program penunjuk stack (SP) akan langsung ke byte terakhir dari segment.
DS adalah segment variabel tempat menampung kata yang akan dicetak
POP ES = POP merupakan perintah untuk Untuk mengeluarkan isi register/variabel dari stack.d.
ES (Extra Segment) Register adalah berfungsi untuk pemograman pada saat melakukan operasi ke segment lain.
MOV CX,03H = karena ada 3 karakter password yaitu LEI
MOV CX,03H = karena ada 3 karakter password yaitu LEI
CLD = merupakan proses ke bawah
ULANG: CMPSB = proses CMPSB dimana terjadinya membandingkan string satu byte yang terdapat diposisi ES:[DI] dengan posisi DS:[SI]. setiap selesai membandingkan, maka DI dan SI akan bertambah atau berkurang satu.
Jc SALAH 1: Jika tidak sama ke salah
MOV AH, 09H = AH diisi dengan service number dari interrupt
MOV DX, OFFSET BENAR = merupakan register untuk membaca isi data yang diberi label "BENAR"
INT 21H = Cetak kata
MOV DX, OFFSET SALAH = merupakan register untuk membaca isi data yang diberi label "SALAH"
INT 21H = Cetak kata
JMP MULAI = Loncat ke mulai
Tidak ada komentar:
Posting Komentar