BAB II LANDASAN TEORI 2.1 TEORI MODUL
Program 4. Operasi XOR .MODEL SMALL ORG 100H
5.2 KESIMPULAN
2.1.2 Percabangan
Percabangan pada mikroprosesor menjadi bagian yang sangat penting karena dapat menyerhanakan program dari mikroprosesor dan menambah fleksibilitas atau kegunaan (usability) dari mikroprosesor. Seperti yang sudah dipelajari sebelumnya bahwa mikroprosesor akan mengeksekusi isi dari perintah pada Index Pointer (IP) dan Index Pointer akan merujuk ke Index Pointer dibawahnya, percabangan pada mikroprosesor dilakukan dengan cara merubah alamat dari Index Pointer ke alamat
yang diinginkan. Hal ini membuat percabangan pada mikroprosesor desebut juga sebagai lompatan.
Percabangan pada mikroprosesor dibagi menjadi dua macam percabangan, yaitu :
- Percabangan tak bersyarat (unconditional branch) - Percabangan bersyarat (conditional branch)
Percabangan tidak bersyarat adalah percabangan yang dilakukan tanpa melihat isi dari penanda/flag apapun pada saat melakukan lompatan ke alamat yang diberikan. Sedangkan Percabangan bersyarat adalah lompatan yang dilakukan jika sebuah kondisi tertentu dipenuhi. Pada mikroprosesor 8086 percabangan tidak bersyarat dapat dilakukan dengan instruksi JMP. Sedangkan percabangan bersyarat dapat dilakukan dengan mempertimbangkan beberapa kondisi penanda/ flag dimana isi flag akan berubah nilainya dengan perintah CMP (Compare).
2.1.2.1 JMP (Unconditional branch)
Perintah JMP ini digunakan untuk melompat menuju alamat label yang ditunjukkan oleh perintah JMP. Adapun syntax-nya adalah:
JMP Label_Tujuan
Tujuannya dapat berupa label seperti yang digunakan pada syntax diatas. Perintah JMP yang digunakan pada materi-materi
Dennis Auldentio Wenas 202011359 sebelumnya biasanya dimaksudkan agar melewati tempat data program, karena jika tidak ada perintah JMP ini maka data program akan ikut dieksekusi sehingga kemungkinan besar akan menyebabkan program anda menjadi Hang.
Perintah JMP ini dikategorikan sebagai Unconditional Branch, karena perintah ini tidak menyeleksi keadaan apapun untuk melakukan suatu lompatan. Setiap ditemui perintah ini maka lompatan pasti dilakukan.
2.1.2.2 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.
Dennis Auldentio Wenas 202011359 2.1.2.3 Lompat Yang Mengikuti CMP (Conditonal Branch)
Perintah CMP yang hanya mempengaruhi flag register, biasanya diikuti dengan perintah lompat yang melihat keadaan pada flags register diatas. Jenis perintah lompat yang biasanya mengikuti perintah CMP, terdapat 12 buah seperti pada Tabel di bawah ini
Perintah Lompat Kondisi
JA <Jump If Above> Lompat, jika Operand1 >
Operand2
untuk bilangan tidak bertanda JG <Jump If Greater> Lompat, jika Operand1 >
Operand2
untuk bilangan bertanda JE <Jump If Equal> Lompat, jika Operand1 sama
dengan Operand2 JNE <Jump If Not
Equal>
Lompat, jika Operand1 tidak sama
dengan Operand2
JB <Jump If Below> Lompat, jika Operand1 <
Operand2
untuk bilangan tidak bertanda JL <Jump If Less> Lompat, jika Operand1 <
Operand2
untuk bilangan bertanda JBE <Jump If Below
or Equal>
Lompat, jika operand1 <=
Operand2 untuk bilangan tidak
bertanda JLE <Jump If Less or
Equal>
Lompat, jika Operand1 <=
Operand2 untuk bilangan bertanda
JAE <Jump If Above or Equal>
Lompat, jika Operand1 >=
Operand2 untuk bilangan tidak bertanda
JGE <Jump If Greater or
Equal>
Lompat, jika Operand1 >=
Operand2 untuk bilangan bertanda
Pada tabel diatas dapat anda lihat bahwa terdapat dua operasi yang berbeda, yaitu operasi bilangan bertanda dan tidak bertanda.
Bilangan bertanda adalah bilangan yang akan membedakan bilangan negatif dan positif (Mis. 37 dan -37). Sedangkan bilangan tidak bertanda adalah bilangan yang tidak akan membedakan
Dennis Auldentio Wenas 202011359 positif dan negatif, jadi angka -1 untuk operasi bilangan bertanda akan dianggap FFh pada bilangan tidak bertanda.
Contoh Program 1. Mendemokan perintah percabangan .MODEL SMALL
.CODE ORG 100h TData: JMP Proses
BilA DB 67 ; Ganti nilai BilA dan Bil B untuk melihat perbedaannya
BilB DB 66
KalKurang DB 'Bilangan A lebih kecil dari bilangan B $' KalSama DB 'Bilangan A sama dengan bilangan B $' KalLebih DB 'Bilangan A lebih besar dari bilangan B $'
Proses :
MOV AL,BilA ; Masukkan bilangan A pada AL
CMP AL,BilB ; Bandingkan AL(BilA) dengan Bilangan B JB Akecil ; Jika BilA < BilB, lompat ke AKecil
JE Sama ; Jika BilA = BilB, lompat ke Sama JA Abesar ; Jika BilA > BilB, lompat ke Abesar Akecil:
LEA DX,KalKurang ; Ambil offset Kal0 JMP Cetak ; Lompat ke cetak Sama:
LEA DX,KalSama ; Ambil offset Kal1 JMP Cetak ; Lompat ke cetak ABesar:
LEA DX,KalLebih ; Ambil offset Kal2 Cetak:
MOV AH,09 ; Servis untuk mencetak kalimat INT 21h ; Cetak kalimat !!
EXIT: INT 20h ; Kembali ke DOS.
Dennis Auldentio Wenas 202011359 END TData
Bila program diatas dijalankan, maka akan tampak pada layar:
Bilangan A lebih besar dari bilangan B
Anda bisa mengganti nilai pada variabel BilA dan BilB untuk melihat hasil yang akan ditampilkan pada layer
Catatan penting yang harus diperhatikan pada lompat bersayarat adalah bahwa jangkauan dari lompat bersyarat tidak sama dnegan lompat tanpa syarat. Lompat bersyarat hanya dapat melompat menuju label yang berjarak -128 sampai +127 byte dari tempat lompatan.