Friday, October 22, 2010

Perihal Flag Part 1(CMP dan SUB)

Pertama kita akan concentrate dengan 2 jenis Flag:
  1. Carry Flag(CF)
  2. Zero Flag(ZF)
  3. Sign Flag(SF)
Kedua kita akan tengok apa berlaku pada kedua-dua flag ni bila seru command:
  1. Compare(CMP)
  2. Subtitute(SUB)
Command Compare(CMP) dengan Subtitute(SUB) ada persamaan iaitu kedua-duanya melakukan operasi TOLAK. Cth.

SUB AX, BX adalah AX= AX-BX
SUB AX,2 adalah AX=AX-2

beza CMP dengan SUB adalah CMP takkan ubah nilai kecuali flag.
Cth:
CMP AX, BX tidak akan ubah nilai AX seperti sub tetapi akan melakukan operasi sama
CMP AX, 2 juga tidak akan ubah nilai AX seperti diterangkan tadi.

Sekarang mari kita lihat apa yang berlaku pada Flag.
Sebagai contoh sekarang nilai AX= 0002



















ASSEMBLY
AX
Carry Flag(CF)
Zero Flag(ZF)
Sign Flag(SF)
SUB AX,2
0000
0
1
0
CMP AX,2
0002
0
1
0
Di atas kita dapat lihat perbezaan antara SUB dengan CMP dimana CMP tidak mengubah nilai AX tetapi kedua-duanya akan mengubah nilai FLAG.

Cuba perhatikan contoh seterusnya
AX=0002


















ASSEMBLY
AX
Carry Flag(CF)
Zero Flag(ZF)
Sign Flag(SF)
SUB AX,4
FFFE
1
0
1
CMP AX,4
0002
1
0
1

AX=0002 lagi

















ASSEMBLY
AX
Carry Flag(CF)
Zero Flag(ZF)
Sign Flag(SF)
SUB AX,1
0001
0
0
0
CMP AX,1
0002
0
0
0

Berdasarkan pada ketiga-tiga contoh kita dapat rumuskan sebagai:
SUB kiri,kanan sebagai:





















ASSEMBLY
Nilai Kiri
Carry Flag(CF)
Zero Flag(ZF)
Sign Flag(SF)
Kiri = Kanan
0
0
1
0
Kiri < Kanan Negatif
1
0
1
Kiri > Kanan Positif
0
0
0
CMP kiri, kanan sebagai





















ASSEMBLY
Nilai Kiri
Carry Flag(CF)
Zero Flag(ZF)
Sign Flag(SF)
Kiri = Kanan
Tak Berubah
0
1
0
Kiri < Kanan Tak Berubah1
0
1
Kiri > Kanan Tak Berubah0
0
0
Buat masa sekarang itu saja yang mampu diterangkan perihal FLAG. Ada apa-apa persoalan sila nyatakan pada comment atau e-mail atau twitter.
Wallahua'lam.
,  

1 comment:

  1. oo begitu ceritanya.. thanks prof!

    ReplyDelete