Saturday, October 23, 2010

Perihal Flag Part 3(Katak Ikut Arahan)

Sebelum ni kita faham JMP iaitu JUMP atau lompat berfungsi. Jadi apa kaitannya?
Segalanya berkaitan dengan arahan CMP. Sebagai contoh

mula:
CMP AX,5
JE mati
JMP mula
mati:

Jika anda memahami post yang sebelum ini mengenai uncondition jump(JMP) anda pasti faham JMP mula bermaksud apa. Sila rujuk ilustrasi dalam pos terdahulu mengania JMP.

Untuk meneruskan pemahaman kita. Anda tertanya apa dia JE? JE atau Jump Equal bermaksud arahan untuk melakukan operasi sama seperti JMP tetapi dengan syarat AX = 5. Walau bagaimanapun dalam Pos yang sebelum ini telah dinyatakan bahawa CMP serupa dengan SUB di mana nilai kiri akan ditolak dengan yang kanan. sebagai cth:
SUB kiri, kanan sama dengan kiri=kiri-kanan
SUB AX, 5 sama dengan AX=AX-5

perbezaan SUB dengan CMP adalah SUB mengubah nilai sebelah kiri tetapi CMP tidak. Walaubagaimanapun kedua-duanya akan mengubah nilai flag.

Seperti contoh yang tadi iaitu:

mula: ;label mula
CMP AX,5 ;Lakukan perbandingan sila rujuk Perihal Flag Part 1
JE mati ; JMP ke mati
JMP mula ;kembali ke mula.
mati: ;label mati

Di atas menunjukkan CMP AX, 5 bermaksud untuk membandingkan nilai AX dengan 5(rujuk Perihal Flag Part 1). JE akan berfungsi seperti JMP seandainya AX = 5 kerana Jump if Equal(JE) bermaksud lompat jika sama. Dalam arti kata lainnya kalau AX = 5 ia akan pergi ke label 'mati'. Jika tidak JMP akan kembali ke mula dan meneruskan operasi.

JE memerlukan AX=5 oleh yang demikian CMP AX,5 akan memastikan AX=AX-5 dan ia akan memberikan nilai 0 yang menyebabkan Zero Flag(ZF) = 1. Arahan seperti JE akan melaksanakan operasi dengan melihat nilai di dalam Flag, bukan perubahan nilai dalam register seperti AX kerana fungsi CMP bukannya mengubah AX.

Selain dari JE terdapat arahan lain seperti JA(Jump if above). Di mana fungsinya sama seperti JE tetapi dengan syarat nilai berpandingan lebih besar. Sebagai contoh

mula:
CMP AX,5
JA mati
JMP mula
mati:

Arahan di atas adalah untuk membandingkan AX dengan 5 tetapi kali ini AX mestilah lebih besar dari 5 (AX>5) untuk ke label 'mati'. Jika tidak ia lompat(JMP) ke label mula. Seperti yang kita fahami sebelum ini ia bergantung pada perubahan flag. Dalam keadaan ini sudah pasti nilai AX lebih besar dari 5. Oleh itu jika AX=AX-5 akan menghasilkan nilai positif tetapi bukan kosong. Dalam post Perihal Flag Part 1 telak dinyatakan keadaan ini menyebabkan ZF=0 dan CF=0. Perubahan flag inilah yang menyebabkan arahan JA melakukan operasinya.

Untuk rujukan lanjut sila rujuk jadual di bawah.















































Arahan Penerangan Flag untunk lompat(JUMP) CMP kiri, kanan
ja jump if above CF=0 dan ZF=0 kiri > kanan
jnbe jump if not below or equal CF=0 dan ZF=0 kiri > kanan
jae jump if above or equal CF=0 kiri >= kanan
jb jump if below CF=1 kiri < kanan
jbe jump if below or equal CF=1 atau ZF=1 kiri <= kanan
je jump if equal ZF=1 kiri == kanan


Jika ada apa-apa komen serta cadangan sila jangan segan silu memberi komen serta menghubungi penulis.
Wassalam.
,  

0 comments:

Post a Comment