Kelas : 1 CB
NIM : 061430700548
Dosen: Ali Firdaus,S.Kom;M.Kom
A.PENGERTIAN
LOMPAT TANPA SYARAT
Perintah JMP(Jump), sudah pernah kita gunakan, dimana perintah ini digunakan untuk melompati daerah data program. Perintah JMP digunakan dengan syntax:
JMP Tujuan
Perintah JMP ini dikategorikan sebagai Unconditional Jump, karena perintah ini tidak menyeleksi keadaan apapun untuk melakukan suatu lompatan. Setiap ditemui perintah ini maka lompatan pasti dilakukan.
Selain dari perintah jump tanpa syarat, masih banyak perintah Jump yang menyeleksi suatu keadaan tertentu sebelum dilakukan lompatan. Perintah jump dengan penyeleksian kondisi terlebih dahulu biasanya diikuti dengan perintah untuk melihat kondisi, seperti membandingkan dengan perintah "CMP"(Compare).
MEMBANDINGKAN DENGAN CMP
Perintah CMP(Compare) digunakan untuk membandingkan 2 buah operand, dengan syntax:
CMP Operand1,Operand2
CMP akan membandingkan operand1 dengan operand2 dengan cara mengurangkan operand1 dengan operand2. CMP tidak mempengaruhi nilai Operand1 dan Operand2, perintah CMP hanya akan mempengaruhi flags register sebagai hasil perbandingan.
Adapun flag-flag yang terpengaruh oleh perintah CMP ini adalah:
- OF akan 1, jika operand1 lebih kecil dari operand2 pada operasi
bilangan bertanda.
- SF akan 1, bila operand1 lebih kecil dari operand2, pada operasi
bilangan bertanda.
- ZF akan 1, jika operand1 nilainya sama dengan operand2.
- CF akan 1, jika operand1 lebih kecil dari operand2 pada operasi
bilangan tidak bertanda.
Perlu anda ingat bahwa CMP tidak dapat membandingkan antar 2 lokasi memory.
LOMPAT YANG MENGIKUTI CMP
Perintah CMP yang hanya mempengaruhi flag register, biasanya diikuti dengan perintah lompat yang melihat keadaan pada flags register ini. Jenis perintah lompat yang biasanya mengikuti perintah CMP, terdapat 12 buah.
-----------------------------+----------------------------------
Perintah Lompat | Kondisi
-----------------------------+----------------------------------
1. JA <Jump If Above> | Lompat, jika Operand1 > Operand2
| untuk bilangan tidak bertanda
2. JG <Jump If Greater> | Lompat, jika Operand1 > Operand2
| untuk bilangan bertanda
3. JE <Jump If Equal> | Lompat, jika Operand1 = Operand2
4. JNE <Jump If Not Equal> | Lompat, jika Operand1 tidak sama
| dengan Operand2
5. JB <Jump If Below> | Lompat, jika Operand1 < Operand2
| untuk bilangan tidak bertanda
6. JL <Jump If Less> | Lompat, jika Operand1 < Operand2
| untuk bilangan bertanda
7. JBE <Jump If Below or Equal>| Lompat, jika operand1 <= Operand2
| untuk bilangan tidak bertanda
8. JLE <Jump If Less or Equal> | Lompat, jika Operand1 <= Operand2
| untuk bilangan bertanda
9. JAE <Jump If Above or Equal>| Lompat, jika Operand1 >= Operand2
| untuk bilangan tidak bertanda
10. JGE <Jump If Greater or | Lompat, jika Operand1 >= Operand2
Equal> | untuk bilangan bertanda
-----------------------------+----------------------------------
B. LANGKAH-LANGKAH
contohnya adalah program menampilkan hasil "Lulus,Lulus bersyarat,atau Tidak lulus" berdasarkan nilai yang dimasukkan pada program Assembly
1.Buka Command Prompt
2.Pada command prompt ketikkan d: lalu cd(spasi)nama folder
3.Ketikkan edit,lalu akan muncul layar biru tempat kita mengetikkan program
4.Ketikkan perintah program ini :
.MODEL SMALL
.CODE
ORG 100h
Tdata : JMP proses
UAS DB 20
Kal0 DB 'tidak lulus $'
Kal1 DB ' lulus bersyarat $'
Kal2 DB 'tidak lulus $'
Tdata : JMP proses
UAS DB 20
Kal0 DB 'tidak lulus $'
Kal1 DB ' lulus bersyarat $'
Kal2 DB 'tidak lulus $'
Proses :
MOV AL,UAS
CMP AL,40
JB AKecil
JE Sama
JA Abesar
Akecil :
lea dx,Kal0
JMP cetak
Sama :
lea dx,Kal1
JMP cetak
Abesar :
lea dx,Kal2
cetak :
MOV AH,09h
INT 21h
exit : INT 20h
END Tdata
#Nilai UAS DB lebih besar dari CMP AL
#Nilai UAS DB sama dengan CMP AL
MOV AL,UAS
CMP AL,40
JB AKecil
JE Sama
JA Abesar
Akecil :
lea dx,Kal0
JMP cetak
Sama :
lea dx,Kal1
JMP cetak
Abesar :
lea dx,Kal2
cetak :
MOV AH,09h
INT 21h
exit : INT 20h
END Tdata
5. Jika sudah, simpan program tersebut dengan nama terserah anda. Misal : jump2.asm
6. Setelah disimpan , klik menu File-->Exit , dan akan kembali ke laman Command Prompt awal
7.
Kemudian TASM program yang sudah dibuat tadi untuk mengecek apakah
terdapat kesalahan atau tidak, yaitu dengan cara ketik tasm(spasi) nama
folder . Misal : tasm(spasi)jump2
8. Setelah di TASM, kemudian lingking dengan menggunakan TLINK. Misal : tlink(spasi)jump2
9. Selanjutnya ketikkan TLINK/T. Misal : tlink/t(spasi)jump2
10.Langkah terakhir, ketikkan lagi nama folder program tadi dan lihat apakah tulisan "lulus,lulus bersyarat,atau tidak lulus" muncul atau tidak. Tulisan yang muncul sesuai dengan nilai angka yang dimasukkan pada program.
#nilai UAS DB lebih kecil dari CMP AL
#Nilai UAS DB sama dengan CMP AL
KETERANGAN :
# .MODEL SMALL --> Bentuk memory yang digunakan kurang dari 1 segment atau 64 KB
# .CODE --> Menyimpan program yang nantinya akan dijalankan
# ORG 100h --> Kita menyediakan 100 byte kosong pada saat program dijalankan, untuk mengontrol jalannya program tersebut
#Tdata--> Label untuk memulai
#JMP proses-->Lompat ke proses
#UAS DB(angka)--> Memasukkan nilai pada "UAS"
#Kal0 DB 'lulus $' --> Mencetak karakter "LULUS"
#Kal1 DB 'lulus bersyarat $' --> Mencetak karakter "LULUS BERSYARAT"
#Kal2 DB 'tidak lulus $'--> Mencetak karakter "TIDAK LULUS"
# PROSES --> Label untuk memulai
#MOV AL,UAS --> Memindahkan/memasukkan register UAS ke AL
#CMP AL,40 --> Membandingkan Nilai UAS dengan nilai 40
#JB AKecil -->Lompat ke Akecil jika operan1<operand2
#JE Sama --> Lompat ke Sama jika operand1=operand2
#JA Abesar --> Lompat ke Abesar jika operand1>operand2
#Akecil --> Label
# lea dx,Kal0 --> Ambil offset Kal0
#JMP cetak --> Lompat ke cetak
#Sama--> Label
#lea dx,Kal1--> Ambil offset Kal1
#JMP cetak--> Lompat ke cetak
#Abesar --> Label
#lea dx,Kal2 --> Ambil offset Kal2
#cetak--> Label untuk mencetak
#MOV AH,09h-->Servis untuk mencetak kalimat
#INT 21h-->Cetak kalimat
#exit : INT 20h--> Kembali ke DOS
#END Tdata --> Mengakhiri program assembly
hunaka download^^
***** ^_^ JAZAKILAH ^_^ *****
#Tdata--> Label untuk memulai
#JMP proses-->Lompat ke proses
#UAS DB(angka)--> Memasukkan nilai pada "UAS"
#Kal0 DB 'lulus $' --> Mencetak karakter "LULUS"
#Kal1 DB 'lulus bersyarat $' --> Mencetak karakter "LULUS BERSYARAT"
#Kal2 DB 'tidak lulus $'--> Mencetak karakter "TIDAK LULUS"
# PROSES --> Label untuk memulai
#MOV AL,UAS --> Memindahkan/memasukkan register UAS ke AL
#CMP AL,40 --> Membandingkan Nilai UAS dengan nilai 40
#JB AKecil -->Lompat ke Akecil jika operan1<operand2
#JE Sama --> Lompat ke Sama jika operand1=operand2
#JA Abesar --> Lompat ke Abesar jika operand1>operand2
#Akecil --> Label
# lea dx,Kal0 --> Ambil offset Kal0
#JMP cetak --> Lompat ke cetak
#Sama--> Label
#lea dx,Kal1--> Ambil offset Kal1
#JMP cetak--> Lompat ke cetak
#Abesar --> Label
#lea dx,Kal2 --> Ambil offset Kal2
#cetak--> Label untuk mencetak
#MOV AH,09h-->Servis untuk mencetak kalimat
#INT 21h-->Cetak kalimat
#exit : INT 20h--> Kembali ke DOS
#END Tdata --> Mengakhiri program assembly
hunaka download^^
***** ^_^ JAZAKILAH ^_^ *****
Tidak ada komentar:
Posting Komentar