Lompat Bersyarat dengan CMP Pada Assembly

Assalamu'alaykum



Pada tutorial sebelumnya, kita membahas mengenai perintah JMP, nah pada kali ini membahas perintah JMP juga, namun bersyarat, apa itu bersyarat ? maksudnya perintah akan dijalankan jika syaratnya terpenuhi, seperti perintah if pada pascal.

Untuk melakukan perintah tersebut dibutuhkan pembanding atau Compare , pada assembly di buat dengan perintah CMP. Perintah CMP(Compare) digunakan untuk membandingkan dua operand, dengan syntax :

CMP operand1,operand2

Jenis perintah lompat yang mengikuti CMP, terdapat 12 buah, seperti berikut:

Perintah Lompat
Kondisi
JA ( Jump If Above )
Lompat, jika operand1 > operand 2
untuk bilangan tidak bertanda

JG ( Jump If Greater )
Lompat, jika operand1 > operand2
untuk bilangan bertanda
JE ( Jump If Equal )
Lompat, jika operand1 = 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 operand2 < 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.

Kita akan mencetak kalimat dengan perintah CMP dan JMP, langkah yang harus dilakukan adalah sebagai berikut:

Seperti biasa,siapkan terlebih dahulu aplikasi assembler nya, download di sini.

Selanjutnya buka cmd atau DOSBox untuk mengcompile program yang kita buat.


Ketikkan kode berikut pada text editor kalian.

.model small
.code
org 100h

TData    : JMP Proses

        BilA DB 65
        BilB DB 60
        Kal0 DB 'Bilangan A lebih kecil dari bilangan B $'
        Kal1 DB 'Bilangan A sama dengan bilangan B $'
        Kal2 DB 'Bilangan A lebih besar dari bilangan B $'

Proses     :
        MOV AL,BilA
        CMP AL,BilB
        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,9
        INT 21h

EXIT    :
        int 20h

end        TData

Simpan dengan ekstensi *.ASM. Dilanjutkan dengan compile program, ketikkan perintah tasm 'namaprogram' kemudian linking dengan perintah tlink/t 'namaprogram' . Jalankan program


Jika progam dijalankan akan menghasilkan kalimat Bilangan A sama dengan bilangan B. Pada perintah  BilA DB 65 dan BilB DB 60 adalah untuk memasukkan nilai dari Bilangan A dan B. Kemudian pada perintah MOV AL,BilA untuk memindahkan nilai BilA ke register AL. Untuk membandingkan nilai BilA dan BilB maka terdapat perintah CMP AL,BilB.

beberapa output yang terjadi adalah.
jika A = B : Bilangan A sama dengan bilangan B
jika A < B : Bilangan A kurang dari bilangan B
jika A > B : Bilangan A lebih dari bilangan B

Bedasarkan pada perintah JB,JE,dan JA. Kita hanya perlu mengubah nilai dari BilA dan BilB saja.

Selanjutnya kita akan membuat sebuah program membandingkan nilai ujian.

Ini adalah kode programnya

.MODEL SMALL
.CODE
ORG 100h

TData    :     JMP Proses
           
            UAS DB 86
           
            Kal0 DB 'Lulus $'
            Kal1 DB 'Tidak Lulus $'
            Kal2 DB 'Cumlaude $'
           

Proses    :
           
            MOV AL,UAS
           
            CMP AL,50
            JBE Tlulus

            CMP AL,85
            JAE Cumlaude
           
            CMP AL,54
            JAE    Lulus

            Tlulus    :
                LEA DX,Kal1
                JMP    Cetak
           
            Cumlaude    :
                LEA    DX,Kal2
                JMP Cetak

            Lulus    :
                LEA DX,Kal0
                JMP    Cetak
Cetak    :       
            MOV AH,09
            INT 21h

EXIT : INT 20h
END        TData

Program tersebut membandingkan nilai UAS dengan masing-masing Compare(CMP). 

CMP AL,50
JBE Tlulus    ; jika nilai kurang dari atau sama dengan 50

maka output yang dihasilkan adalah Tidak Lulus

CMP AL,85
JAE Cumlaude ; jika nilai lebih dari atau sama dengan 85

maka output adalah cumlaude

CMP AL,54
JAE Lulus ; jika nilai lebih dari atau sama dengan 54 

maka output adalah Lulus

Kita jalankan program tersebut. Saya memasukkan nilai 86 . 


Maka hasilnya adalah Cumlaude.

Terimakasih.

Wassalamu'alaykum.




1 komentar:

Posting Komentar